summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--toolchain/uClibc/Makefile.inc4
-rw-r--r--toolchain/uClibc/patches/uClibc-0.9.32-use-arch-pt-initfini_c.patch39
-rw-r--r--toolchain/uClibc/patches/uClibc-sigaction.patch155
-rw-r--r--toolchain/uClibc/patches/uClibc-sigaction2.patch247
-rw-r--r--toolchain/uClibc/patches/uClibc-weak-sigprocmask.patch21
5 files changed, 425 insertions, 41 deletions
diff --git a/toolchain/uClibc/Makefile.inc b/toolchain/uClibc/Makefile.inc
index 975cc71e9..73a89f91f 100644
--- a/toolchain/uClibc/Makefile.inc
+++ b/toolchain/uClibc/Makefile.inc
@@ -2,8 +2,8 @@
# material, please see the LICENCE file in the top-level directory.
PKG_NAME:= uClibc
-PKG_VERSION:= 0.9.32
+PKG_VERSION:= 0.9.32.1
PKG_RELEASE:= 1
-PKG_MD5SUM:= cfcb6c25d8ebe12817499d8749ee8ae1
+PKG_MD5SUM:= ade6e441242be5cdd735fec97954a54a
PKG_SITES:= http://uclibc.org/downloads/
DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.bz2
diff --git a/toolchain/uClibc/patches/uClibc-0.9.32-use-arch-pt-initfini_c.patch b/toolchain/uClibc/patches/uClibc-0.9.32-use-arch-pt-initfini_c.patch
deleted file mode 100644
index 3eb5b15c2..000000000
--- a/toolchain/uClibc/patches/uClibc-0.9.32-use-arch-pt-initfini_c.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-SH provides a pt-initfini.c, so use that instead of
-libpthread/nptl/sysdeps/pthread/pt-initfini.c
-
-This prevents:
- libpthread/nptl/sysdeps/pthread/crti.S: Assembler messages:
- libpthread/nptl/sysdeps/pthread/crti.S:25: Error: pcrel too far
- libpthread/nptl/sysdeps/pthread/crti.S:26: Error: pcrel too far
- libpthread/nptl/sysdeps/pthread/crti.S:28: Error: pcrel too far
- libpthread/nptl/sysdeps/pthread/crti.S:53: Error: pcrel too far
- libpthread/nptl/sysdeps/pthread/crti.S:56: Error: pcrel too far
- make[1]: *** [libpthread/nptl/sysdeps/pthread/crti.o] Error 1
-
-There is probably a better way to handle this... but since 9381d622e2411a35a5fd7
-I do not want to even try.
-
---- uClibc-0.9.32/libpthread/nptl/sysdeps/pthread/Makefile.in 2011-06-11 00:58:59.539341382 -0400
-+++ uClibc-0.9.32/libpthread/nptl/sysdeps/pthread/Makefile.in 2011-06-11 00:57:52.848172407 -0400
-@@ -76,12 +76,21 @@
- ASFLAGS-crti.S = -g0
- ASFLAGS-crtn.S = -g0
-
-+ifneq ($(wildcard $(top_srcdir)libpthread/nptl/sysdeps/unix/sysv/linux/$(TARGET_ARCH)/pt-initfini.c),)
-+$(libpthread_pthread_OUT)/pt-initfini.s: $(top_srcdir)libpthread/nptl/sysdeps/unix/sysv/linux/$(TARGET_ARCH)/pt-initfini.c
-+ $(compile.c)
-+$(libpthread_pthread_OUT)/defs.h: $(top_srcdir)libpthread/nptl/sysdeps/unix/sysv/linux/$(TARGET_ARCH)/pt-initfini.c
-+ $(do_sed) -n -e '/@TESTS_BEGIN/,/@TESTS_END/p' $< | \
-+ $(AWK) -f $(top_srcdir)extra/scripts/defs.awk > $@.tmp
-+ $(Q)mv $@.tmp $@
-+else
- $(libpthread_pthread_OUT)/pt-initfini.s: $(libpthread_pthread_DIR)/pt-initfini.c
- $(compile.c)
- $(libpthread_pthread_OUT)/defs.h: $(libpthread_pthread_DIR)/pt-initfini.c
- $(do_sed) -n -e '/@TESTS_BEGIN/,/@TESTS_END/p' $< | \
- $(AWK) -f $(top_srcdir)extra/scripts/defs.awk > $@.tmp
- $(Q)mv $@.tmp $@
-+endif
-
- $(libpthread_pthread_OUT)/crti.S: $(libpthread_pthread_OUT)/pt-initfini.s $(libpthread_pthread_OUT)/defs.h
- $(do_sed) -n -e '/[ ]*\.file/d' \
diff --git a/toolchain/uClibc/patches/uClibc-sigaction.patch b/toolchain/uClibc/patches/uClibc-sigaction.patch
new file mode 100644
index 000000000..0077191e5
--- /dev/null
+++ b/toolchain/uClibc/patches/uClibc-sigaction.patch
@@ -0,0 +1,155 @@
+diff -Nur uClibc-0.9.32.1/libc/signal/sigaction.c uClibc.new/libc/signal/sigaction.c
+--- uClibc-0.9.32.1/libc/signal/sigaction.c 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/signal/sigaction.c 2012-02-17 14:49:51.000000000 +0100
+@@ -82,6 +82,11 @@
+
+
+ #ifndef LIBC_SIGACTION
++# ifndef __UCLIBC_HAS_THREADS__
++strong_alias(__libc_sigaction,sigaction)
++libc_hidden_def(sigaction)
++# else
+ weak_alias(__libc_sigaction,sigaction)
+ libc_hidden_weak(sigaction)
++# endif
+ #endif
+diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/arm/sigaction.c uClibc.new/libc/sysdeps/linux/arm/sigaction.c
+--- uClibc-0.9.32.1/libc/sysdeps/linux/arm/sigaction.c 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/sysdeps/linux/arm/sigaction.c 2012-02-17 14:49:51.000000000 +0100
+@@ -96,6 +96,11 @@
+
+
+ #ifndef LIBC_SIGACTION
++# ifndef __UCLIBC_HAS_THREADS__
++strong_alias(__libc_sigaction,sigaction)
++libc_hidden_def(sigaction)
++# else
+ weak_alias(__libc_sigaction,sigaction)
+ libc_hidden_weak(sigaction)
++# endif
+ #endif
+diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/avr32/sigaction.c uClibc.new/libc/sysdeps/linux/avr32/sigaction.c
+--- uClibc-0.9.32.1/libc/sysdeps/linux/avr32/sigaction.c 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/sysdeps/linux/avr32/sigaction.c 2012-02-17 14:49:51.000000000 +0100
+@@ -38,6 +38,11 @@
+ }
+
+ #ifndef LIBC_SIGACTION
+-weak_alias(__libc_sigaction, sigaction)
++# ifndef __UCLIBC_HAS_THREADS__
++strong_alias(__libc_sigaction,sigaction)
++libc_hidden_def(sigaction)
++# else
++weak_alias(__libc_sigaction,sigaction)
+ libc_hidden_weak(sigaction)
++# endif
+ #endif
+diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/c6x/sigaction.c uClibc.new/libc/sysdeps/linux/c6x/sigaction.c
+--- uClibc-0.9.32.1/libc/sysdeps/linux/c6x/sigaction.c 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/sysdeps/linux/c6x/sigaction.c 2012-02-17 14:49:51.000000000 +0100
+@@ -75,10 +75,16 @@
+ }
+
+ #ifndef LIBC_SIGACTION
++# ifndef __UCLIBC_HAS_THREADS__
++strong_alias(__libc_sigaction,sigaction)
++libc_hidden_def(sigaction)
++# else
+ weak_alias(__libc_sigaction,sigaction)
+ libc_hidden_weak(sigaction)
++# endif
+ #endif
+
++
+ /* NOTE: Please think twice before making any changes to the bits of
+ code below. GDB needs some intimate knowledge about it to
+ recognize them as signal trampolines, and make backtraces through
+diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/i386/sigaction.c uClibc.new/libc/sysdeps/linux/i386/sigaction.c
+--- uClibc-0.9.32.1/libc/sysdeps/linux/i386/sigaction.c 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/sysdeps/linux/i386/sigaction.c 2012-02-17 14:49:51.000000000 +0100
+@@ -95,8 +95,13 @@
+
+
+ #ifndef LIBC_SIGACTION
++# ifndef __UCLIBC_HAS_THREADS__
++strong_alias(__libc_sigaction,sigaction)
++libc_hidden_def(sigaction)
++# else
+ weak_alias(__libc_sigaction,sigaction)
+ libc_hidden_weak(sigaction)
++# endif
+ #endif
+
+
+diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/mips/sigaction.c uClibc.new/libc/sysdeps/linux/mips/sigaction.c
+--- uClibc-0.9.32.1/libc/sysdeps/linux/mips/sigaction.c 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/sysdeps/linux/mips/sigaction.c 2012-02-17 14:49:51.000000000 +0100
+@@ -100,8 +100,13 @@
+
+
+ #ifndef LIBC_SIGACTION
++# ifndef __UCLIBC_HAS_THREADS__
++strong_alias(__libc_sigaction,sigaction)
++libc_hidden_def(sigaction)
++# else
+ weak_alias(__libc_sigaction,sigaction)
+ libc_hidden_weak(sigaction)
++# endif
+ #endif
+
+
+diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/sparc/sigaction.c uClibc.new/libc/sysdeps/linux/sparc/sigaction.c
+--- uClibc-0.9.32.1/libc/sysdeps/linux/sparc/sigaction.c 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/sysdeps/linux/sparc/sigaction.c 2012-02-17 14:49:51.000000000 +0100
+@@ -65,11 +65,18 @@
+ return ret;
+ }
+
++
+ #ifndef LIBC_SIGACTION
++# ifndef __UCLIBC_HAS_THREADS__
++strong_alias(__libc_sigaction,sigaction)
++libc_hidden_def(sigaction)
++# else
+ weak_alias(__libc_sigaction,sigaction)
+ libc_hidden_weak(sigaction)
++# endif
+ #endif
+
++
+ static void
+ __rt_sigreturn_stub(void)
+ {
+diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/x86_64/sigaction.c uClibc.new/libc/sysdeps/linux/x86_64/sigaction.c
+--- uClibc-0.9.32.1/libc/sysdeps/linux/x86_64/sigaction.c 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/sysdeps/linux/x86_64/sigaction.c 2012-02-17 14:49:51.000000000 +0100
+@@ -99,8 +99,13 @@
+
+
+ #ifndef LIBC_SIGACTION
++# ifndef __UCLIBC_HAS_THREADS__
++strong_alias(__libc_sigaction,sigaction)
++libc_hidden_def(sigaction)
++# else
+ weak_alias(__libc_sigaction,sigaction)
+ libc_hidden_weak(sigaction)
++# endif
+ #endif
+
+
+diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/xtensa/sigaction.c uClibc.new/libc/sysdeps/linux/xtensa/sigaction.c
+--- uClibc-0.9.32.1/libc/sysdeps/linux/xtensa/sigaction.c 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/sysdeps/linux/xtensa/sigaction.c 2012-02-17 14:49:51.000000000 +0100
+@@ -34,6 +34,11 @@
+ }
+
+ #ifndef LIBC_SIGACTION
+-weak_alias(__libc_sigaction, sigaction)
++# ifndef __UCLIBC_HAS_THREADS__
++strong_alias(__libc_sigaction,sigaction)
++libc_hidden_def(sigaction)
++# else
++weak_alias(__libc_sigaction,sigaction)
+ libc_hidden_weak(sigaction)
++# endif
+ #endif
diff --git a/toolchain/uClibc/patches/uClibc-sigaction2.patch b/toolchain/uClibc/patches/uClibc-sigaction2.patch
new file mode 100644
index 000000000..f33e14dde
--- /dev/null
+++ b/toolchain/uClibc/patches/uClibc-sigaction2.patch
@@ -0,0 +1,247 @@
+diff -Nur uClibc-0.9.32.1/libc/signal/Makefile.in uClibc.new/libc/signal/Makefile.in
+--- uClibc-0.9.32.1/libc/signal/Makefile.in 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/signal/Makefile.in 2012-02-17 15:13:33.000000000 +0100
+@@ -17,7 +17,7 @@
+ CSRC-$(UCLIBC_SUSV4_LEGACY) += sigintr.c
+
+ ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-CSRC-y:=$(filter-out raise.c sigaction.c,$(CSRC-y))
++CSRC-y:=$(filter-out raise.c,$(CSRC-y))
+ endif
+
+ ifneq ($(strip $(ARCH_OBJS)),)
+diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/arm/Makefile.arch uClibc.new/libc/sysdeps/linux/arm/Makefile.arch
+--- uClibc-0.9.32.1/libc/sysdeps/linux/arm/Makefile.arch 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/sysdeps/linux/arm/Makefile.arch 2012-02-17 15:13:33.000000000 +0100
+@@ -5,11 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c ioperm.c iopl.c mmap.c __syscall_error.c
+-
+-ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-CSRC += sigaction.c
+-endif
++CSRC := brk.c ioperm.c iopl.c mmap.c __syscall_error.c sigaction.c
+
+ SSRC := \
+ __longjmp.S setjmp.S bsd-setjmp.S \
+diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/i386/Makefile.arch uClibc.new/libc/sysdeps/linux/i386/Makefile.arch
+--- uClibc-0.9.32.1/libc/sysdeps/linux/i386/Makefile.arch 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/sysdeps/linux/i386/Makefile.arch 2012-02-17 15:13:33.000000000 +0100
+@@ -5,11 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c __syscall_error.c
+-
+-ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-CSRC += sigaction.c
+-endif
++CSRC := brk.c __syscall_error.c sigaction.c
+
+ SSRC := \
+ __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \
+diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/mips/Makefile.arch uClibc.new/libc/sysdeps/linux/mips/Makefile.arch
+--- uClibc-0.9.32.1/libc/sysdeps/linux/mips/Makefile.arch 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/sysdeps/linux/mips/Makefile.arch 2012-02-17 15:13:33.000000000 +0100
+@@ -7,7 +7,7 @@
+
+ CSRC := \
+ __longjmp.c brk.c setjmp_aux.c mmap.c \
+- cacheflush.c pread_write.c sysmips.c _test_and_set.c \
++ cacheflush.c pread_write.c sigaction.c sysmips.c _test_and_set.c \
+ readahead.c
+
+ SSRC := bsd-_setjmp.S bsd-setjmp.S setjmp.S syscall.S pipe.S syscall_error.S
+@@ -17,7 +17,6 @@
+ endif
+
+ ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-CSRC += sigaction.c
+ SSRC += vfork.S clone.S
+ endif
+
+diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/sparc/Makefile.arch uClibc.new/libc/sysdeps/linux/sparc/Makefile.arch
+--- uClibc-0.9.32.1/libc/sysdeps/linux/sparc/Makefile.arch 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/sysdeps/linux/sparc/Makefile.arch 2012-02-17 15:14:20.000000000 +0100
+@@ -5,15 +5,14 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c __syscall_error.c
++CSRC := brk.c __syscall_error.c sigaction.c
+
+ SSRC := \
+ __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \
+ syscall.S urem.S udiv.S umul.S sdiv.S rem.S pipe.S
+
+ ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-CSRC += sigaction.c
+-SSRC += fork.S vfork.S
++SSRC += fork.S vfork.S clone.S
+ endif
+
+ # check weather __LONG_DOUBLE_128__ is defined (long double support)
+diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/x86_64/Makefile.arch uClibc.new/libc/sysdeps/linux/x86_64/Makefile.arch
+--- uClibc-0.9.32.1/libc/sysdeps/linux/x86_64/Makefile.arch 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libc/sysdeps/linux/x86_64/Makefile.arch 2012-02-17 15:13:33.000000000 +0100
+@@ -5,11 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+
+-CSRC := brk.c __syscall_error.c mmap.c
+-
+-ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y)
+-CSRC += sigaction.c
+-endif
++CSRC := brk.c __syscall_error.c sigaction.c mmap.c
+
+ SSRC := \
+ __longjmp.S setjmp.S syscall.S bsd-setjmp.S bsd-_setjmp.S
+diff -Nur uClibc-0.9.32.1/libpthread/nptl/.gitignore uClibc.new/libpthread/nptl/.gitignore
+--- uClibc-0.9.32.1/libpthread/nptl/.gitignore 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libpthread/nptl/.gitignore 2012-02-17 15:13:33.000000000 +0100
+@@ -24,6 +24,5 @@
+ #
+ # symlinks
+ #
+-sysdeps/pthread/pt-sigaction.c
+ sysdeps/pthread/pt-sigfillset.c
+ sysdeps/pthread/pt-sigprocmask.c
+diff -Nur uClibc-0.9.32.1/libpthread/nptl/sysdeps/pthread/Makefile.in uClibc.new/libpthread/nptl/sysdeps/pthread/Makefile.in
+--- uClibc-0.9.32.1/libpthread/nptl/sysdeps/pthread/Makefile.in 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libpthread/nptl/sysdeps/pthread/Makefile.in 2012-02-17 15:13:33.000000000 +0100
+@@ -42,8 +42,6 @@
+ CFLAGS-pthread_spin_destroy.c = -D_GNU_SOURCE
+ CFLAGS-pthread_spin_init.c = -D_GNU_SOURCE
+ CFLAGS-pthread_spin_unlock.c = -D_GNU_SOURCE
+-CFLAGS-pt-sigaction.c = -I$(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH) \
+- -I$(top_srcdir)libc/signal
+ CFLAGS-pt-sigfillset.c = -I$(top_srcdir)libc/signal
+ CFLAGS-pt-sigprocmask.c = -I$(top_srcdir)libc/sysdeps/linux/common
+ CFLAGS-unwind-forcedunwind.c = -fexceptions -fasynchronous-unwind-tables
+@@ -58,10 +56,6 @@
+ libpthread-so-y += $(patsubst %,$(libpthread_pthread_OUT)/%.oS, \
+ pt-sigaction pt-sigprocmask unwind-forcedunwind)
+
+-CFLAGS-OMIT-sigaction.c = $(CFLAGS-pthread)
+-CFLAGS-sigaction.c = -I$(top_srcdir)libc/signal
+-libc-y += $(libpthread_pthread_OUT)/sigaction.o
+-
+ librt-pt-routines-y = librt-cancellation.c
+ librt-pt-shared-only-routines-y = rt-unwind-resume.c
+
+@@ -114,7 +108,7 @@
+ # impl, but ok.
+ # Special rules needed since we do objdir->objdir compilation for these 3.
+ # First symlink them, then build them. Rob would freak out on these. Sheesh! ;)
+-pthread-lc-fwd = sigaction sigfillset sigprocmask
++pthread-lc-fwd = sigfillset sigprocmask
+ $(patsubst %,$(libpthread_pthread_OUT)/pt-%.c,$(pthread-lc-fwd)): | $(libpthread_pthread_OUT)
+ $(do_ln) $(call rel_srcdir)$(patsubst pt-%,$(libpthread_pthread_DIR)/%,$(@F)) $@
+ $(patsubst %,$(libpthread_pthread_OUT)/pt-%.oS,$(pthread-lc-fwd)): $(libpthread_pthread_OUT)/pt-%.oS: $(libpthread_pthread_OUT)/pt-%.c
+@@ -131,5 +125,5 @@
+ CLEAN_libpthread/nptl/sysdeps/pthread:
+ $(do_rm) $(addprefix $(libpthread_pthread_OUT)/*., o os oS s S) \
+ $(libpthread_pthread_OUT)/defs.h \
+- $(addprefix $(libpthread_pthread_DIR)/,pt-sigaction.c \
++ $(addprefix $(libpthread_pthread_DIR)/, \
+ pt-sigfillset.c pt-sigprocmask.c)
+diff -Nur uClibc-0.9.32.1/libpthread/nptl/sysdeps/pthread/pt-sigaction.c uClibc.new/libpthread/nptl/sysdeps/pthread/pt-sigaction.c
+--- uClibc-0.9.32.1/libpthread/nptl/sysdeps/pthread/pt-sigaction.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc.new/libpthread/nptl/sysdeps/pthread/pt-sigaction.c 2012-02-17 15:13:33.000000000 +0100
+@@ -0,0 +1,40 @@
++/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++ Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <pthreadP.h>
++#include <signal.h>
++
++/* We use the libc implementation but we tell it to not allow
++ SIGCANCEL or SIGTIMER to be handled. */
++
++extern __typeof(sigaction) __libc_sigaction;
++int
++__sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
++{
++ if (unlikely (sig == SIGCANCEL || sig == SIGSETXID))
++ {
++ __set_errno (EINVAL);
++ return -1;
++ }
++
++ return __libc_sigaction (sig, act, oact);
++}
++libc_hidden_proto(sigaction)
++weak_alias (__sigaction, sigaction)
++libc_hidden_weak(sigaction)
+diff -Nur uClibc-0.9.32.1/libpthread/nptl/sysdeps/pthread/sigaction.c uClibc.new/libpthread/nptl/sysdeps/pthread/sigaction.c
+--- uClibc-0.9.32.1/libpthread/nptl/sysdeps/pthread/sigaction.c 2011-12-30 12:11:07.000000000 +0100
++++ uClibc.new/libpthread/nptl/sysdeps/pthread/sigaction.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,49 +0,0 @@
+-/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
+- This file is part of the GNU C Library.
+- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
+-
+- The GNU C Library is free software; you can redistribute it and/or
+- modify it under the terms of the GNU Lesser General Public
+- License as published by the Free Software Foundation; either
+- version 2.1 of the License, or (at your option) any later version.
+-
+- The GNU C Library is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- Lesser General Public License for more details.
+-
+- You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, write to the Free
+- Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+- 02111-1307 USA. */
+-
+-#ifndef LIBC_SIGACTION
+-
+-#include <pthreadP.h>
+-
+-/* We use the libc implementation but we tell it to not allow
+- SIGCANCEL or SIGTIMER to be handled. */
+-#define LIBC_SIGACTION 1
+-#include <sigaction.c>
+-
+-extern __typeof(sigaction) __sigaction;
+-int
+-__sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
+-{
+- if (__builtin_expect (sig == SIGCANCEL || sig == SIGSETXID, 0))
+- {
+- __set_errno (EINVAL);
+- return -1;
+- }
+-
+- return __libc_sigaction (sig, act, oact);
+-}
+-libc_hidden_proto(sigaction)
+-weak_alias (__sigaction, sigaction)
+-libc_hidden_weak(sigaction)
+-
+-#else
+-
+-# include_next <sigaction.c>
+-
+-#endif /* LIBC_SIGACTION */
diff --git a/toolchain/uClibc/patches/uClibc-weak-sigprocmask.patch b/toolchain/uClibc/patches/uClibc-weak-sigprocmask.patch
new file mode 100644
index 000000000..a98f5b94d
--- /dev/null
+++ b/toolchain/uClibc/patches/uClibc-weak-sigprocmask.patch
@@ -0,0 +1,21 @@
+diff -Nur uClibc-0.9.32.1.orig/libc/sysdeps/linux/common/sigprocmask.c uClibc-0.9.32.1/libc/sysdeps/linux/common/sigprocmask.c
+--- uClibc-0.9.32.1.orig/libc/sysdeps/linux/common/sigprocmask.c 2011-12-30 12:11:07.000000000 +0100
++++ uClibc-0.9.32.1/libc/sysdeps/linux/common/sigprocmask.c 2012-02-18 11:40:09.000000000 +0100
+@@ -23,7 +23,7 @@
+ _syscall4(int, __rt_sigprocmask, int, how, const sigset_t *, set,
+ sigset_t *, oldset, size_t, size)
+
+-int sigprocmask(int how, const sigset_t * set, sigset_t * oldset)
++int weak_function sigprocmask(int how, const sigset_t * set, sigset_t * oldset)
+ {
+ #ifdef SIGCANCEL
+ sigset_t local_newmask;
+@@ -58,7 +58,7 @@
+ _syscall3(int, __syscall_sigprocmask, int, how, const sigset_t *, set,
+ sigset_t *, oldset)
+
+-int sigprocmask(int how, const sigset_t * set, sigset_t * oldset)
++int weak_function sigprocmask(int how, const sigset_t * set, sigset_t * oldset)
+ {
+ #ifdef SIGCANCEL
+ sigset_t local_newmask;