mirror of
https://sourceware.org/git/glibc.git
synced 2025-05-28 16:21:30 +03:00
The memcpy optimization (commit 587a1290a1af7bee6db) has a series of mistakes: - The implementation is wrong: the chunk size calculation is wrong leading to invalid memory access. - It adds ifunc supports as default, so --disable-multi-arch does not work as expected for riscv. - It mixes Linux files (memcpy ifunc selection which requires the vDSO/syscall mechanism) with generic support (the memcpy optimization itself). - There is no __libc_ifunc_impl_list, which makes testing only check the selected implementation instead of all supported by the system. This patch also simplifies the required bits to enable ifunc: there is no need to memcopy.h; nor to add Linux-specific files. The __memcpy_noalignment tail handling now uses a branchless strategy similar to aarch64 (overlap 32-bits copies for sizes 4..7 and byte copies for size 1..3). Checked on riscv64 and riscv32 by explicitly enabling the function on __libc_ifunc_impl_list on qemu-system. Changes from v1: * Implement the memcpy in assembly to correctly handle RISCV strict-alignment. Reviewed-by: Evan Green <evan@rivosinc.com> Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
28 lines
720 B
Makefile
28 lines
720 B
Makefile
ifeq ($(subdir),misc)
|
|
sysdep_headers += \
|
|
sys/cachectl.h \
|
|
sys/hwprobe.h \
|
|
# sysdep_headers
|
|
|
|
sysdep_routines += \
|
|
flush-icache \
|
|
hwprobe \
|
|
# sysdep_routines
|
|
|
|
endif
|
|
|
|
ifeq ($(subdir),stdlib)
|
|
gen-as-const-headers += ucontext_i.sym
|
|
endif
|
|
|
|
abi-variants := ilp32 ilp32d lp64 lp64d
|
|
|
|
ifeq (,$(filter $(default-abi),$(abi-variants)))
|
|
$(error Unknown ABI $(default-abi), must be one of $(abi-variants))
|
|
endif
|
|
|
|
abi-ilp32-condition := __WORDSIZE == 32 && defined __riscv_float_abi_soft
|
|
abi-ilp32d-condition := __WORDSIZE == 32 && defined __riscv_float_abi_double
|
|
abi-lp64-condition := __WORDSIZE == 64 && defined __riscv_float_abi_soft
|
|
abi-lp64d-condition := __WORDSIZE == 64 && defined __riscv_float_abi_double
|