diff options
Diffstat (limited to 'libpthread/nptl/sysdeps')
5 files changed, 16 insertions, 23 deletions
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c b/libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c index 016437768..136b44595 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c @@ -48,28 +48,12 @@ __libc_pthread_init ( __register_atfork (NULL, NULL, reclaim, NULL); #ifdef SHARED - /* Copy the function pointers into an array in libc. This enables - access with just one memory reference but moreso, it prevents - hijacking the function pointers with just one pointer change. We - "encrypt" the function pointers since we cannot write-protect the - array easily enough. */ - union ptrhack - { - struct pthread_functions pf; -# define NPTRS (sizeof (struct pthread_functions) / sizeof (void *)) - void *parr[NPTRS]; - } __attribute__ ((may_alias)) const *src; - union ptrhack *dest; - - src = (const void *) functions; - dest = (void *) &__libc_pthread_functions; - - for (size_t cnt = 0; cnt < NPTRS; ++cnt) - { - void *p = src->parr[cnt]; - PTR_MANGLE (p); - dest->parr[cnt] = p; - } + /* We copy the content of the variable pointed to by the FUNCTIONS + parameter to one in libc.so since this means access to the array + can be done with one memory access instead of two. + */ + memcpy (&__libc_pthread_functions, functions, + sizeof (__libc_pthread_functions)); __libc_pthread_functions_init = 1; #endif @@ -79,9 +63,12 @@ __libc_pthread_init ( } #ifdef SHARED +#if 0 +void libc_freeres_fn (freeres_libptread) { if (__libc_pthread_functions_init) PTHFCT_CALL (ptr_freeres, ()); } #endif +#endif diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/register-atfork.c b/libpthread/nptl/sysdeps/unix/sysv/linux/register-atfork.c index 9e36858fc..f956ad565 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/register-atfork.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/register-atfork.c @@ -22,6 +22,7 @@ #include <string.h> #include <fork.h> #include <atomic.h> +#include <tls.h> /* Lock to protect allocation and deallocation of fork handlers. */ @@ -119,7 +120,7 @@ __linkin_atfork (struct fork_handler *newp) newp, newp->next) != 0); } - +#if 0 libc_freeres_fn (free_mem) { /* Get the lock to not conflict with running forks. */ @@ -144,3 +145,5 @@ libc_freeres_fn (free_mem) free (oldp); } } +#endif + diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.c index 80b0e7663..0471d1f79 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.c @@ -22,6 +22,7 @@ #include <sysdep.h> #include <lowlevellock.h> #include <sys/time.h> +#include <tls.h> void diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h index a43f6b668..d8fe9be35 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h @@ -25,6 +25,7 @@ #include <sys/param.h> #include <bits/pthreadtypes.h> #include <atomic.h> +#include <sysdep.h> #include <bits/kernel-features.h> diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c b/libpthread/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c index 94c78fce5..7eb095fd3 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c @@ -21,6 +21,7 @@ #include <stdlib.h> #include <fork.h> #include <atomic.h> +#include <tls.h> void |