aboutsummaryrefslogtreecommitdiffstats
path: root/toolchain/uClibc/patches-0.9.29/200-libpthread_fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'toolchain/uClibc/patches-0.9.29/200-libpthread_fix.patch')
-rw-r--r--toolchain/uClibc/patches-0.9.29/200-libpthread_fix.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/toolchain/uClibc/patches-0.9.29/200-libpthread_fix.patch b/toolchain/uClibc/patches-0.9.29/200-libpthread_fix.patch
new file mode 100644
index 0000000000..148f608cd0
--- /dev/null
+++ b/toolchain/uClibc/patches-0.9.29/200-libpthread_fix.patch
@@ -0,0 +1,56 @@
+--- a/libpthread/linuxthreads/libc-cancellation.c
++++ b/libpthread/linuxthreads/libc-cancellation.c
+@@ -31,9 +31,6 @@
+ weak_extern (__pthread_do_exit)
+ # endif
+
+-int __libc_multiple_threads attribute_hidden __attribute__((nocommon));
+-strong_alias (__libc_multiple_threads, __librt_multiple_threads)
+-
+ /* The next two functions are similar to pthread_setcanceltype() but
+ more specialized for the use in the cancelable functions like write().
+ They do not need to check parameters etc. */
+--- a/libpthread/linuxthreads/libc_pthread_init.c
++++ b/libpthread/linuxthreads/libc_pthread_init.c
+@@ -33,6 +33,9 @@ libc_hidden_proto(memcpy)
+ libc_hidden_proto(uselocale)
+ #endif
+
++int __libc_multiple_threads attribute_hidden __attribute__((nocommon));
++strong_alias (__libc_multiple_threads, __librt_multiple_threads)
++
+ int *
+ __libc_pthread_init (functions)
+ const struct pthread_functions *functions;
+--- a/libpthread/linuxthreads/Makefile.in
++++ b/libpthread/linuxthreads/Makefile.in
+@@ -77,7 +77,7 @@ libpthread-a-y += $(libpthread_OBJ:.o=.
+ else
+ libpthread-a-y += $(libpthread_OBJ) $(libpthread-static-y)
+ endif
+-libpthread-so-y += $(libpthread_OBJ:.o=.os)
++libpthread-so-y += $(libpthread_OBJ:.o=.oS)
+
+ lib-a-$(UCLIBC_HAS_THREADS) += $(top_builddir)lib/libpthread.a
+ lib-so-$(UCLIBC_HAS_THREADS) += $(top_builddir)lib/libpthread.so
+--- a/libpthread/linuxthreads/pthread.c
++++ b/libpthread/linuxthreads/pthread.c
+@@ -32,6 +32,8 @@
+ #include "smp.h"
+ #include <not-cancel.h>
+
++#define HAVE_Z_NODELETE
++
+ /* Sanity check. */
+ #if !defined __SIGRTMIN || (__SIGRTMAX - __SIGRTMIN) < 3
+ # error "This must not happen"
+@@ -976,7 +978,9 @@ static void pthread_onexit_process(int r
+ request.req_args.exit.code = retcode;
+ TEMP_FAILURE_RETRY(write_not_cancel(__pthread_manager_request,
+ (char *) &request, sizeof(request)));
++#ifdef notyet
+ suspend(self);
++#endif
+ /* Main thread should accumulate times for thread manager and its
+ children, so that timings for main thread account for all threads. */
+ if (self == __pthread_main_thread)