[RFC,05/34] hurd: Remove __hurd_threadvar_stack_{offset, mask}
Checks
Commit Message
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(-)
Comments
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
>
@@ -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 {
@@ -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. */
@@ -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;
@@ -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);
@@ -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
@@ -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;