summaryrefslogtreecommitdiff
path: root/libpthread/nptl/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'libpthread/nptl/sysdeps')
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c31
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/register-atfork.c5
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.c1
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h1
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c1
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