[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