[PATCH v2] riscv: Fix alignment-ignorant memcpy implementation
Palmer Dabbelt
palmer@rivosinc.com
Wed Mar 6 05:28:59 GMT 2024
On Tue, 05 Mar 2024 11:30:18 PST (-0800), Evan Green wrote:
> On Tue, Mar 5, 2024 at 9:03 AM Adhemerval Zanella
> <adhemerval.zanella@linaro.org> wrote:
>>
>> 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.
>>
>> ---
>
> Thanks again for the quick fixup.
Ya, and sorry we broke it. I'll make sure to run "make check" next
time.
> Reviewed-by: Evan Green <evan@rivosinc.com>
>
Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
More information about the Libc-alpha
mailing list