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 */
