Linux: Use ptrdiff_t for __rseq_offset
Checks
Context |
Check |
Description |
dj/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
dj/TryBot-32bit |
success
|
Build for i686
|
Commit Message
This matches the data size initial-exec relocations use on most
targets.
Tested on armv7hl-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu,
s390x-linux-gnu, x86_64-linux-gnu. Built with build many-glibcs.py.
---
manual/threads.texi | 2 +-
sysdeps/nptl/dl-tls_init_tp.c | 4 ++--
sysdeps/unix/sysv/linux/aarch64/ld.abilist | 2 +-
sysdeps/unix/sysv/linux/alpha/ld.abilist | 2 +-
sysdeps/unix/sysv/linux/ia64/ld.abilist | 2 +-
sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist | 2 +-
sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist | 2 +-
sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist | 2 +-
sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist | 2 +-
sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist | 2 +-
sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist | 2 +-
sysdeps/unix/sysv/linux/sys/rseq.h | 3 ++-
sysdeps/unix/sysv/linux/x86_64/64/ld.abilist | 2 +-
13 files changed, 15 insertions(+), 14 deletions(-)
Comments
----- On Feb 2, 2022, at 10:02 AM, Florian Weimer fweimer@redhat.com wrote:
> This matches the data size initial-exec relocations use on most
> targets.
>
> Tested on armv7hl-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu,
> s390x-linux-gnu, x86_64-linux-gnu. Built with build many-glibcs.py.
Thanks!
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
>
> ---
> manual/threads.texi | 2 +-
> sysdeps/nptl/dl-tls_init_tp.c | 4 ++--
> sysdeps/unix/sysv/linux/aarch64/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/alpha/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/ia64/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/sys/rseq.h | 3 ++-
> sysdeps/unix/sysv/linux/x86_64/64/ld.abilist | 2 +-
> 13 files changed, 15 insertions(+), 14 deletions(-)
>
> diff --git a/manual/threads.texi b/manual/threads.texi
> index 4869f69d2c..48fd562923 100644
> --- a/manual/threads.texi
> +++ b/manual/threads.texi
> @@ -1004,7 +1004,7 @@ The manual for the @code{rseq} system call can be found
> at
> @uref{https://git.kernel.org/pub/scm/libs/librseq/librseq.git/tree/doc/man/rseq.2}.
> @end deftp
>
> -@deftypevar {int} __rseq_offset
> +@deftypevar {ptrdiff_t} __rseq_offset
> @standards{Linux, sys/rseq.h}
> This variable contains the offset between the thread pointer (as defined
> by @code{__builtin_thread_pointer} or the thread pointer register for
> diff --git a/sysdeps/nptl/dl-tls_init_tp.c b/sysdeps/nptl/dl-tls_init_tp.c
> index 531a065ed7..1294c91816 100644
> --- a/sysdeps/nptl/dl-tls_init_tp.c
> +++ b/sysdeps/nptl/dl-tls_init_tp.c
> @@ -46,7 +46,7 @@ rtld_mutex_dummy (pthread_mutex_t *lock)
>
> const unsigned int __rseq_flags;
> const unsigned int __rseq_size attribute_relro;
> -const int __rseq_offset attribute_relro;
> +const ptrdiff_t __rseq_offset attribute_relro;
>
> void
> __tls_pre_init_tp (void)
> @@ -119,7 +119,7 @@ __tls_init_tp (void)
> all targets support __thread_pointer, so set __rseq_offset only
> if thre rseq registration may have happened because RSEQ_SIG is
> defined. */
> - extern int offset __asm__ ("__rseq_offset");
> + extern ptrdiff_t offset __asm__ ("__rseq_offset");
> offset = (char *) &pd->rseq_area - (char *) __thread_pointer ();
> #endif
> }
> diff --git a/sysdeps/unix/sysv/linux/aarch64/ld.abilist
> b/sysdeps/unix/sysv/linux/aarch64/ld.abilist
> index bf4d4f9b6f..5151c0781d 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/ld.abilist
> @@ -5,5 +5,5 @@ GLIBC_2.17 _dl_mcount F
> GLIBC_2.17 _r_debug D 0x28
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/alpha/ld.abilist
> b/sysdeps/unix/sysv/linux/alpha/ld.abilist
> index a23325a566..3e296c5473 100644
> --- a/sysdeps/unix/sysv/linux/alpha/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/ld.abilist
> @@ -4,6 +4,6 @@ GLIBC_2.1 _dl_mcount F
> GLIBC_2.3 __tls_get_addr F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
> GLIBC_2.35 __rseq_size D 0x4
> GLIBC_2.4 __stack_chk_guard D 0x8
> diff --git a/sysdeps/unix/sysv/linux/ia64/ld.abilist
> b/sysdeps/unix/sysv/linux/ia64/ld.abilist
> index 8ccb5be911..5471b24d59 100644
> --- a/sysdeps/unix/sysv/linux/ia64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/ld.abilist
> @@ -4,5 +4,5 @@ GLIBC_2.2 _r_debug D 0x28
> GLIBC_2.3 __tls_get_addr F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist
> b/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist
> index 37a47ebc0a..f26e594a13 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist
> @@ -4,6 +4,6 @@ GLIBC_2.2 _dl_mcount F
> GLIBC_2.3 __tls_get_addr F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
> GLIBC_2.35 __rseq_size D 0x4
> GLIBC_2.4 __stack_chk_guard D 0x8
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
> b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
> index da24dc7fb5..21f472e674 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
> @@ -6,5 +6,5 @@ GLIBC_2.3 _dl_mcount F
> GLIBC_2.3 _r_debug D 0x28
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
> b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
> index b9ae89ae8d..9c9c40450d 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
> @@ -6,5 +6,5 @@ GLIBC_2.22 __tls_get_addr_opt F
> GLIBC_2.23 __parse_hwcap_and_convert_at_platform F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist
> b/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist
> index 48431c91a9..a7758a0e52 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist
> @@ -5,5 +5,5 @@ GLIBC_2.27 _dl_mcount F
> GLIBC_2.27 _r_debug D 0x28
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist
> b/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist
> index 117d1430a4..78d071600b 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist
> @@ -4,5 +4,5 @@ GLIBC_2.2 _r_debug D 0x28
> GLIBC_2.3 __tls_get_offset F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist
> b/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist
> index 8ccb5be911..5471b24d59 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist
> @@ -4,5 +4,5 @@ GLIBC_2.2 _r_debug D 0x28
> GLIBC_2.3 __tls_get_addr F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/sys/rseq.h
> b/sysdeps/unix/sysv/linux/sys/rseq.h
> index db6c3cebf1..8533782cf4 100644
> --- a/sysdeps/unix/sysv/linux/sys/rseq.h
> +++ b/sysdeps/unix/sysv/linux/sys/rseq.h
> @@ -21,6 +21,7 @@
> /* Architecture-specific rseq signature. */
> #include <bits/rseq.h>
>
> +#include <stddef.h>
> #include <stdint.h>
> #include <sys/cdefs.h>
> #include <bits/endian.h>
> @@ -172,7 +173,7 @@ struct rseq
> #endif /* __GLIBC_HAVE_KERNEL_RSEQ */
>
> /* Offset from the thread pointer to the rseq area. */
> -extern const int __rseq_offset;
> +extern const ptrdiff_t __rseq_offset;
>
> /* Size of the registered rseq area. 0 if the registration was
> unsuccessful. */
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist
> b/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist
> index ae622bdf97..5a8bd322cd 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist
> @@ -4,5 +4,5 @@ GLIBC_2.2.5 _r_debug D 0x28
> GLIBC_2.3 __tls_get_addr F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
> GLIBC_2.35 __rseq_size D 0x4
On 2/2/22 10:02, Florian Weimer wrote:
> This matches the data size initial-exec relocations use on most
> targets.
On the 64-bit arches this doubles the size of the data type allowing it to
support a true pointer difference.
I reviewed the offset relocs as part of this review, since those offsets would
be used to generate the offset from the thread pointer in TLS IE mode for the
compiler generated code.
I went to binutils to verify these directly in the linker design:
R_AARCH64_* - Varies by -mtls-size up to 48-bits, and the compiler influences this.
- And the compiler comments indicate this *should* have been a max of 64-bits.
R_ALPHA_TPREL64 - 64-bits (binutils/bfd/elf64-alpha.c)
R_IA_64_TPREL64LSB - 32-bits (binutils/bfd/elfxx-ia64.c) *** Old design.
R_MIPS_TLS_TPREL64 - 64-bits (binutils/bfd/elfxx-mips.c)
R_PPC64_TPREL64 - 64-bits (binutils/bfd/elf64-ppc.c)
R_RISCV_TLS_TPREL64 - 64-bits (binutils/bfd/elfxx-riscv.c)
R_390_TLS_TPOFF - 64-bits (binutils/bfd/elf64-s390.c)
R_SPARC_TLSTPOFF64 - 64-bits (binutils/bfd/elfxx-sparc.c)
R_X86_64_TPOFF64 - 64-bits (binutils/bfd/elf64-x86-64.c)
And indeed it looks like these generally match the requirement to have ptrdiff_t
as the public ABI.
> Tested on armv7hl-linux-gnu, i686-linux-gnu, powerpc64le-linux-gnu,
> s390x-linux-gnu, x86_64-linux-gnu. Built with build many-glibcs.py.
This looks good to me. OK for glibc 2.35. Please push.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
> ---
> manual/threads.texi | 2 +-
> sysdeps/nptl/dl-tls_init_tp.c | 4 ++--
> sysdeps/unix/sysv/linux/aarch64/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/alpha/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/ia64/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist | 2 +-
> sysdeps/unix/sysv/linux/sys/rseq.h | 3 ++-
> sysdeps/unix/sysv/linux/x86_64/64/ld.abilist | 2 +-
> 13 files changed, 15 insertions(+), 14 deletions(-)
>
> diff --git a/manual/threads.texi b/manual/threads.texi
> index 4869f69d2c..48fd562923 100644
> --- a/manual/threads.texi
> +++ b/manual/threads.texi
> @@ -1004,7 +1004,7 @@ The manual for the @code{rseq} system call can be found
> at @uref{https://git.kernel.org/pub/scm/libs/librseq/librseq.git/tree/doc/man/rseq.2}.
> @end deftp
>
> -@deftypevar {int} __rseq_offset
> +@deftypevar {ptrdiff_t} __rseq_offset
OK.
> @standards{Linux, sys/rseq.h}
> This variable contains the offset between the thread pointer (as defined
> by @code{__builtin_thread_pointer} or the thread pointer register for
> diff --git a/sysdeps/nptl/dl-tls_init_tp.c b/sysdeps/nptl/dl-tls_init_tp.c
> index 531a065ed7..1294c91816 100644
> --- a/sysdeps/nptl/dl-tls_init_tp.c
> +++ b/sysdeps/nptl/dl-tls_init_tp.c
> @@ -46,7 +46,7 @@ rtld_mutex_dummy (pthread_mutex_t *lock)
>
> const unsigned int __rseq_flags;
> const unsigned int __rseq_size attribute_relro;
> -const int __rseq_offset attribute_relro;
> +const ptrdiff_t __rseq_offset attribute_relro;
OK.
>
> void
> __tls_pre_init_tp (void)
> @@ -119,7 +119,7 @@ __tls_init_tp (void)
> all targets support __thread_pointer, so set __rseq_offset only
> if thre rseq registration may have happened because RSEQ_SIG is
> defined. */
> - extern int offset __asm__ ("__rseq_offset");
> + extern ptrdiff_t offset __asm__ ("__rseq_offset");
OK.
> offset = (char *) &pd->rseq_area - (char *) __thread_pointer ();
> #endif
> }
> diff --git a/sysdeps/unix/sysv/linux/aarch64/ld.abilist b/sysdeps/unix/sysv/linux/aarch64/ld.abilist
> index bf4d4f9b6f..5151c0781d 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/ld.abilist
> @@ -5,5 +5,5 @@ GLIBC_2.17 _dl_mcount F
> GLIBC_2.17 _r_debug D 0x28
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
OK.
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/alpha/ld.abilist b/sysdeps/unix/sysv/linux/alpha/ld.abilist
> index a23325a566..3e296c5473 100644
> --- a/sysdeps/unix/sysv/linux/alpha/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/ld.abilist
> @@ -4,6 +4,6 @@ GLIBC_2.1 _dl_mcount F
> GLIBC_2.3 __tls_get_addr F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
OK.
> GLIBC_2.35 __rseq_size D 0x4
> GLIBC_2.4 __stack_chk_guard D 0x8
> diff --git a/sysdeps/unix/sysv/linux/ia64/ld.abilist b/sysdeps/unix/sysv/linux/ia64/ld.abilist
> index 8ccb5be911..5471b24d59 100644
> --- a/sysdeps/unix/sysv/linux/ia64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/ld.abilist
> @@ -4,5 +4,5 @@ GLIBC_2.2 _r_debug D 0x28
> GLIBC_2.3 __tls_get_addr F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
OK.
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist
> index 37a47ebc0a..f26e594a13 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/ld.abilist
> @@ -4,6 +4,6 @@ GLIBC_2.2 _dl_mcount F
> GLIBC_2.3 __tls_get_addr F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
OK.
> GLIBC_2.35 __rseq_size D 0x4
> GLIBC_2.4 __stack_chk_guard D 0x8
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
> index da24dc7fb5..21f472e674 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/ld.abilist
> @@ -6,5 +6,5 @@ GLIBC_2.3 _dl_mcount F
> GLIBC_2.3 _r_debug D 0x28
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
OK.
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
> index b9ae89ae8d..9c9c40450d 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/ld.abilist
> @@ -6,5 +6,5 @@ GLIBC_2.22 __tls_get_addr_opt F
> GLIBC_2.23 __parse_hwcap_and_convert_at_platform F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
OK.
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist
> index 48431c91a9..a7758a0e52 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/ld.abilist
> @@ -5,5 +5,5 @@ GLIBC_2.27 _dl_mcount F
> GLIBC_2.27 _r_debug D 0x28
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
OK.
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist
> index 117d1430a4..78d071600b 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/ld.abilist
> @@ -4,5 +4,5 @@ GLIBC_2.2 _r_debug D 0x28
> GLIBC_2.3 __tls_get_offset F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
OK.
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist
> index 8ccb5be911..5471b24d59 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/ld.abilist
> @@ -4,5 +4,5 @@ GLIBC_2.2 _r_debug D 0x28
> GLIBC_2.3 __tls_get_addr F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
OK.
> GLIBC_2.35 __rseq_size D 0x4
> diff --git a/sysdeps/unix/sysv/linux/sys/rseq.h b/sysdeps/unix/sysv/linux/sys/rseq.h
> index db6c3cebf1..8533782cf4 100644
> --- a/sysdeps/unix/sysv/linux/sys/rseq.h
> +++ b/sysdeps/unix/sysv/linux/sys/rseq.h
> @@ -21,6 +21,7 @@
> /* Architecture-specific rseq signature. */
> #include <bits/rseq.h>
>
> +#include <stddef.h>
OK.
> #include <stdint.h>
> #include <sys/cdefs.h>
> #include <bits/endian.h>
> @@ -172,7 +173,7 @@ struct rseq
> #endif /* __GLIBC_HAVE_KERNEL_RSEQ */
>
> /* Offset from the thread pointer to the rseq area. */
> -extern const int __rseq_offset;
> +extern const ptrdiff_t __rseq_offset;
OK.
>
> /* Size of the registered rseq area. 0 if the registration was
> unsuccessful. */
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist b/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist
> index ae622bdf97..5a8bd322cd 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/ld.abilist
> @@ -4,5 +4,5 @@ GLIBC_2.2.5 _r_debug D 0x28
> GLIBC_2.3 __tls_get_addr F
> GLIBC_2.34 __rtld_version_placeholder F
> GLIBC_2.35 __rseq_flags D 0x4
> -GLIBC_2.35 __rseq_offset D 0x4
> +GLIBC_2.35 __rseq_offset D 0x8
OK.
> GLIBC_2.35 __rseq_size D 0x4
>
@@ -1004,7 +1004,7 @@ The manual for the @code{rseq} system call can be found
at @uref{https://git.kernel.org/pub/scm/libs/librseq/librseq.git/tree/doc/man/rseq.2}.
@end deftp
-@deftypevar {int} __rseq_offset
+@deftypevar {ptrdiff_t} __rseq_offset
@standards{Linux, sys/rseq.h}
This variable contains the offset between the thread pointer (as defined
by @code{__builtin_thread_pointer} or the thread pointer register for
@@ -46,7 +46,7 @@ rtld_mutex_dummy (pthread_mutex_t *lock)
const unsigned int __rseq_flags;
const unsigned int __rseq_size attribute_relro;
-const int __rseq_offset attribute_relro;
+const ptrdiff_t __rseq_offset attribute_relro;
void
__tls_pre_init_tp (void)
@@ -119,7 +119,7 @@ __tls_init_tp (void)
all targets support __thread_pointer, so set __rseq_offset only
if thre rseq registration may have happened because RSEQ_SIG is
defined. */
- extern int offset __asm__ ("__rseq_offset");
+ extern ptrdiff_t offset __asm__ ("__rseq_offset");
offset = (char *) &pd->rseq_area - (char *) __thread_pointer ();
#endif
}
@@ -5,5 +5,5 @@ GLIBC_2.17 _dl_mcount F
GLIBC_2.17 _r_debug D 0x28
GLIBC_2.34 __rtld_version_placeholder F
GLIBC_2.35 __rseq_flags D 0x4
-GLIBC_2.35 __rseq_offset D 0x4
+GLIBC_2.35 __rseq_offset D 0x8
GLIBC_2.35 __rseq_size D 0x4
@@ -4,6 +4,6 @@ GLIBC_2.1 _dl_mcount F
GLIBC_2.3 __tls_get_addr F
GLIBC_2.34 __rtld_version_placeholder F
GLIBC_2.35 __rseq_flags D 0x4
-GLIBC_2.35 __rseq_offset D 0x4
+GLIBC_2.35 __rseq_offset D 0x8
GLIBC_2.35 __rseq_size D 0x4
GLIBC_2.4 __stack_chk_guard D 0x8
@@ -4,5 +4,5 @@ GLIBC_2.2 _r_debug D 0x28
GLIBC_2.3 __tls_get_addr F
GLIBC_2.34 __rtld_version_placeholder F
GLIBC_2.35 __rseq_flags D 0x4
-GLIBC_2.35 __rseq_offset D 0x4
+GLIBC_2.35 __rseq_offset D 0x8
GLIBC_2.35 __rseq_size D 0x4
@@ -4,6 +4,6 @@ GLIBC_2.2 _dl_mcount F
GLIBC_2.3 __tls_get_addr F
GLIBC_2.34 __rtld_version_placeholder F
GLIBC_2.35 __rseq_flags D 0x4
-GLIBC_2.35 __rseq_offset D 0x4
+GLIBC_2.35 __rseq_offset D 0x8
GLIBC_2.35 __rseq_size D 0x4
GLIBC_2.4 __stack_chk_guard D 0x8
@@ -6,5 +6,5 @@ GLIBC_2.3 _dl_mcount F
GLIBC_2.3 _r_debug D 0x28
GLIBC_2.34 __rtld_version_placeholder F
GLIBC_2.35 __rseq_flags D 0x4
-GLIBC_2.35 __rseq_offset D 0x4
+GLIBC_2.35 __rseq_offset D 0x8
GLIBC_2.35 __rseq_size D 0x4
@@ -6,5 +6,5 @@ GLIBC_2.22 __tls_get_addr_opt F
GLIBC_2.23 __parse_hwcap_and_convert_at_platform F
GLIBC_2.34 __rtld_version_placeholder F
GLIBC_2.35 __rseq_flags D 0x4
-GLIBC_2.35 __rseq_offset D 0x4
+GLIBC_2.35 __rseq_offset D 0x8
GLIBC_2.35 __rseq_size D 0x4
@@ -5,5 +5,5 @@ GLIBC_2.27 _dl_mcount F
GLIBC_2.27 _r_debug D 0x28
GLIBC_2.34 __rtld_version_placeholder F
GLIBC_2.35 __rseq_flags D 0x4
-GLIBC_2.35 __rseq_offset D 0x4
+GLIBC_2.35 __rseq_offset D 0x8
GLIBC_2.35 __rseq_size D 0x4
@@ -4,5 +4,5 @@ GLIBC_2.2 _r_debug D 0x28
GLIBC_2.3 __tls_get_offset F
GLIBC_2.34 __rtld_version_placeholder F
GLIBC_2.35 __rseq_flags D 0x4
-GLIBC_2.35 __rseq_offset D 0x4
+GLIBC_2.35 __rseq_offset D 0x8
GLIBC_2.35 __rseq_size D 0x4
@@ -4,5 +4,5 @@ GLIBC_2.2 _r_debug D 0x28
GLIBC_2.3 __tls_get_addr F
GLIBC_2.34 __rtld_version_placeholder F
GLIBC_2.35 __rseq_flags D 0x4
-GLIBC_2.35 __rseq_offset D 0x4
+GLIBC_2.35 __rseq_offset D 0x8
GLIBC_2.35 __rseq_size D 0x4
@@ -21,6 +21,7 @@
/* Architecture-specific rseq signature. */
#include <bits/rseq.h>
+#include <stddef.h>
#include <stdint.h>
#include <sys/cdefs.h>
#include <bits/endian.h>
@@ -172,7 +173,7 @@ struct rseq
#endif /* __GLIBC_HAVE_KERNEL_RSEQ */
/* Offset from the thread pointer to the rseq area. */
-extern const int __rseq_offset;
+extern const ptrdiff_t __rseq_offset;
/* Size of the registered rseq area. 0 if the registration was
unsuccessful. */
@@ -4,5 +4,5 @@ GLIBC_2.2.5 _r_debug D 0x28
GLIBC_2.3 __tls_get_addr F
GLIBC_2.34 __rtld_version_placeholder F
GLIBC_2.35 __rseq_flags D 0x4
-GLIBC_2.35 __rseq_offset D 0x4
+GLIBC_2.35 __rseq_offset D 0x8
GLIBC_2.35 __rseq_size D 0x4