mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
* elf/tst-tlsmod4.c (in_dso): Insert a random library call before use
of the TLS macros, otherwise the compiler might not have initialized the PIC register yet when we use the PLT via asm. * elf/tst-tlsmod3.c (in_dso2): Likewise. * elf/tst-tlsmod2.c (in_dso): Likewise.
This commit is contained in:
parent
7a8bdff02c
commit
e6f526809d
@ -1,5 +1,11 @@
|
||||
2002-08-11 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* elf/tst-tlsmod4.c (in_dso): Insert a random library call before use
|
||||
of the TLS macros, otherwise the compiler might not have initialized
|
||||
the PIC register yet when we use the PLT via asm.
|
||||
* elf/tst-tlsmod3.c (in_dso2): Likewise.
|
||||
* elf/tst-tlsmod2.c (in_dso): Likewise.
|
||||
|
||||
* sunrpc/svc_authux.c (_svcauth_unix): Remove spurious printf (ugh!).
|
||||
|
||||
* sysdeps/i386/bits/byteswap.h (__bswap_16, __bswap_32, __bswap_64):
|
||||
|
@ -12,9 +12,13 @@ COMMON_INT_DEF(foo);
|
||||
int
|
||||
in_dso (int n, int *caller_foop)
|
||||
{
|
||||
int *foop = TLS_GD (foo);
|
||||
int *foop;
|
||||
int result = 0;
|
||||
|
||||
puts ("foo"); /* Make sure PLT is used before macros. */
|
||||
|
||||
foop = TLS_GD (foo);
|
||||
|
||||
if (caller_foop != NULL && foop != caller_foop)
|
||||
{
|
||||
printf ("callers address of foo differs: %p vs %p\n", caller_foop, foop);
|
||||
|
@ -15,10 +15,15 @@ COMMON_INT_DEF(comm_n);
|
||||
int
|
||||
in_dso2 (void)
|
||||
{
|
||||
int *foop = TLS_GD (foo);
|
||||
int *foop;
|
||||
int result = 0;
|
||||
static int n;
|
||||
int *np = TLS_GD (comm_n);
|
||||
int *np;
|
||||
|
||||
puts ("foo"); /* Make sure PLT is used before macros. */
|
||||
|
||||
foop = TLS_GD (foo);
|
||||
np = TLS_GD (comm_n);
|
||||
|
||||
if (n != *np)
|
||||
{
|
||||
|
@ -12,9 +12,13 @@ COMMON_INT_DEF(baz);
|
||||
int
|
||||
in_dso (int n, int *caller_bazp)
|
||||
{
|
||||
int *bazp = TLS_GD (baz);
|
||||
int *bazp;
|
||||
int result = 0;
|
||||
|
||||
puts ("foo"); /* Make sure PLT is used before macros. */
|
||||
|
||||
bazp = TLS_GD (baz);
|
||||
|
||||
if (caller_bazp != NULL && bazp != caller_bazp)
|
||||
{
|
||||
printf ("callers address of baz differs: %p vs %p\n", caller_bazp, bazp);
|
||||
|
@ -1,3 +1,13 @@
|
||||
2002-08-11 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* pthread.c (__pthread_initialize_manager): Initialize
|
||||
p_header.data.tcb field of manager thread's descriptor.
|
||||
(__pthread_initialize_minimal): Don't initialize p_header.data.self
|
||||
field, already done by TLS_INIT_TP.
|
||||
|
||||
* manager.c (pthread_handle_create): Move p_header field initializers
|
||||
together.
|
||||
|
||||
2002-08-08 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* sysdeps/i386/tls.h (TLS_DO_SET_THREAD_AREA): Removed.
|
||||
|
@ -644,6 +644,7 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr,
|
||||
/* Initialize the thread descriptor. Elements which have to be
|
||||
initialized to zero already have this value. */
|
||||
new_thread->p_header.data.tcb = new_thread;
|
||||
new_thread->p_header.data.self = new_thread;
|
||||
new_thread->p_tid = new_thread_id;
|
||||
new_thread->p_lock = &(__pthread_handles[sseg].h_lock);
|
||||
new_thread->p_cancelstate = PTHREAD_CANCEL_ENABLE;
|
||||
@ -655,7 +656,6 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr,
|
||||
#endif
|
||||
new_thread->p_guardaddr = guardaddr;
|
||||
new_thread->p_guardsize = guardsize;
|
||||
new_thread->p_header.data.self = new_thread;
|
||||
new_thread->p_nr = sseg;
|
||||
new_thread->p_inheritsched = attr ? attr->__inheritsched : 0;
|
||||
/* Initialize the thread handle */
|
||||
|
@ -429,7 +429,6 @@ __pthread_initialize_minimal(void)
|
||||
part of the TLS allocation. We have to initialize the data
|
||||
structure by hand. This initialization must mirror the struct
|
||||
definition above. */
|
||||
self->p_header.data.self = self;
|
||||
self->p_nextlive = self->p_prevlive = self;
|
||||
self->p_tid = PTHREAD_THREADS_MAX;
|
||||
self->p_lock = &__pthread_handles[0].h_lock;
|
||||
@ -633,6 +632,7 @@ int __pthread_initialize_manager(void)
|
||||
}
|
||||
|
||||
/* Initialize the descriptor. */
|
||||
tcb->p_header.data.tcb = tcb;
|
||||
tcb->p_header.data.self = tcb;
|
||||
tcb->p_lock = &__pthread_handles[1].h_lock;
|
||||
# ifndef HAVE___THREAD
|
||||
|
Loading…
Reference in New Issue
Block a user