[PATCH v14 0/9] Add rseq extensible ABI support
Michael Jeanson
mjeanson@efficios.com
Mon Jan 6 18:54:44 GMT 2025
On 2024-12-30 05:06, Florian Weimer wrote:
> * Florian Weimer:
>
>> * Mathieu Desnoyers:
>>
>>>> So it looks like that TLS_DTV_AT_TP part doesn't work, unfortunately.
>>>> I see many new failures (after the mentioned revert) on powerpc64le,
>>>> which is one of those targets. I haven't tried to reproduce them yet
>>>> on AArch64. The GCC compile farm has a powerpc64le test machine
>>>> (gcc120.fsffrance.org).
>>>
>>> I recall that Michael did test on at least one architecture
>>> with TLS_DTV_AT_TP (aarch64), and one with TLS_TCB_AT_TP (x86-64).
>>>
>>> The issue may be specific to powerpc.
>>
>> Maybe it's caused by a non-zero TLS_TP_OFFSET. We use a shifted thread
>> pointer on POWER, presumably to increase the reach of signed
>> displacements in TLS-accessing instructions.
>>
>> This is alluded to in this comment:
>>
>> #ifdef RSEQ_SIG
>> /* This should be a compile-time constant, but the current
>> infrastructure makes it difficult to determine its value. Not
>> all targets support __thread_pointer, so set __rseq_offset only
>> if the rseq registration may have happened because RSEQ_SIG is
>> defined. */
>> _rseq_offset = (char *) &pd->rseq_area - (char *) __thread_pointer ();
>> #endif
>>
>> If this is indeed the cause, we should define TLS_TP_OFFSET on all
>> architectures and use it to initialize __rseq_offset. Similar to what I
>> started here:
>>
>> [PATCH 1/4] elf: Introduce generic <dl-tls.h>
>> <https://inbox.sourceware.org/libc-alpha/1b470b147d0bfe51af6256b10cd38c14285a61b2.1735313702.git.fweimer@redhat.com/>
>
> With
>
> diff --git a/elf/dl-tls.c b/elf/dl-tls.c
> index 57e72be4..1055032a 100644
> --- a/elf/dl-tls.c
> +++ b/elf/dl-tls.c
> @@ -419,7 +419,7 @@ _dl_determine_tlsoffset (void)
> The alignment requirements of the pointer resulting from this offset and
> the thread pointer are enforced by 'max_align' which is used to align the
> tcb_offset. */
> - _dl_extra_tls_set_offset(offset);
> + _dl_extra_tls_set_offset(offset - TLS_TP_OFFSET);
>
> /* Add the extra TLS block to the global offset. */
> offset += extra_tls_size;
>
> the results look better, but I'm not sure if this is the correct fix.
>
> I see crashes on the scv 0 instruction in statically linked binaries.
> Looks like the TCB placement is wrong and the flag that indicates
> support for the new system call instruction (scv 0) is not loaded
> correctly.
>
> Thanks,
> Florian
>
Hi,
Sorry for the delay, I'm now back from holidays.
I'm setting up a ppc64el test VM to investigate this, I had only tested
the TLS_DTV_AT_TP implementation on aarch64 with the assumption that
the other architectures would behave similarly, that might have been
too optimistic.
Thanks,
Michael
More information about the Libc-alpha
mailing list