[PATCH v2 5/5] Linux: Consolidate auxiliary vector parsing

Adhemerval Zanella adhemerval.zanella@linaro.org
Fri Feb 11 14:17:12 GMT 2022



On 11/02/2022 10:49, Florian Weimer wrote:
> * Szabolcs Nagy:
> 
>> The 02/11/2022 09:47, Adhemerval Zanella wrote:
>>> On 11/02/2022 09:31, Szabolcs Nagy via Libc-alpha wrote:
>>>> The 02/03/2022 12:08, Florian Weimer via Libc-alpha wrote
>>>>> +  dl_parse_auxv_t auxv_values = { 0, };
>>>>> +  _dl_parse_auxv (av, auxv_values);
>>>>
>>>> this seems to use memset now on aarch64 before irelative
>>>> relocs are resolved in static binaries.
>>>>
>>>> which causes infinite loops in the iplt (i've also seen
>>>> segfaults in the build log).
>>>>
>>>> i wonder what is a clean fix...
>>>>
>>>
>>> Maybe add inhibit_loop_to_libcall to avoid the memset call.
>>
>> does not work for me..
>> happens at -O0 too
>> https://godbolt.org/z/W9r3nffYd
> 
> Seems to happen with -fno-builtin or -ffreestanding as well.  It's a GCC
> bug, but I'll investigating working around it.

I don't think it is gcc bug, even for -ffreestanding compiler can assume
the C environment will always provide memset/memcpy.  The problem is we
need a gcc option to avoid such optimization, which afaik there is none.

And without such option I think we will need to either revert this change
or use the symbol alias strategy to avoid using IFUNC on loader code.


More information about the Libc-alpha mailing list