Message ID | 20230319151017.531737-6-bugaevc@gmail.com |
---|---|
State | New |
Headers | show |
Series | The rest of the x86_64-gnu port | expand |
Applied, thanks! Sergey Bugaev, le dim. 19 mars 2023 18:09:48 +0300, a ecrit: > 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> > --- > hurd/Versions | 5 ----- > hurd/hurd/threadvar.h | 15 --------------- > sysdeps/mach/hurd/Versions | 3 --- > sysdeps/mach/hurd/_Fork.c | 20 ++------------------ > sysdeps/mach/hurd/i386/libc.abilist | 2 -- > sysdeps/mach/hurd/x86/init-first.c | 3 --- > 6 files changed, 2 insertions(+), 46 deletions(-) > > diff --git a/hurd/Versions b/hurd/Versions > index 7e4f1c56..3d8b412d 100644 > --- a/hurd/Versions > +++ b/hurd/Versions > @@ -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 { > diff --git a/hurd/hurd/threadvar.h b/hurd/hurd/threadvar.h > index 2a94f4de..f5c6a278 100644 > --- a/hurd/hurd/threadvar.h > +++ b/hurd/hurd/threadvar.h > @@ -22,21 +22,6 @@ > #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. */ > diff --git a/sysdeps/mach/hurd/Versions b/sysdeps/mach/hurd/Versions > index d75e674b..bf2e870a 100644 > --- a/sysdeps/mach/hurd/Versions > +++ b/sysdeps/mach/hurd/Versions > @@ -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; > diff --git a/sysdeps/mach/hurd/_Fork.c b/sysdeps/mach/hurd/_Fork.c > index 4984cecd..77cd2917 100644 > --- a/sysdeps/mach/hurd/_Fork.c > +++ b/sysdeps/mach/hurd/_Fork.c > @@ -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); > diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist > index ed0c4789..da1cad67 100644 > --- a/sysdeps/mach/hurd/i386/libc.abilist > +++ b/sysdeps/mach/hurd/i386/libc.abilist > @@ -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 > diff --git a/sysdeps/mach/hurd/x86/init-first.c b/sysdeps/mach/hurd/x86/init-first.c > index 75a5c842..6ca27155 100644 > --- a/sysdeps/mach/hurd/x86/init-first.c > +++ b/sysdeps/mach/hurd/x86/init-first.c > @@ -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; > -- > 2.39.2 >
diff --git a/hurd/Versions b/hurd/Versions index 7e4f1c56..3d8b412d 100644 --- a/hurd/Versions +++ b/hurd/Versions @@ -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 { diff --git a/hurd/hurd/threadvar.h b/hurd/hurd/threadvar.h index 2a94f4de..f5c6a278 100644 --- a/hurd/hurd/threadvar.h +++ b/hurd/hurd/threadvar.h @@ -22,21 +22,6 @@ #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. */ diff --git a/sysdeps/mach/hurd/Versions b/sysdeps/mach/hurd/Versions index d75e674b..bf2e870a 100644 --- a/sysdeps/mach/hurd/Versions +++ b/sysdeps/mach/hurd/Versions @@ -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; diff --git a/sysdeps/mach/hurd/_Fork.c b/sysdeps/mach/hurd/_Fork.c index 4984cecd..77cd2917 100644 --- a/sysdeps/mach/hurd/_Fork.c +++ b/sysdeps/mach/hurd/_Fork.c @@ -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); diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist index ed0c4789..da1cad67 100644 --- a/sysdeps/mach/hurd/i386/libc.abilist +++ b/sysdeps/mach/hurd/i386/libc.abilist @@ -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 diff --git a/sysdeps/mach/hurd/x86/init-first.c b/sysdeps/mach/hurd/x86/init-first.c index 75a5c842..6ca27155 100644 --- a/sysdeps/mach/hurd/x86/init-first.c +++ b/sysdeps/mach/hurd/x86/init-first.c @@ -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;
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> --- hurd/Versions | 5 ----- hurd/hurd/threadvar.h | 15 --------------- sysdeps/mach/hurd/Versions | 3 --- sysdeps/mach/hurd/_Fork.c | 20 ++------------------ sysdeps/mach/hurd/i386/libc.abilist | 2 -- sysdeps/mach/hurd/x86/init-first.c | 3 --- 6 files changed, 2 insertions(+), 46 deletions(-)