[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