summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extra/Configs/Config.in3
-rw-r--r--libpthread/nptl/forward.c3
-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
7 files changed, 19 insertions, 26 deletions
diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in
index 22d67bc42..be2035e45 100644
--- a/extra/Configs/Config.in
+++ b/extra/Configs/Config.in
@@ -435,6 +435,7 @@ config LINUXTHREADS_NEW
config UCLIBC_HAS_THREADS_NATIVE
bool "Native POSIX Threading (NPTL)"
select UCLIBC_HAS_TLS
+ select UCLIBC_HAS_STDIO_FUTEXES
help
If you want to compile uClibc with NPTL support, then answer Y.
@@ -1748,8 +1749,8 @@ config UCLIBC_HAS_GNU_GETOPT
config UCLIBC_HAS_STDIO_FUTEXES
bool "Use futexes for multithreaded I/O locking"
- default n
depends on UCLIBC_HAS_THREADS_NATIVE
+ default n
help
If you want to compile uClibc to use futexes for low-level
I/O locking, answer Y. Otherwise, answer N.
diff --git a/libpthread/nptl/forward.c b/libpthread/nptl/forward.c
index 4c5ada349..8f528d0a8 100644
--- a/libpthread/nptl/forward.c
+++ b/libpthread/nptl/forward.c
@@ -144,8 +144,7 @@ FORWARD (pthread_setcanceltype, (int type, int *oldtype), (type, oldtype), 0)
#define return /* value is void */
FORWARD2(__pthread_unwind,
- void attribute_hidden __attribute ((noreturn)) __cleanup_fct_attribute
- attribute_compat_text_section,
+ void attribute_hidden __attribute ((noreturn)) __cleanup_fct_attribute,
(__pthread_unwind_buf_t *buf), (buf), {
/* We cannot call abort() here. */
INTERNAL_SYSCALL_DECL (err);
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