mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-06 20:58:33 +01:00
hurd: Remove __hurd_threadvar_stack_{offset,mask}
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>
This commit is contained in:
parent
d8ee5d614b
commit
71232da3b3
6 changed files with 2 additions and 46 deletions
|
@ -1,8 +1,5 @@
|
||||||
libc {
|
libc {
|
||||||
GLIBC_2.0 {
|
GLIBC_2.0 {
|
||||||
# variables used in macros & inline functions
|
|
||||||
__hurd_threadvar_stack_mask; __hurd_threadvar_stack_offset;
|
|
||||||
|
|
||||||
# functions used in libmachuser and libhurduser
|
# functions used in libmachuser and libhurduser
|
||||||
_S_catch_exception_raise;
|
_S_catch_exception_raise;
|
||||||
_S_catch_exception_raise_state;
|
_S_catch_exception_raise_state;
|
||||||
|
@ -129,8 +126,6 @@ libc {
|
||||||
_hurd_fd_error_signal; _hurd_fd_error;
|
_hurd_fd_error_signal; _hurd_fd_error;
|
||||||
__hurd_dfail; __hurd_sockfail;
|
__hurd_dfail; __hurd_sockfail;
|
||||||
_hurd_port_locked_set;
|
_hurd_port_locked_set;
|
||||||
__hurd_threadvar_location_from_sp;
|
|
||||||
__hurd_threadvar_location;
|
|
||||||
_hurd_userlink_link; _hurd_userlink_unlink; _hurd_userlink_clear;
|
_hurd_userlink_link; _hurd_userlink_unlink; _hurd_userlink_clear;
|
||||||
}
|
}
|
||||||
GLIBC_2.29 {
|
GLIBC_2.29 {
|
||||||
|
|
|
@ -22,21 +22,6 @@
|
||||||
#include <features.h>
|
#include <features.h>
|
||||||
#include <tls.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
|
/* The variables __hurd_sigthread_stack_base and
|
||||||
__hurd_sigthread_stack_end define the bounds of the stack used by the
|
__hurd_sigthread_stack_end define the bounds of the stack used by the
|
||||||
signal thread, so that thread can always be specifically identified. */
|
signal thread, so that thread can always be specifically identified. */
|
||||||
|
|
|
@ -33,9 +33,6 @@ libc {
|
||||||
|
|
||||||
ld {
|
ld {
|
||||||
GLIBC_2.0 {
|
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
|
# functions that must be shared with libc
|
||||||
__close; __getpid;
|
__close; __getpid;
|
||||||
__mmap; __open; __read; __sbrk; __strtoul_internal;
|
__mmap; __open; __read; __sbrk; __strtoul_internal;
|
||||||
|
|
|
@ -482,24 +482,8 @@ retry:
|
||||||
(natural_t *) &state, &statecount))
|
(natural_t *) &state, &statecount))
|
||||||
LOSE;
|
LOSE;
|
||||||
#ifdef STACK_GROWTH_UP
|
#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
|
#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
|
#endif
|
||||||
MACHINE_THREAD_STATE_SET_PC (&state,
|
MACHINE_THREAD_STATE_SET_PC (&state,
|
||||||
|
|
|
@ -279,8 +279,6 @@ GLIBC_2.2.6 __gettimeofday F
|
||||||
GLIBC_2.2.6 __gmtime_r F
|
GLIBC_2.2.6 __gmtime_r F
|
||||||
GLIBC_2.2.6 __h_errno_location F
|
GLIBC_2.2.6 __h_errno_location F
|
||||||
GLIBC_2.2.6 __hurd_fail 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 __isalnum_l F
|
||||||
GLIBC_2.2.6 __isalpha_l F
|
GLIBC_2.2.6 __isalpha_l F
|
||||||
GLIBC_2.2.6 __isascii_l F
|
GLIBC_2.2.6 __isascii_l F
|
||||||
|
|
|
@ -34,9 +34,6 @@
|
||||||
extern void __mach_init (void);
|
extern void __mach_init (void);
|
||||||
extern void __init_misc (int, char **, char **);
|
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 int __libc_argc attribute_hidden;
|
||||||
extern char **__libc_argv attribute_hidden;
|
extern char **__libc_argv attribute_hidden;
|
||||||
extern char **_dl_argv;
|
extern char **_dl_argv;
|
||||||
|
|
Loading…
Add table
Reference in a new issue