[PATCH] x86-64: Stack alignment in _dl_tlsdesc_dynamic and red zone usage (bug 31501)
Florian Weimer
fweimer@redhat.com
Sat Mar 16 14:57:11 GMT 2024
* H. J. Lu:
> On Sat, Mar 16, 2024 at 7:37 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>>
>> On Sat, Mar 16, 2024 at 7:33 AM Florian Weimer <fweimer@redhat.com> wrote:
>> >
>> > In sysdeps/x86_64/dl-tlsdesc-dynamic.h, the stack pointer is
>> > realigned for some variants (notably _dl_tlsdesc_dynamic_xsavec).
>> > This realignment does not take into account that the function has
>> > already used part of the red zone at this point, thus clobbering
>> > the initally saved register values located there if the stack
>> > alignment inherited from the caller is unfortunate.
>> >
>> > (Note: I do not know to write a good test case for this in the existing
>> > framework. We saw this as a random LTO plugin crash when building GCC
>> > with -mtls-dialect=gnu2. The existing tests on pass on x86_64-linux-gnu
>> > with this change here.)
>>
>> Will a different STATE_SAVE_OFFSET for TLS descriptor work?
>
> Correction. REGISTER_SAVE_AREA is for this purpose. Will a different
> value for TLS descriptor work?
I think REGISTER_SAVE_AREA is for the later register saves?
This use of the red zone is specific to to the TLS trampoline. The lazy
binding trampoline doesn't do that. REGISTER_SAVE_AREA is used by both.
Thanks,
Florian
More information about the Libc-alpha
mailing list