Message ID | 87iltxxqeh.fsf@oldenburg.str.redhat.com |
---|---|
State | New |
Headers | show |
Series | Linux: Use ptrdiff_t for __rseq_offset | expand |
----- 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 >
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