This was used for the value of libc-lock's owner when TLS is not yet set
up, so THREAD_SELF can not be used. Since the value need not be anything
specific -- it just has to be non-NULL -- we can just use a plain
constant, such as (void *) 1, for this. This avoids accessing the symbol
through GOT, and exporting it from libc.so in the first place.
Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
Message-Id: <
20230319151017.531737-12-bugaevc@gmail.com>
__open_nocancel;
__read_nocancel; __pread64_nocancel;
__write_nocancel;
- __libc_lock_self0; __getcwd;
+ __getcwd;
__stat64;
_dl_init_first;
__open_nocancel;
__read_nocancel; __pread64_nocancel;
__write_nocancel;
- __libc_lock_self0; __getcwd;
+ __getcwd;
__stat64; __fstat64;
}
}
#include <stdlib.h>
#include <pthreadP.h>
-/* This serves as stub "self" pointer for libc locks when TLS is not initialized
- yet. */
-char __libc_lock_self0[0];
-
/* Placeholder for key creation routine from Hurd cthreads library. */
int
weak_function
typedef __libc_lock_recursive_t __rtld_lock_recursive_t;
-extern char __libc_lock_self0[0];
#define __libc_lock_owner_self() \
- (__LIBC_NO_TLS () ? (void *)&__libc_lock_self0 : THREAD_SELF)
+ (__LIBC_NO_TLS () ? (void *) 1 : THREAD_SELF)
#else
typedef struct __libc_lock_opaque__ __libc_lock_t;