]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
hurd: Remove __hurd_threadvar_stack_{offset,mask}
authorSergey Bugaev <bugaevc@gmail.com>
Sun, 19 Mar 2023 15:09:48 +0000 (18:09 +0300)
committerSamuel Thibault <samuel.thibault@ens-lyon.org>
Sun, 2 Apr 2023 22:53:25 +0000 (00:53 +0200)
Noone is or should be using __hurd_threadvar_stack_{offset,mask}, we
have proper TLS now. These two remaining variables are never set to
anything other than zero, so any code that would try to use them as
described would just dereference a zero pointer and crash. So remove
them entirely.

Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
Message-Id: <20230319151017.531737-6-bugaevc@gmail.com>

hurd/Versions
hurd/hurd/threadvar.h
sysdeps/mach/hurd/Versions
sysdeps/mach/hurd/_Fork.c
sysdeps/mach/hurd/i386/libc.abilist
sysdeps/mach/hurd/x86/init-first.c

index 7e4f1c5630ad94082794c7e3b11a1d22bc5e40cc..3d8b412d49c4c5485ce001e136d99eee1a8c550d 100644 (file)
@@ -1,8 +1,5 @@
 libc {
   GLIBC_2.0 {
-    # variables used in macros & inline functions
-    __hurd_threadvar_stack_mask; __hurd_threadvar_stack_offset;
-
     # functions used in libmachuser and libhurduser
     _S_catch_exception_raise;
     _S_catch_exception_raise_state;
@@ -129,8 +126,6 @@ libc {
     _hurd_fd_error_signal; _hurd_fd_error;
     __hurd_dfail; __hurd_sockfail;
     _hurd_port_locked_set;
-    __hurd_threadvar_location_from_sp;
-    __hurd_threadvar_location;
     _hurd_userlink_link; _hurd_userlink_unlink; _hurd_userlink_clear;
   }
   GLIBC_2.29 {
index 2a94f4de5bb7dc81988b3e1e8af4b6dd720947f1..f5c6a278a6598295c4062827234feeb87ff175ca 100644 (file)
 #include <features.h>
 #include <tls.h>
 
-/* The per-thread variables are found by ANDing this mask
-   with the value of the stack pointer and then adding this offset.
-
-   In the multi-threaded case, cthreads initialization sets
-   __hurd_threadvar_stack_mask to ~(cthread_stack_size - 1), a mask which
-   finds the base of the fixed-size cthreads stack; and
-   __hurd_threadvar_stack_offset to a small offset that skips the data
-   cthreads itself maintains at the base of each thread's stack.
-
-   In the single-threaded or libpthread case, __hurd_threadvar_stack_mask is
-   zero, so the stack pointer is ignored. */
-
-extern unsigned long int __hurd_threadvar_stack_mask;
-extern unsigned long int __hurd_threadvar_stack_offset;
-
 /* The variables __hurd_sigthread_stack_base and
    __hurd_sigthread_stack_end define the bounds of the stack used by the
    signal thread, so that thread can always be specifically identified.  */
index d75e674bb6768a270c80571e0c8ac4aabf894749..bf2e870a2a8303ad33bf191ab2eae9fe14512c78 100644 (file)
@@ -33,9 +33,6 @@ libc {
 
 ld {
   GLIBC_2.0 {
-    # variables that must be shared with libc
-    __hurd_threadvar_stack_mask;  __hurd_threadvar_stack_offset;
-
     # functions that must be shared with libc
     __close; __getpid;
     __mmap; __open; __read; __sbrk; __strtoul_internal;
index 4984cecd0b0a8eb2650b7d2c7745b11258428e4c..77cd29171e3ffa84090027360d4f04fd81b5cb88 100644 (file)
@@ -482,25 +482,9 @@ retry:
                                    (natural_t *) &state, &statecount))
        LOSE;
 #ifdef STACK_GROWTH_UP
-      if (__hurd_sigthread_stack_base == 0)
-       {
-         state.SP &= __hurd_threadvar_stack_mask;
-         state.SP += __hurd_threadvar_stack_offset;
-       }
-      else
-       state.SP = __hurd_sigthread_stack_base;
+      state.SP = __hurd_sigthread_stack_base;
 #else
-      if (__hurd_sigthread_stack_end == 0)
-       {
-         /* The signal thread has a stack assigned by pthread.
-            The threadvar_stack variables conveniently tell us how
-            to get to the highest address in the stack, just below
-            the per-thread variables.  */
-         state.SP &= __hurd_threadvar_stack_mask;
-         state.SP += __hurd_threadvar_stack_offset;
-       }
-      else
-       state.SP = __hurd_sigthread_stack_end;
+      state.SP = __hurd_sigthread_stack_end;
 #endif
       MACHINE_THREAD_STATE_SET_PC (&state,
                                   (unsigned long int) _hurd_msgport_receive);
index ed0c4789eb1ed42f9e9320b7894dbe4b3250ee28..da1cad6777253b9285480a777858bf8ce3160fe2 100644 (file)
@@ -279,8 +279,6 @@ GLIBC_2.2.6 __gettimeofday F
 GLIBC_2.2.6 __gmtime_r F
 GLIBC_2.2.6 __h_errno_location F
 GLIBC_2.2.6 __hurd_fail F
-GLIBC_2.2.6 __hurd_threadvar_stack_mask D 0x4
-GLIBC_2.2.6 __hurd_threadvar_stack_offset D 0x4
 GLIBC_2.2.6 __isalnum_l F
 GLIBC_2.2.6 __isalpha_l F
 GLIBC_2.2.6 __isascii_l F
index 75a5c842a96f094a947232a719738c897954cac5..6ca27155a4f415a2dfb86bfb4a1ca372768e678d 100644 (file)
@@ -34,9 +34,6 @@
 extern void __mach_init (void);
 extern void __init_misc (int, char **, char **);
 
-unsigned long int __hurd_threadvar_stack_offset;
-unsigned long int __hurd_threadvar_stack_mask;
-
 extern int __libc_argc attribute_hidden;
 extern char **__libc_argv attribute_hidden;
 extern char **_dl_argv;