[PATCH] x86-64: Move nptl/rseq-access.h to nptl/64 [BZ #32543]

Florian Weimer fweimer@redhat.com
Sat Jan 11 09:41:10 GMT 2025


* H. J. Lu:

> commit 494d65129ed5ae1154b75cc189bbdde5e9ecf1df
> Author: Michael Jeanson <mjeanson@efficios.com>
> Date:   Thu Aug 1 10:35:34 2024 -0400
>
>     nptl: Introduce <rseq-access.h> for RSEQ_* accessors
>
> added things like
>
>        asm volatile ("movl %%fs:%P1(%q2),%0"                                  \
>                      : "=r" (__value)                                         \
>                      : "i" (offsetof (struct rseq_area, member)),             \
>                        "r" (__rseq_offset));
>
> But this doesn't work for x32 when __rseq_offset is negative since the
> address is computed as
>
> FS + 32-bit to 64-bit zero extension of __rseq_offset
> + offsetof (struct rseq_area, member)
>
> Move x86_64/nptl/rseq-access.h to x86_64/nptl/64/rseq-access.h so that
> sysdeps/nptl/rseq-access.h is used for x32.  This fixes BZ #32543.

Would this work on x86-64 and x86-64 x32?

       asm volatile ("movl %%fs:%P1(%q2),%0"                                  \
                     : "=r" (__value)                                         \
                     : "i" (offsetof (struct rseq_area, member)),             \
                       "r" ((long long int) __rseq_offset));

Thanks,
Florian



More information about the Libc-alpha mailing list