[PATCH v2 1/2] riscv: vdso: Prevent gcc from inserting calls to memset()
Alexandre Ghiti
alex at ghiti.fr
Mon Oct 14 04:12:52 PDT 2024
Hi Palmer,
On 17/09/2024 17:41, Palmer Dabbelt wrote:
> On Thu, 04 Jul 2024 23:09:01 PDT (-0700), alexghiti at rivosinc.com wrote:
>> gcc is smart enough to insert a call to memset() in
>> riscv_vdso_get_cpus(), which generates a dynamic relocation.
>>
>> So prevent gcc from doing that by using the
>> -fno-tree-loop-distribute-patterns option.
>
> This option doesn't exist on LLVM (at least on whatever version I'm
> using), and I'm not getting any memset()s generated locally so I'm not
> sure what to look for over there.
>
When compiling a rv32_defconfig (still on 6.12), I get:
~/linux$ riscv64-unknown-elf-readelf -r
build_defconfig_rv32/arch/riscv/kernel/vdso/vdso.so
Relocation section '.rela.dyn' at offset 0x5a0 contains 1 entry:
Offset Info Type Sym.Value Sym. Name + Addend
00000314 00000205 R_RISCV_JUMP_SLOT 00000000 memset + 0
> From poking around GCC it looks like we might want -fno-tree-ccp too?
> That seems to be able to convert assignments into builtins as well...
I gave a try at -fno-tree-ccp, but it did not remove this relocation.
I now see this relocation in llvm too, so it would be nice to find a
common option or another way to do it, any idea is welcome!
Thanks,
Alex
>
>> Signed-off-by: Alexandre Ghiti <alexghiti at rivosinc.com>
>> ---
>> arch/riscv/kernel/vdso/Makefile | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/arch/riscv/kernel/vdso/Makefile
>> b/arch/riscv/kernel/vdso/Makefile
>> index f7ef8ad9b550..c7e40bf36371 100644
>> --- a/arch/riscv/kernel/vdso/Makefile
>> +++ b/arch/riscv/kernel/vdso/Makefile
>> @@ -18,6 +18,7 @@ obj-vdso = $(patsubst %, %.o, $(vdso-syms)) note.o
>>
>> ccflags-y := -fno-stack-protector
>> ccflags-y += -DDISABLE_BRANCH_PROFILING
>> +ccflags-y += -fno-tree-loop-distribute-patterns
>>
>> ifneq ($(c-gettimeofday-y),)
>> CFLAGS_vgettimeofday.o += -fPIC -include $(c-gettimeofday-y)
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
More information about the linux-riscv
mailing list