Browse Source

sync latest uClibc patches

Waldemar Brodkorb 11 years ago
parent
commit
3ac37c8cfd

+ 2 - 2
toolchain/uclibc/patches/0.9.34-git/0001-test-disable-posix_fallocate64-for-small-embedded-sy.patch

@@ -1,7 +1,7 @@
-From d167545f3578d560e0c3818ac9657a34fead9812 Mon Sep 17 00:00:00 2001
+From 54cef0956a1e85add7c6998f95abffa9362be85e Mon Sep 17 00:00:00 2001
 From: Waldemar Brodkorb <wbx@openadk.org>
 From: Waldemar Brodkorb <wbx@openadk.org>
 Date: Mon, 1 Sep 2014 21:02:19 +0200
 Date: Mon, 1 Sep 2014 21:02:19 +0200
-Subject: [PATCH 1/2] test: disable posix_fallocate64 for small embedded
+Subject: [PATCH 1/6] test: disable posix_fallocate64 for small embedded
  systems
  systems
 
 
 Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
 Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>

+ 93 - 21
toolchain/uclibc/patches/0.9.34-git/0002-nptl-remove-duplicate-vfork-in-libpthread.patch

@@ -1,7 +1,7 @@
-From 539fe3a7cc5439d01499765008751f8d17ca5ede Mon Sep 17 00:00:00 2001
+From d4ebeb637a050717642a0f270b3b0dd61f046705 Mon Sep 17 00:00:00 2001
 From: Waldemar Brodkorb <wbx@openadk.org>
 From: Waldemar Brodkorb <wbx@openadk.org>
 Date: Thu, 4 Sep 2014 15:23:36 +0200
 Date: Thu, 4 Sep 2014 15:23:36 +0200
-Subject: [PATCH 2/2] nptl: remove duplicate vfork() in libpthread
+Subject: [PATCH 2/6] nptl: remove duplicate vfork() in libpthread
 
 
 Automatic patching via two oneliners by Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>:
 Automatic patching via two oneliners by Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>:
 sed -i -e 's/[[:space:]]pt-vfork\.[csS]//' $(git grep -l pt-vfork libpthread/nptl/sysdeps)
 sed -i -e 's/[[:space:]]pt-vfork\.[csS]//' $(git grep -l pt-vfork libpthread/nptl/sysdeps)
@@ -11,27 +11,27 @@ Reported-By: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
 Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
 ---
 ---
  .../nptl/sysdeps/unix/sysv/linux/alpha/pt-vfork.S  | 42 --------------
  .../nptl/sysdeps/unix/sysv/linux/alpha/pt-vfork.S  | 42 --------------
- .../nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch |  2 +-
+ .../nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch |  3 +-
  .../nptl/sysdeps/unix/sysv/linux/arc/pt-vfork.S    |  7 ---
  .../nptl/sysdeps/unix/sysv/linux/arc/pt-vfork.S    |  7 ---
- .../nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch |  2 +-
+ .../nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch |  3 +-
  .../nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S    | 37 ------------
  .../nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S    | 37 ------------
- .../sysdeps/unix/sysv/linux/i386/Makefile.arch     |  2 +-
+ .../sysdeps/unix/sysv/linux/i386/Makefile.arch     |  3 +-
  .../nptl/sysdeps/unix/sysv/linux/i386/pt-vfork.S   | 67 ----------------------
  .../nptl/sysdeps/unix/sysv/linux/i386/pt-vfork.S   | 67 ----------------------
- .../sysdeps/unix/sysv/linux/metag/Makefile.arch    |  2 +-
+ .../sysdeps/unix/sysv/linux/metag/Makefile.arch    |  3 +-
  .../nptl/sysdeps/unix/sysv/linux/metag/pt-vfork.S  | 51 ----------------
  .../nptl/sysdeps/unix/sysv/linux/metag/pt-vfork.S  | 51 ----------------
- .../sysdeps/unix/sysv/linux/mips/Makefile.arch     |  2 +-
+ .../sysdeps/unix/sysv/linux/mips/Makefile.arch     |  3 +-
  .../nptl/sysdeps/unix/sysv/linux/mips/pt-vfork.S   | 37 ------------
  .../nptl/sysdeps/unix/sysv/linux/mips/pt-vfork.S   | 37 ------------
- .../sysdeps/unix/sysv/linux/powerpc/Makefile.arch  |  2 +-
+ .../sysdeps/unix/sysv/linux/powerpc/Makefile.arch  |  3 +-
  .../unix/sysv/linux/powerpc/powerpc32/pt-vfork.S   | 48 ----------------
  .../unix/sysv/linux/powerpc/powerpc32/pt-vfork.S   | 48 ----------------
  .../unix/sysv/linux/powerpc/powerpc64/pt-vfork.S   | 48 ----------------
  .../unix/sysv/linux/powerpc/powerpc64/pt-vfork.S   | 48 ----------------
  .../sysdeps/unix/sysv/linux/powerpc/pt-vfork.S     |  5 --
  .../sysdeps/unix/sysv/linux/powerpc/pt-vfork.S     |  5 --
- .../nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch  |  2 +-
+ .../nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch  |  3 +-
  .../nptl/sysdeps/unix/sysv/linux/sh/pt-vfork.S     | 64 ---------------------
  .../nptl/sysdeps/unix/sysv/linux/sh/pt-vfork.S     | 64 ---------------------
- .../sysdeps/unix/sysv/linux/sparc/Makefile.arch    |  2 +-
+ .../sysdeps/unix/sysv/linux/sparc/Makefile.arch    |  3 +-
  .../nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S  | 44 --------------
  .../nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S  | 44 --------------
- .../sysdeps/unix/sysv/linux/x86_64/Makefile.arch   |  2 +-
+ .../sysdeps/unix/sysv/linux/x86_64/Makefile.arch   |  3 +-
  .../nptl/sysdeps/unix/sysv/linux/x86_64/pt-vfork.S | 32 -----------
  .../nptl/sysdeps/unix/sysv/linux/x86_64/pt-vfork.S | 32 -----------
- 21 files changed, 9 insertions(+), 491 deletions(-)
+ 21 files changed, 9 insertions(+), 500 deletions(-)
  delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/alpha/pt-vfork.S
  delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/alpha/pt-vfork.S
  delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/arc/pt-vfork.S
  delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/arc/pt-vfork.S
  delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S
  delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S
@@ -94,7 +94,7 @@ index a6005c1..0000000
 -
 -
 -weak_alias (__vfork, vfork)
 -weak_alias (__vfork, vfork)
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch
-index 25e6fad..3c82f0a 100644
+index 25e6fad..658aa6c 100644
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch
 @@ -5,7 +5,7 @@
 @@ -5,7 +5,7 @@
@@ -106,6 +106,14 @@ index 25e6fad..3c82f0a 100644
  libpthread_linux_arch_CSRC = pthread_once.c lowlevellock.c \
  libpthread_linux_arch_CSRC = pthread_once.c lowlevellock.c \
  	pt-__syscall_rt_sigaction.c pt-__syscall_error.c
  	pt-__syscall_rt_sigaction.c pt-__syscall_error.c
  
  
+@@ -17,7 +17,6 @@ CFLAGS-pthread_once.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-pt-__syscall_rt_sigaction.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-lowlevellock.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-pt-__syscall_error.c =  -DNOT_IN_libc -DIS_IN_libpthread
+-ASFLAGS-pt-vfork.S = -DNOT_IN_libc -DIS_IN_libpthread
+ 
+ ASFLAGS-vfork.S = -DIS_IN_libc -DNOT_IN_libpthread
+ ASFLAGS-clone.S = -DIS_IN_libc -DNOT_IN_libpthread
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/arc/pt-vfork.S
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/arc/pt-vfork.S
 deleted file mode 100644
 deleted file mode 100644
 index f222dca..0000000
 index f222dca..0000000
@@ -120,7 +128,7 @@ index f222dca..0000000
 -
 -
 -#include "vfork.S"
 -#include "vfork.S"
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
-index 329d8a9..1b0282d 100644
+index 329d8a9..6f05b7d 100644
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
 @@ -5,7 +5,7 @@
 @@ -5,7 +5,7 @@
@@ -132,6 +140,14 @@ index 329d8a9..1b0282d 100644
  libpthread_linux_arch_CSRC = pthread_once.c \
  libpthread_linux_arch_CSRC = pthread_once.c \
  	pt-__syscall_rt_sigaction.c pt-__syscall_error.c \
  	pt-__syscall_rt_sigaction.c pt-__syscall_error.c \
  	lowlevellock.c
  	lowlevellock.c
+@@ -19,7 +19,6 @@ CFLAGS-pthread_once.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-pt-__syscall_rt_sigaction.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-lowlevellock.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-pt-__syscall_error.c =  -DNOT_IN_libc -DIS_IN_libpthread
+-ASFLAGS-pt-vfork.S = -DNOT_IN_libc -DIS_IN_libpthread -marm
+ 
+ ifeq ($(UCLIBC_HAS_STDIO_FUTEXES),y)
+ CFLAGS-fork.c = -D__USE_STDIO_FUTEXES__
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S
 deleted file mode 100644
 deleted file mode 100644
 index df18f03..0000000
 index df18f03..0000000
@@ -176,7 +192,7 @@ index df18f03..0000000
 -
 -
 -#include "../../../../../../../libc/sysdeps/linux/arm/vfork.S"
 -#include "../../../../../../../libc/sysdeps/linux/arm/vfork.S"
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch
-index 9a34595..98e2ae7 100644
+index 9a34595..94fc03a 100644
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch
 @@ -5,7 +5,7 @@
 @@ -5,7 +5,7 @@
@@ -188,6 +204,14 @@ index 9a34595..98e2ae7 100644
  libpthread_linux_arch_CSRC = pthread_spin_init.c pt-__syscall_error.c
  libpthread_linux_arch_CSRC = pthread_spin_init.c pt-__syscall_error.c
  
  
  libc_linux_arch_CSRC = fork.c
  libc_linux_arch_CSRC = fork.c
+@@ -14,7 +14,6 @@ libc_linux_arch_SSRC = clone.S vfork.S
+ ASFLAGS += -DUSE___THREAD
+ 
+ CFLAGS-pt-__syscall_error.c =  -DNOT_IN_libc -DIS_IN_libpthread
+-ASFLAGS-pt-vfork.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT
+ ASFLAGS-lowlevellock.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT
+ ASFLAGS-lowlevelrobustlock.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT
+ ASFLAGS-pthread_once.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pt-vfork.S
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pt-vfork.S
 deleted file mode 100644
 deleted file mode 100644
 index 5bba782..0000000
 index 5bba782..0000000
@@ -262,7 +286,7 @@ index 5bba782..0000000
 -
 -
 -weak_alias (__vfork, vfork)
 -weak_alias (__vfork, vfork)
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch
-index df98875..a4dc4ab 100644
+index df98875..99dec6b 100644
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch
 @@ -5,7 +5,7 @@
 @@ -5,7 +5,7 @@
@@ -274,6 +298,14 @@ index df98875..a4dc4ab 100644
  libpthread_linux_arch_CSRC = pthread_once.c \
  libpthread_linux_arch_CSRC = pthread_once.c \
  	pt-__syscall_rt_sigaction.c pt-__syscall_error.c \
  	pt-__syscall_rt_sigaction.c pt-__syscall_error.c \
  	lowlevellock.c
  	lowlevellock.c
+@@ -22,7 +22,6 @@ CFLAGS-lowlevellock.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-pt-__syscall_error.c =  -DNOT_IN_libc -DIS_IN_libpthread
+ ASFLAGS-vfork.S = -DIS_IN_libc -DNOT_IN_libpthread
+ ASFLAGS-clone.S = -DIS_IN_libc -DNOT_IN_libpthread
+-ASFLAGS-pt-vfork.S = -DNOT_IN_libc -DIS_IN_libpthread
+ 
+ ifeq ($(UCLIBC_HAS_STDIO_FUTEXES),y)
+ CFLAGS-fork.c = -D__USE_STDIO_FUTEXES__
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-vfork.S
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/metag/pt-vfork.S
 deleted file mode 100644
 deleted file mode 100644
 index 489c749..0000000
 index 489c749..0000000
@@ -332,7 +364,7 @@ index 489c749..0000000
 -
 -
 -#include <../../../../../../../libc/sysdeps/linux/metag/vfork.S>
 -#include <../../../../../../../libc/sysdeps/linux/metag/vfork.S>
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch
-index fc26a8e..cfe2861 100644
+index fc26a8e..a453b6b 100644
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch
 @@ -5,7 +5,7 @@
 @@ -5,7 +5,7 @@
@@ -344,6 +376,14 @@ index fc26a8e..cfe2861 100644
  libpthread_linux_arch_CSRC = pthread_once.c pt-__syscall_rt_sigaction.c
  libpthread_linux_arch_CSRC = pthread_once.c pt-__syscall_rt_sigaction.c
  
  
  libc_linux_arch_CSRC = fork.c
  libc_linux_arch_CSRC = fork.c
+@@ -21,7 +21,6 @@ CFLAGS-fork.c = -D__USE_STDIO_FUTEXES__
+ endif
+ CFLAGS-pthread_once.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-pt-__syscall_rt_sigaction.c = -DNOT_IN_libc -DIS_IN_libpthread
+-ASFLAGS-pt-vfork.S = -DNOT_IN_libc -DIS_IN_libpthread
+ 
+ ASFLAGS-clone.S = -D_LIBC_REENTRANT
+ ASFLAGS-vfork.S = -D_LIBC_REENTRANT
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-vfork.S
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-vfork.S
 deleted file mode 100644
 deleted file mode 100644
 index 52fbde3..0000000
 index 52fbde3..0000000
@@ -388,7 +428,7 @@ index 52fbde3..0000000
 -
 -
 -#include <../../../../../../../libc/sysdeps/linux/mips/vfork.S>
 -#include <../../../../../../../libc/sysdeps/linux/mips/vfork.S>
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch
-index 8581aea..0aa285e 100644
+index 8581aea..215c2aa 100644
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch
 @@ -5,7 +5,7 @@
 @@ -5,7 +5,7 @@
@@ -400,6 +440,14 @@ index 8581aea..0aa285e 100644
  libpthread_linux_arch_CSRC = pthread_once.c pt-__syscall_error.c
  libpthread_linux_arch_CSRC = pthread_once.c pt-__syscall_error.c
  
  
  libc_linux_arch_CSRC = fork.c
  libc_linux_arch_CSRC = fork.c
+@@ -19,7 +19,6 @@ ASFLAGS += -DUSE___THREAD
+ CFLAGS-pthread_once.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-lowlevellock.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-pt-__syscall_error.c =  -DNOT_IN_libc -DIS_IN_libpthread
+-ASFLAGS-pt-vfork.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT
+ #ASFLAGS-lowlevellock.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT
+ 
+ #ASFLAGS-libc-lowlevellock.S = -D_LIBC_REENTRANT
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/pt-vfork.S
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/pt-vfork.S
 deleted file mode 100644
 deleted file mode 100644
 index 2f82504..0000000
 index 2f82504..0000000
@@ -520,7 +568,7 @@ index 0225219..0000000
 -# include "powerpc32/pt-vfork.S"
 -# include "powerpc32/pt-vfork.S"
 -#endif
 -#endif
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch
-index a8249e0..a0c008b 100644
+index a8249e0..9ebbda5 100644
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch
 @@ -5,7 +5,7 @@
 @@ -5,7 +5,7 @@
@@ -532,6 +580,14 @@ index a8249e0..a0c008b 100644
  			pthread_rwlock_rdlock.S pthread_rwlock_unlock.S \
  			pthread_rwlock_rdlock.S pthread_rwlock_unlock.S \
  			lowlevellock.S lowlevelrobustlock.S pthread_barrier_wait.S \
  			lowlevellock.S lowlevelrobustlock.S pthread_barrier_wait.S \
  			pthread_cond_broadcast.S pthread_cond_signal.S \
  			pthread_cond_broadcast.S pthread_cond_signal.S \
+@@ -17,7 +17,6 @@ libc_linux_arch_SSRC = libc-lowlevellock.S clone.S vfork.S
+ 
+ ASFLAGS += -DUSE___THREAD
+ 
+-ASFLAGS-pt-vfork.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT
+ ASFLAGS-pthread_once.S = -D_LIBC_REENTRANT
+ ASFLAGS-pthread_rwlock_wrlock.S = -D_LIBC_REENTRANT
+ ASFLAGS-pthread_rwlock_rdlock.S = -D_LIBC_REENTRANT
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-vfork.S
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-vfork.S
 deleted file mode 100644
 deleted file mode 100644
 index 56aa6d0..0000000
 index 56aa6d0..0000000
@@ -603,7 +659,7 @@ index 56aa6d0..0000000
 -
 -
 -weak_alias (__vfork, vfork)
 -weak_alias (__vfork, vfork)
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch
-index 102c0da..8329885 100644
+index 102c0da..aedad2c 100644
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch
 @@ -5,7 +5,7 @@
 @@ -5,7 +5,7 @@
@@ -615,6 +671,14 @@ index 102c0da..8329885 100644
  libpthread_linux_arch_CSRC = pthread_once.c lowlevellock.c \
  libpthread_linux_arch_CSRC = pthread_once.c lowlevellock.c \
  	pthread_barrier_init.c pthread_barrier_wait.c pthread_barrier_destroy.c \
  	pthread_barrier_init.c pthread_barrier_wait.c pthread_barrier_destroy.c \
  	pt-__syscall_error.c
  	pt-__syscall_error.c
+@@ -17,7 +17,6 @@ librt_linux_arch_CSRC = pt-__syscall_error.c
+ 
+ ASFLAGS += -DUSE___THREAD
+ 
+-ASFLAGS-pt-vfork.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT
+ CFLAGS-pthread_once.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-lowlevellock.c = -DNOT_IN_libc -DIS_IN_libpthread
+ CFLAGS-pt-__syscall_error.c =  -DNOT_IN_libc -DIS_IN_libpthread
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S
 deleted file mode 100644
 deleted file mode 100644
 index 37231a8..0000000
 index 37231a8..0000000
@@ -666,7 +730,7 @@ index 37231a8..0000000
 -
 -
 -weak_alias (__vfork, vfork)
 -weak_alias (__vfork, vfork)
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/Makefile.arch
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/Makefile.arch
-index 71df986..10fa3cf 100644
+index 71df986..7c2505f 100644
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/Makefile.arch
 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/Makefile.arch
 +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/Makefile.arch
 @@ -5,7 +5,7 @@
 @@ -5,7 +5,7 @@
@@ -678,6 +742,14 @@ index 71df986..10fa3cf 100644
  	lowlevellock.S pthread_barrier_wait.S pthread_cond_signal.S pthread_cond_broadcast.S \
  	lowlevellock.S pthread_barrier_wait.S pthread_cond_signal.S pthread_cond_broadcast.S \
  	sem_post.S sem_timedwait.S lowlevelrobustlock.S \
  	sem_post.S sem_timedwait.S lowlevelrobustlock.S \
  	sem_trywait.S sem_wait.S pthread_rwlock_rdlock.S pthread_rwlock_wrlock.S \
  	sem_trywait.S sem_wait.S pthread_rwlock_rdlock.S pthread_rwlock_wrlock.S \
+@@ -21,7 +21,6 @@ librt_linux_arch_SSRC = librt-cancellation.S
+ ASFLAGS += -DUSE___THREAD
+ 
+ CFLAGS-pt-__syscall_error.c =  -DNOT_IN_libc -DIS_IN_libpthread
+-ASFLAGS-pt-vfork.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT
+ ASFLAGS-lowlevellock.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT
+ ASFLAGS-pthread_once.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT
+ ASFLAGS-cancellation.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pt-vfork.S
 diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pt-vfork.S
 deleted file mode 100644
 deleted file mode 100644
 index 08a085c..0000000
 index 08a085c..0000000

+ 1347 - 0
toolchain/uclibc/patches/0.9.34-git/0003-linuxthreads-remove-unused-s390-code.patch

@@ -0,0 +1,1347 @@
+From d72e888957d32984c56e19e43a3c3b41263c7bb4 Mon Sep 17 00:00:00 2001
+From: Waldemar Brodkorb <wbx@openadk.org>
+Date: Sat, 6 Sep 2014 14:45:42 +0200
+Subject: [PATCH 3/6] linuxthreads: remove unused s390 code
+
+Cleanup linuxthreads by removing unused s390 code.
+
+Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
+---
+ libc/stdlib/system.c                               |   3 -
+ libpthread/linuxthreads/sysdeps/s390/pspinlock.c   |  90 ------------
+ .../linuxthreads/sysdeps/s390/s390-32/pt-machine.h | 119 ----------------
+ .../linuxthreads/sysdeps/s390/s390-64/pt-machine.h | 124 -----------------
+ .../linuxthreads/sysdeps/s390/tcb-offsets.sym      |   4 -
+ libpthread/linuxthreads/sysdeps/s390/tls.h         | 144 -------------------
+ .../sysdeps/unix/sysv/linux/s390/bits/typesizes.h  |  71 ----------
+ .../unix/sysv/linux/s390/s390-32/pt-initfini.c     | 153 ---------------------
+ .../unix/sysv/linux/s390/s390-32/sysdep-cancel.h   | 136 ------------------
+ .../sysdeps/unix/sysv/linux/s390/s390-32/vfork.S   |  68 ---------
+ .../unix/sysv/linux/s390/s390-64/pt-initfini.c     | 136 ------------------
+ .../unix/sysv/linux/s390/s390-64/pt-sigsuspend.c   |   1 -
+ .../unix/sysv/linux/s390/s390-64/sysdep-cancel.h   | 115 ----------------
+ .../sysdeps/unix/sysv/linux/s390/s390-64/vfork.S   |  53 -------
+ 14 files changed, 1217 deletions(-)
+ delete mode 100644 libpthread/linuxthreads/sysdeps/s390/pspinlock.c
+ delete mode 100644 libpthread/linuxthreads/sysdeps/s390/s390-32/pt-machine.h
+ delete mode 100644 libpthread/linuxthreads/sysdeps/s390/s390-64/pt-machine.h
+ delete mode 100644 libpthread/linuxthreads/sysdeps/s390/tcb-offsets.sym
+ delete mode 100644 libpthread/linuxthreads/sysdeps/s390/tls.h
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-sigsuspend.c
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
+ delete mode 100644 libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S
+
+diff --git a/libc/stdlib/system.c b/libc/stdlib/system.c
+index 8c5d25d..05b6738 100644
+--- a/libc/stdlib/system.c
++++ b/libc/stdlib/system.c
+@@ -91,9 +91,6 @@ libc_hidden_proto(waitpid)
+ #elif defined __sparc__
+ # define FORK() \
+   INLINE_CLONE_SYSCALL (CLONE_PARENT_SETTID | SIGCHLD, 0, &pid, NULL, NULL)
+-#elif defined __s390__
+-# define FORK() \
+-  INLINE_SYSCALL (clone, 3, 0, CLONE_PARENT_SETTID | SIGCHLD, &pid)
+ #else
+ # define FORK() \
+   INLINE_SYSCALL (clone, 3, CLONE_PARENT_SETTID | SIGCHLD, 0, &pid)
+diff --git a/libpthread/linuxthreads/sysdeps/s390/pspinlock.c b/libpthread/linuxthreads/sysdeps/s390/pspinlock.c
+deleted file mode 100644
+index be75786..0000000
+--- a/libpthread/linuxthreads/sysdeps/s390/pspinlock.c
++++ /dev/null
+@@ -1,90 +0,0 @@
+-/* POSIX spinlock implementation.  S/390 version.
+-   Copyright (C) 2000, 2004 Free Software Foundation, Inc.
+-   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+-   This file is part of the GNU C Library.
+-
+-   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; see the file COPYING.LIB.  If
+-   not, see <http://www.gnu.org/licenses/>.  */
+-
+-#include <errno.h>
+-#include <pthread.h>
+-#include "internals.h"
+-
+-/* This implementation is similar to the one used in the Linux kernel.
+-   But the kernel is byte instructions for the memory access.  This is
+-   faster but unusable here.  The problem is that only 128
+-   threads/processes could use the spinlock at the same time.  If (by
+-   a design error in the program) a thread/process would hold the
+-   spinlock for a time long enough to accumulate 128 waiting
+-   processes, the next one will find a positive value in the spinlock
+-   and assume it is unlocked.  We cannot accept that.  */
+-
+-int
+-__pthread_spin_lock (pthread_spinlock_t *lock)
+-{
+-  __asm__ __volatile__("    basr  1,0\n"
+-	       "0:  slr   0,0\n"
+-	       "    cs    0,1,%1\n"
+-	       "    jl    0b\n"
+-	       : "=m" (*lock)
+-	       : "m" (*lock) : "0", "1", "cc" );
+-  return 0;
+-}
+-weak_alias (__pthread_spin_lock, pthread_spin_lock)
+-
+-int
+-__pthread_spin_trylock (pthread_spinlock_t *lock)
+-{
+-  int oldval;
+-
+-  __asm__ __volatile__("    slr   %1,%1\n"
+-	       "    basr  1,0\n"
+-	       "0:  cs    %1,1,%0"
+-	       : "=m" (*lock), "=&d" (oldval)
+-	       : "m" (*lock) : "1", "cc" );
+-  return oldval == 0 ? 0 : EBUSY;
+-}
+-weak_alias (__pthread_spin_trylock, pthread_spin_trylock)
+-
+-
+-int
+-__pthread_spin_unlock (pthread_spinlock_t *lock)
+-{
+-  __asm__ __volatile__("    xc 0(4,%0),0(%0)\n"
+-	       "    bcr 15,0"
+-	       : : "a" (lock) : "memory" );
+-  return 0;
+-}
+-weak_alias (__pthread_spin_unlock, pthread_spin_unlock)
+-
+-
+-int
+-__pthread_spin_init (pthread_spinlock_t *lock, int pshared)
+-{
+-  /* We can ignore the `pshared' parameter.  Since we are busy-waiting
+-     all processes which can access the memory location `lock' points
+-     to can use the spinlock.  */
+-  *lock = 0;
+-  return 0;
+-}
+-weak_alias (__pthread_spin_init, pthread_spin_init)
+-
+-
+-int
+-__pthread_spin_destroy (pthread_spinlock_t *lock)
+-{
+-  /* Nothing to do.  */
+-  return 0;
+-}
+-weak_alias (__pthread_spin_destroy, pthread_spin_destroy)
+diff --git a/libpthread/linuxthreads/sysdeps/s390/s390-32/pt-machine.h b/libpthread/linuxthreads/sysdeps/s390/s390-32/pt-machine.h
+deleted file mode 100644
+index 51505a9..0000000
+--- a/libpthread/linuxthreads/sysdeps/s390/s390-32/pt-machine.h
++++ /dev/null
+@@ -1,119 +0,0 @@
+-/* Machine-dependent pthreads configuration and inline functions.
+-   S390 version.
+-   Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+-   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+-   This file is part of the GNU C Library.
+-
+-   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; see the file COPYING.LIB.  If
+-   not, see <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef _PT_MACHINE_H
+-#define _PT_MACHINE_H   1
+-
+-#ifndef PT_EI
+-# define PT_EI __extern_always_inline
+-#endif
+-
+-extern long int testandset (int *spinlock);
+-extern int __compare_and_swap (long int *p, long int oldval, long int newval);
+-
+-/* For multiprocessor systems, we want to ensure all memory accesses
+-   are completed before we reset a lock.  On other systems, we still
+-   need to make sure that the compiler has flushed everything to memory.  */
+-#define MEMORY_BARRIER() __asm__ __volatile__ ("bcr 15,0" : : : "memory")
+-
+-/* Spinlock implementation; required.  */
+-PT_EI long int
+-testandset (int *spinlock)
+-{
+-  int ret;
+-
+-  __asm__ __volatile__(
+-       "    la    1,%1\n"
+-       "    lhi   0,1\n"
+-       "    l     %0,%1\n"
+-       "0:  cs    %0,0,0(1)\n"
+-       "    jl    0b"
+-       : "=&d" (ret), "+m" (*spinlock)
+-       : : "0", "1", "cc");
+-
+-  return ret;
+-}
+-
+-
+-/* Get some notion of the current stack.  Need not be exactly the top
+-   of the stack, just something somewhere in the current frame.  */
+-#define CURRENT_STACK_FRAME  stack_pointer
+-register char * stack_pointer __asm__ ("15");
+-
+-#ifdef __UCLIBC_HAS_TLS__
+-/* Return the thread descriptor for the current thread.  */
+-# define THREAD_SELF ((pthread_descr) __builtin_thread_pointer ())
+-
+-/* Initialize the thread-unique value.  */
+-#define INIT_THREAD_SELF(descr, nr) __builtin_set_thread_pointer (descr)
+-#else
+-/* Return the thread descriptor for the current thread.
+-   S/390 registers uses access register 0 as "thread register".  */
+-#define THREAD_SELF  ({                                                       \
+-  register pthread_descr __self;                                              \
+-  __asm__ ("ear %0,%%a0" : "=d" (__self) );                                   \
+-  __self;                                                                     \
+-})
+-
+-/* Initialize the thread-unique value.  */
+-#define INIT_THREAD_SELF(descr, nr)  ({                                       \
+-  __asm__ ("sar %%a0,%0" : : "d" (descr) );                                   \
+-})
+-#endif
+-
+-/* Access to data in the thread descriptor is easy.  */
+-#define THREAD_GETMEM(descr, member) \
+-  ((void) sizeof (descr), THREAD_SELF->member)
+-#define THREAD_GETMEM_NC(descr, member) \
+-  ((void) sizeof (descr), THREAD_SELF->member)
+-#define THREAD_SETMEM(descr, member, value) \
+-  ((void) sizeof (descr), THREAD_SELF->member = (value))
+-#define THREAD_SETMEM_NC(descr, member, value) \
+-  ((void) sizeof (descr), THREAD_SELF->member = (value))
+-
+-/* We want the OS to assign stack addresses.  */
+-#define FLOATING_STACKS 1
+-
+-/* Maximum size of the stack if the rlimit is unlimited.  */
+-#define ARCH_STACK_MAX_SIZE     8*1024*1024
+-
+-/* Compare-and-swap for semaphores. */
+-
+-#define HAS_COMPARE_AND_SWAP
+-
+-PT_EI int
+-__compare_and_swap(long int *p, long int oldval, long int newval)
+-{
+-        int retval;
+-
+-        __asm__ __volatile__(
+-                "  la   1,%1\n"
+-                "  lr   0,%2\n"
+-                "  cs   0,%3,0(1)\n"
+-                "  ipm  %0\n"
+-                "  srl  %0,28\n"
+-                "0:"
+-                : "=&d" (retval), "+m" (*p)
+-                : "d" (oldval) , "d" (newval)
+-                : "cc", "0", "1" );
+-        return retval == 0;
+-}
+-
+-#endif /* pt-machine.h */
+diff --git a/libpthread/linuxthreads/sysdeps/s390/s390-64/pt-machine.h b/libpthread/linuxthreads/sysdeps/s390/s390-64/pt-machine.h
+deleted file mode 100644
+index 4bff85a..0000000
+--- a/libpthread/linuxthreads/sysdeps/s390/s390-64/pt-machine.h
++++ /dev/null
+@@ -1,124 +0,0 @@
+-/* Machine-dependent pthreads configuration and inline functions.
+-   64 bit S/390 version.
+-   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+-   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+-   This file is part of the GNU C Library.
+-
+-   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; see the file COPYING.LIB.  If
+-   not, see <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef _PT_MACHINE_H
+-#define _PT_MACHINE_H   1
+-
+-#ifndef PT_EI
+-# define PT_EI __extern_always_inline
+-#endif
+-
+-extern long int testandset (int *spinlock);
+-extern int __compare_and_swap (long int *p, long int oldval, long int newval);
+-
+-/* For multiprocessor systems, we want to ensure all memory accesses
+-   are completed before we reset a lock.  On other systems, we still
+-   need to make sure that the compiler has flushed everything to memory.  */
+-#define MEMORY_BARRIER() __asm__ __volatile__ ("bcr 15,0" : : : "memory")
+-
+-/* Spinlock implementation; required.  */
+-PT_EI long int
+-testandset (int *spinlock)
+-{
+-  int ret;
+-
+-  __asm__ __volatile__(
+-       "    la    1,%1\n"
+-       "    lhi   0,1\n"
+-       "    l     %0,%1\n"
+-       "0:  cs    %0,0,0(1)\n"
+-       "    jl    0b"
+-       : "=&d" (ret), "+m" (*spinlock)
+-       : : "0", "1", "cc");
+-
+-  return ret;
+-}
+-
+-
+-/* Get some notion of the current stack.  Need not be exactly the top
+-   of the stack, just something somewhere in the current frame.  */
+-#define CURRENT_STACK_FRAME  stack_pointer
+-register char * stack_pointer __asm__ ("15");
+-
+-#ifdef __UCLIBC_HAS_TLS__
+-/* Return the thread descriptor for the current thread.  */
+-# define THREAD_SELF ((pthread_descr) __builtin_thread_pointer ())
+-
+-/* Initialize the thread-unique value.  */
+-#define INIT_THREAD_SELF(descr, nr) __builtin_set_thread_pointer (descr)
+-#else
+-/* Return the thread descriptor for the current thread.
+-   64 bit S/390 uses access register 0 and 1 as "thread register".  */
+-#define THREAD_SELF  ({                                                       \
+-  register pthread_descr __self;                                              \
+-  __asm__ ("   ear  %0,%%a0\n"                                                \
+-           "   sllg %0,%0,32\n"                                               \
+-           "   ear  %0,%%a1\n"                                                \
+-           : "=d" (__self) );                                                 \
+-  __self;                                                                     \
+-})
+-
+-/* Initialize the thread-unique value.  */
+-#define INIT_THREAD_SELF(descr, nr)  ({                                       \
+-  __asm__ ("   sar  %%a1,%0\n"                                                \
+-           "   srlg 0,%0,32\n"                                                \
+-           "   sar  %%a0,0\n"                                                 \
+-           : : "d" (descr) : "0" );                                           \
+-})
+-#endif
+-
+-/* Access to data in the thread descriptor is easy.  */
+-#define THREAD_GETMEM(descr, member) \
+-  ((void) sizeof (descr), THREAD_SELF->member)
+-#define THREAD_GETMEM_NC(descr, member) \
+-  ((void) sizeof (descr), THREAD_SELF->member)
+-#define THREAD_SETMEM(descr, member, value) \
+-  ((void) sizeof (descr), THREAD_SELF->member = (value))
+-#define THREAD_SETMEM_NC(descr, member, value) \
+-  ((void) sizeof (descr), THREAD_SELF->member = (value))
+-
+-/* We want the OS to assign stack addresses.  */
+-#define FLOATING_STACKS 1
+-
+-/* Maximum size of the stack if the rlimit is unlimited.  */
+-#define ARCH_STACK_MAX_SIZE     8*1024*1024
+-
+-/* Compare-and-swap for semaphores. */
+-
+-#define HAS_COMPARE_AND_SWAP
+-
+-PT_EI int
+-__compare_and_swap(long int *p, long int oldval, long int newval)
+-{
+-        int retval;
+-
+-        __asm__ __volatile__(
+-                "  lgr  0,%2\n"
+-                "  csg  0,%3,%1\n"
+-                "  ipm  %0\n"
+-                "  srl  %0,28\n"
+-                "0:"
+-                : "=&d" (retval), "+m" (*p)
+-                : "d" (oldval) , "d" (newval)
+-                : "cc", "0");
+-        return retval == 0;
+-}
+-
+-#endif /* pt-machine.h */
+diff --git a/libpthread/linuxthreads/sysdeps/s390/tcb-offsets.sym b/libpthread/linuxthreads/sysdeps/s390/tcb-offsets.sym
+deleted file mode 100644
+index aee6be2..0000000
+--- a/libpthread/linuxthreads/sysdeps/s390/tcb-offsets.sym
++++ /dev/null
+@@ -1,4 +0,0 @@
+-#include <sysdep.h>
+-#include <tls.h>
+-
+-MULTIPLE_THREADS_OFFSET		offsetof (tcbhead_t, multiple_threads)
+diff --git a/libpthread/linuxthreads/sysdeps/s390/tls.h b/libpthread/linuxthreads/sysdeps/s390/tls.h
+deleted file mode 100644
+index d987bdb..0000000
+--- a/libpthread/linuxthreads/sysdeps/s390/tls.h
++++ /dev/null
+@@ -1,144 +0,0 @@
+-/* Definitions for thread-local data handling.  linuxthreads/s390 version.
+-   Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-
+-   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, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef _TLS_H
+-#define _TLS_H
+-
+-#ifndef __ASSEMBLER__
+-
+-# include <pt-machine.h>
+-# include <stdbool.h>
+-# include <stddef.h>
+-
+-/* Type for the dtv.  */
+-typedef union dtv
+-{
+-  size_t counter;
+-  struct
+-  {
+-    void *val;
+-    bool is_static;
+-  } pointer;
+-} dtv_t;
+-
+-typedef struct
+-{
+-  void *tcb;		/* Pointer to the TCB.  Not necessary the
+-			   thread descriptor used by libpthread.  */
+-  dtv_t *dtv;
+-  void *self;		/* Pointer to the thread descriptor.  */
+-  int multiple_threads;
+-} tcbhead_t;
+-
+-#else /* __ASSEMBLER__ */
+-# include <tcb-offsets.h>
+-#endif /* __ASSEMBLER__ */
+-
+-/* TLS is always supported if the tools support it.  There are no
+-   kernel dependencies.  To avoid bothering with the TLS support code
+-   at all, use configure --without-tls.
+-
+-   We need USE_TLS to be consistently defined, for ldsodefs.h
+-   conditionals.  */
+-
+-#ifdef HAVE_TLS_SUPPORT
+-
+-/* Signal that TLS support is available.  */
+-# define USE_TLS	1
+-
+-# ifndef __ASSEMBLER__
+-/* Get system call information.  */
+-#  include <sysdep.h>
+-
+-
+-/* Get the thread descriptor definition.  */
+-#  include <linuxthreads/descr.h>
+-
+-/* This is the size of the initial TCB.  */
+-#  define TLS_INIT_TCB_SIZE sizeof (tcbhead_t)
+-
+-/* Alignment requirements for the initial TCB.  */
+-#  define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t)
+-
+-/* This is the size of the TCB.  */
+-#  define TLS_TCB_SIZE sizeof (struct _pthread_descr_struct)
+-
+-/* Alignment requirements for the TCB.  */
+-#  define TLS_TCB_ALIGN __alignof__ (struct _pthread_descr_struct)
+-
+-/* The TCB can have any size and the memory following the address the
+-   thread pointer points to is unspecified.  Allocate the TCB there.  */
+-#  define TLS_TCB_AT_TP	1
+-
+-
+-/* Install the dtv pointer.  The pointer passed is to the element with
+-   index -1 which contain the length.  */
+-#  define INSTALL_DTV(descr, dtvp) \
+-  ((tcbhead_t *) (descr))->dtv = (dtvp) + 1
+-
+-/* Install new dtv for current thread.  */
+-#  define INSTALL_NEW_DTV(dtv) \
+-  (((tcbhead_t *) __builtin_thread_pointer ())->dtv = (dtv))
+-
+-/* Return dtv of given thread descriptor.  */
+-#  define GET_DTV(descr) \
+-  (((tcbhead_t *) (descr))->dtv)
+-
+-/* Code to initially initialize the thread pointer.  This might need
+-   special attention since 'errno' is not yet available and if the
+-   operation can cause a failure 'errno' must not be touched.
+-
+-   The value of this macro is null if successful, or an error string.  */
+-#  define TLS_INIT_TP(descr, secondcall)				      \
+-  ({									      \
+-    void *_descr = (descr);						      \
+-    tcbhead_t *head = _descr;						      \
+-									      \
+-    head->tcb = _descr;							      \
+-    /* For now the thread descriptor is at the same address.  */	      \
+-    head->self = _descr;						      \
+-									      \
+-    __builtin_set_thread_pointer (_descr);				      \
+-    NULL;								      \
+-  })
+-
+-/* Return the address of the dtv for the current thread.  */
+-#  define THREAD_DTV() \
+-  (((tcbhead_t *) __builtin_thread_pointer ())->dtv)
+-
+-# endif /* __ASSEMBLER__ */
+-
+-#else	/* HAVE_TLS_SUPPORT && (FLOATING_STACKS || !IS_IN_libpthread) */
+-
+-# ifndef __ASSEMBLER__
+-
+-/* Get the thread descriptor definition.  */
+-#  include <linuxthreads/descr.h>
+-
+-#  define NONTLS_INIT_TP \
+-  do { 								\
+-    static const tcbhead_t nontls_init_tp			\
+-      = { .multiple_threads = 0 };				\
+-    INIT_THREAD_SELF (&nontls_init_tp, 0);			\
+-  } while (0)
+-
+-# endif /* __ASSEMBLER__ */
+-
+-#endif	/* HAVE_TLS_SUPPORT && (FLOATING_STACKS || !IS_IN_libpthread) */
+-
+-#endif	/* tls.h */
+diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
+deleted file mode 100644
+index 6b58825..0000000
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/bits/typesizes.h
++++ /dev/null
+@@ -1,71 +0,0 @@
+-/* bits/typesizes.h -- underlying types for *_t.  Linux/s390 version.
+-   Copyright (C) 2003 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-
+-   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, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#ifndef _BITS_TYPES_H
+-# error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+-#endif
+-
+-#ifndef	_BITS_TYPESIZES_H
+-#define	_BITS_TYPESIZES_H	1
+-
+-/* See <bits/types.h> for the meaning of these macros.  This file exists so
+-   that <bits/types.h> need not vary across different GNU platforms.  */
+-
+-#define __DEV_T_TYPE		__UQUAD_TYPE
+-#define __UID_T_TYPE		__U32_TYPE
+-#define __GID_T_TYPE		__U32_TYPE
+-#define __INO_T_TYPE		__ULONGWORD_TYPE
+-#define __INO64_T_TYPE		__UQUAD_TYPE
+-#define __MODE_T_TYPE		__U32_TYPE
+-#define __NLINK_T_TYPE		__UWORD_TYPE
+-#define __OFF_T_TYPE		__SLONGWORD_TYPE
+-#define __OFF64_T_TYPE		__SQUAD_TYPE
+-#define __PID_T_TYPE		__S32_TYPE
+-#define __RLIM_T_TYPE		__ULONGWORD_TYPE
+-#define __RLIM64_T_TYPE		__UQUAD_TYPE
+-#define	__BLKCNT_T_TYPE		__SLONGWORD_TYPE
+-#define	__BLKCNT64_T_TYPE	__SQUAD_TYPE
+-#define	__FSBLKCNT_T_TYPE	__ULONGWORD_TYPE
+-#define	__FSBLKCNT64_T_TYPE	__UQUAD_TYPE
+-#define	__FSFILCNT_T_TYPE	__ULONGWORD_TYPE
+-#define	__FSFILCNT64_T_TYPE	__UQUAD_TYPE
+-#define	__ID_T_TYPE		__U32_TYPE
+-#define __CLOCK_T_TYPE		__SLONGWORD_TYPE
+-#define __TIME_T_TYPE		__SLONGWORD_TYPE
+-#define __USECONDS_T_TYPE	__U32_TYPE
+-#define __SUSECONDS_T_TYPE	__SLONGWORD_TYPE
+-#define __DADDR_T_TYPE		__S32_TYPE
+-#define __SWBLK_T_TYPE		__SLONGWORD_TYPE
+-#define __KEY_T_TYPE		__S32_TYPE
+-#define __CLOCKID_T_TYPE	__S32_TYPE
+-#define __TIMER_T_TYPE		__S32_TYPE
+-#define __BLKSIZE_T_TYPE	__SLONGWORD_TYPE
+-#define __FSID_T_TYPE		struct { int __val[2]; }
+-#if defined __GNUC__ && __GNUC__ <= 2
+-/* Compatibility with g++ 2.95.x.  */
+-#define __SSIZE_T_TYPE		__SWORD_TYPE
+-#else
+-/* size_t is unsigned long int on s390 -m31.  */
+-#define __SSIZE_T_TYPE		__SLONGWORD_TYPE
+-#endif
+-
+-/* Number of descriptors that can fit in an `fd_set'.  */
+-#define	__FD_SETSIZE		1024
+-
+-
+-#endif /* bits/typesizes.h */
+diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c
+deleted file mode 100644
+index cde4183..0000000
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/pt-initfini.c
++++ /dev/null
+@@ -1,153 +0,0 @@
+-/* Special .init and .fini section support for S/390.
+-   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-
+-   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.
+-
+-   In addition to the permissions in the GNU Lesser General Public
+-   License, the Free Software Foundation gives you unlimited
+-   permission to link the compiled version of this file with other
+-   programs, and to distribute those programs without any restriction
+-   coming from the use of this file.  (The Lesser General Public
+-   License restrictions do apply in other respects; for example, they
+-   cover modification of the file, and distribution when not linked
+-   into another program.)
+-
+-   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; see the file COPYING.LIB.  If not,
+-   see <http://www.gnu.org/licenses/>.  */
+-
+-/* This file is compiled into assembly code which is then munged by a sed
+-   script into two files: crti.s and crtn.s.
+-
+-   * crti.s puts a function prologue at the beginning of the
+-   .init and .fini sections and defines global symbols for
+-   those addresses, so they can be called as functions.
+-
+-   * crtn.s puts the corresponding function epilogues
+-   in the .init and .fini sections. */
+-
+-__asm__ ("\
+-\n\
+-#include \"defs.h\"\n\
+-\n\
+-/*@HEADER_ENDS*/\n\
+-\n\
+-/*@TESTS_BEGIN*/\n\
+-\n\
+-/*@TESTS_END*/\n\
+-\n\
+-/*@_init_PROLOG_BEGINS*/\n\
+-\n\
+-	.section .init\n\
+-#NO_APP\n\
+-	.align 4\n\
+-.globl _init\n\
+-	.type	 _init,@function\n\
+-_init:\n\
+-#	leaf function           0\n\
+-#	automatics              0\n\
+-#	outgoing args           0\n\
+-#	need frame pointer      0\n\
+-#	call alloca             0\n\
+-#	has varargs             0\n\
+-#	incoming args (stack)   0\n\
+-#	function length         36\n\
+-	STM	6,15,24(15)\n\
+-	BRAS	13,.LTN1_0\n\
+-.LT1_0:\n\
+-.LC13:\n\
+-	.long	__pthread_initialize_minimal@PLT-.LT1_0\n\
+-.LC14:\n\
+-	.long	__gmon_start__@GOT\n\
+-.LC15:\n\
+-	.long	_GLOBAL_OFFSET_TABLE_-.LT1_0\n\
+-.LTN1_0:\n\
+-	LR	1,15\n\
+-	AHI	15,-96\n\
+-	ST	1,0(15)\n\
+-	L	12,.LC15-.LT1_0(13)\n\
+-	AR	12,13\n\
+-	L     1,.LC13-.LT1_0(13)\n\
+-	LA    1,0(1,13)\n\
+-	BASR  14,1\n\
+-	L     1,.LC14-.LT1_0(13)\n\
+-	L     1,0(1,12)\n\
+-	LTR   1,1\n\
+-	JE    .L22\n\
+-	BASR  14,1\n\
+-.L22:\n\
+-#APP\n\
+-	.align 4,0x07\n\
+-	END_INIT\n\
+-\n\
+-/*@_init_PROLOG_ENDS*/\n\
+-\n\
+-/*@_init_EPILOG_BEGINS*/\n\
+-	.align 4\n\
+-	.section .init\n\
+-#NO_APP\n\
+-	.align 4\n\
+-	L	4,152(15)\n\
+-	LM	6,15,120(15)\n\
+-	BR	4\n\
+-#APP\n\
+-	END_INIT\n\
+-\n\
+-/*@_init_EPILOG_ENDS*/\n\
+-\n\
+-/*@_fini_PROLOG_BEGINS*/\n\
+-	.section .fini\n\
+-#NO_APP\n\
+-	.align 4\n\
+-.globl _fini\n\
+-	.type	 _fini,@function\n\
+-_fini:\n\
+-#	leaf function           0\n\
+-#	automatics              0\n\
+-#	outgoing args           0\n\
+-#	need frame pointer      0\n\
+-#	call alloca             0\n\
+-#	has varargs             0\n\
+-#	incoming args (stack)   0\n\
+-#	function length         30\n\
+-	STM	6,15,24(15)\n\
+-	BRAS	13,.LTN2_0\n\
+-.LT2_0:\n\
+-.LC17:\n\
+-	.long	_GLOBAL_OFFSET_TABLE_-.LT2_0\n\
+-.LTN2_0:\n\
+-	LR	1,15\n\
+-	AHI	15,-96\n\
+-	ST	1,0(15)\n\
+-	L	12,.LC17-.LT2_0(13)\n\
+-	AR	12,13\n\
+-#APP\n\
+-	.align 4,0x07\n\
+-	END_FINI\n\
+-\n\
+-/*@_fini_PROLOG_ENDS*/\n\
+-\n\
+-/*@_fini_EPILOG_BEGINS*/\n\
+-	.align 4\n\
+-	.section .fini\n\
+-#NO_APP\n\
+-	.align 4\n\
+-	L	4,152(15)\n\
+-	LM	6,15,120(15)\n\
+-	BR	4\n\
+-#APP\n\
+-	END_FINI\n\
+-\n\
+-/*@_fini_EPILOG_ENDS*/\n\
+-\n\
+-/*@TRAILER_BEGINS*/\
+-");
+diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
+deleted file mode 100644
+index 2431129..0000000
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
++++ /dev/null
+@@ -1,136 +0,0 @@
+-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
+-
+-   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, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include <sysdep.h>
+-#include <tls.h>
+-#ifndef __ASSEMBLER__
+-# include <linuxthreads/internals.h>
+-#endif
+-
+-#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
+-
+-# if !defined NOT_IN_libc || defined IS_IN_libpthread
+-
+-#  define PSEUDO_CANCEL(name, syscall_name, args)			      \
+-L(pseudo_cancel):							      \
+-	STM_##args							      \
+-	stm	%r12,%r15,48(%r15);					      \
+-	lr	%r14,%r15;						      \
+-	ahi	%r15,-96;						      \
+-	st	%r14,0(%r15);						      \
+-	basr    %r13,0;							      \
+-0:	l	%r1,1f-0b(%r13);					      \
+-	bas	%r14,0(%r1,%r13);					      \
+-	lr	%r0,%r2;						      \
+-	LM_##args							      \
+-	DO_CALL(syscall_name, args);					      \
+-	l	%r1,2f-0b(%r13);					      \
+-	lr	%r12,%r2;						      \
+-	lr	%r2,%r0;						      \
+-	bas	%r14,0(%r1,%r13);					      \
+-	lr	%r2,%r12;						      \
+-	lm	%r12,%r15,48+96(%r15);					      \
+-	j	L(pseudo_check);					      \
+-1:	.long	CENABLE-0b;						      \
+-2:	.long	CDISABLE-0b;
+-
+-# else /* !libc.so && !libpthread.so */
+-
+-#  define PSEUDO_CANCEL(name, syscall_name, args)			      \
+-L(pseudo_cancel):							      \
+-	STM_##args							      \
+-	stm	%r11,%r15,44(%r15);					      \
+-	lr	%r14,%r15;						      \
+-	ahi	%r15,-96;						      \
+-	st	%r14,0(%r15);						      \
+-	basr    %r13,0;							      \
+-0:	l	%r12,3f-0b(%r13);					      \
+-	l	%r1,1f-0b(%r13);					      \
+-	la	%r12,0(%r12,%r13);					      \
+-	bas	%r14,0(%r1,%r13);					      \
+-	lr	%r0,%r2;						      \
+-	LM_##args							      \
+-	DO_CALL(syscall_name, args);					      \
+-	l	%r1,2f-0b(%r13);					      \
+-	lr	%r11,%r2;						      \
+-	lr	%r2,%r0;						      \
+-	bas	%r14,0(%r1,%r13);					      \
+-	lr	%r2,%r11;						      \
+-	lm	%r11,%r15,44+96(%r15);					      \
+-	j	L(pseudo_check);					      \
+-1:	.long	CENABLE@PLT-0b;						      \
+-2:	.long	CDISABLE@PLT-0b;					      \
+-3:	.long	_GLOBAL_OFFSET_TABLE_-0b;
+-
+-# endif
+-
+-# undef PSEUDO
+-# define PSEUDO(name, syscall_name, args)				      \
+-	.text;								      \
+-PSEUDO_CANCEL(name, syscall_name, args)					      \
+-ENTRY(name)								      \
+-	SINGLE_THREAD_P(%r1)						      \
+-	jne	L(pseudo_cancel);					      \
+-	DO_CALL(syscall_name, args);					      \
+-L(pseudo_check):							      \
+-	lhi	%r4,-4095;						      \
+-	clr	%r2,%r4;						      \
+-	jnl	SYSCALL_ERROR_LABEL;					      \
+-L(pseudo_end):
+-
+-# ifdef IS_IN_libpthread
+-#  define CENABLE	__pthread_enable_asynccancel
+-#  define CDISABLE	__pthread_disable_asynccancel
+-# elif !defined NOT_IN_libc
+-#  define CENABLE	__libc_enable_asynccancel
+-#  define CDISABLE	__libc_disable_asynccancel
+-# else
+-#  define CENABLE	__librt_enable_asynccancel
+-#  define CDISABLE	__librt_disable_asynccancel
+-# endif
+-
+-#define STM_0		/* Nothing */
+-#define STM_1		st %r2,8(%r15);
+-#define STM_2		stm %r2,%r3,8(%r15);
+-#define STM_3		stm %r2,%r4,8(%r15);
+-#define STM_4		stm %r2,%r5,8(%r15);
+-#define STM_5		stm %r2,%r5,8(%r15);
+-
+-#define LM_0		/* Nothing */
+-#define LM_1		l %r2,8+96(%r15);
+-#define LM_2		lm %r2,%r3,8+96(%r15);
+-#define LM_3		lm %r2,%r4,8+96(%r15);
+-#define LM_4		lm %r2,%r5,8+96(%r15);
+-#define LM_5		lm %r2,%r5,8+96(%r15);
+-
+-# ifndef __ASSEMBLER__
+-#  define SINGLE_THREAD_P \
+-  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \
+-				   p_header.data.multiple_threads) == 0, 1)
+-# else
+-#  define SINGLE_THREAD_P(reg) \
+-	ear	reg,%a0;						      \
+-	icm	reg,15,MULTIPLE_THREADS_OFFSET(reg);
+-# endif
+-
+-#elif !defined __ASSEMBLER__
+-
+-/* This code should never be used but we define it anyhow.  */
+-# define SINGLE_THREAD_P (1)
+-
+-#endif
+diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S
+deleted file mode 100644
+index 078c730..0000000
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-32/vfork.S
++++ /dev/null
+@@ -1,68 +0,0 @@
+-/* Copyright (C) 2003 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>
+-
+-   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, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include <sysdep-cancel.h>
+-#define _ERRNO_H	1
+-#include <bits/errno.h>
+-
+-/* Clone the calling process, but without copying the whole address space.
+-   The calling process is suspended until the new process exits or is
+-   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
+-   and the process ID of the new process to the old process.  */
+-
+-ENTRY (__vfork)
+-	basr	%r1,0
+-0:
+-#ifdef SHARED
+-	al	%r1,4f-0b(%r1)
+-	l	%r1,0(%r1)
+-	ltr	%r1,%r1
+-#else
+-	icm	%r1,15,4f-0b(%r1)
+-#endif
+-	jne	1f
+-
+-	/* Do vfork system call.  */
+-	svc	SYS_ify (vfork)
+-
+-	/* Check for error.  */
+-	lhi	%r4,-4095
+-	clr	%r2,%r4
+-	jnl	SYSCALL_ERROR_LABEL
+-
+-	/* Normal return.  */
+-	br	%r14
+-1:
+-	basr	%r1,0
+-2:
+-	al	%r1,3f-2b(%r1)
+-	br	%r1
+-3:
+-	.long	HIDDEN_JUMPTARGET(fork)-2b
+-4:
+-#ifdef SHARED
+-	.long	__libc_pthread_functions-0b
+-#else
+-	.weak	pthread_create
+-	.long	pthread_create
+-#endif
+-PSEUDO_END(__vfork)
+-
+-libc_hidden_def (__vfork)
+-
+-weak_alias (__vfork, vfork)
+diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c
+deleted file mode 100644
+index 136ce54..0000000
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-initfini.c
++++ /dev/null
+@@ -1,136 +0,0 @@
+-/* Special .init and .fini section support for 64 bit S/390.
+-   Copyright (C) 2001 Free Software Foundation, Inc.
+-   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
+-   This file is part of the GNU C Library.
+-
+-   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.
+-
+-   In addition to the permissions in the GNU Lesser General Public
+-   License, the Free Software Foundation gives you unlimited
+-   permission to link the compiled version of this file with other
+-   programs, and to distribute those programs without any restriction
+-   coming from the use of this file.  (The Lesser General Public
+-   License restrictions do apply in other respects; for example, they
+-   cover modification of the file, and distribution when not linked
+-   into another program.)
+-
+-   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; see the file COPYING.LIB.  If not,
+-   see <http://www.gnu.org/licenses/>.  */
+-
+-/* This file is compiled into assembly code which is then munged by a sed
+-   script into two files: crti.s and crtn.s.
+-
+-   * crti.s puts a function prologue at the beginning of the
+-   .init and .fini sections and defines global symbols for
+-   those addresses, so they can be called as functions.
+-
+-   * crtn.s puts the corresponding function epilogues
+-   in the .init and .fini sections. */
+-
+-__asm__ ("\
+-\n\
+-#include \"defs.h\"\n\
+-\n\
+-/*@HEADER_ENDS*/\n\
+-\n\
+-/*@TESTS_BEGIN*/\n\
+-\n\
+-/*@TESTS_END*/\n\
+-\n\
+-/*@_init_PROLOG_BEGINS*/\n\
+-\n\
+-	.section .init\n\
+-#NO_APP\n\
+-	.align 4\n\
+-.globl _init\n\
+-	.type	 _init,@function\n\
+-_init:\n\
+-#	leaf function           0\n\
+-#	automatics              0\n\
+-#	outgoing args           0\n\
+-#	need frame pointer      0\n\
+-#	call alloca             0\n\
+-#	has varargs             0\n\
+-#	incoming args (stack)   0\n\
+-#	function length         36\n\
+-	STMG	6,15,48(15)\n\
+-	LGR	1,15\n\
+-	AGHI	15,-160\n\
+-	STG	1,0(15)\n\
+-	LARL	12,_GLOBAL_OFFSET_TABLE_\n\
+-	BRASL	14,__pthread_initialize_minimal@PLT\n\
+-	LARL	1,__gmon_start__@GOTENT\n\
+-	LG	1,0(1)\n\
+-	LTGR	1,1\n\
+-	JE	.L22\n\
+-	BASR	14,1\n\
+-.L22:\n\
+-#APP\n\
+-	.align 4,0x07\n\
+-	END_INIT\n\
+-\n\
+-/*@_init_PROLOG_ENDS*/\n\
+-\n\
+-/*@_init_EPILOG_BEGINS*/\n\
+-	.align 4\n\
+-	.section .init\n\
+-#NO_APP\n\
+-	.align 4\n\
+-	LG	4,272(15)\n\
+-	LMG	6,15,208(15)\n\
+-	BR	4\n\
+-#APP\n\
+-	END_INIT\n\
+-\n\
+-/*@_init_EPILOG_ENDS*/\n\
+-\n\
+-/*@_fini_PROLOG_BEGINS*/\n\
+-	.section .fini\n\
+-#NO_APP\n\
+-	.align 4\n\
+-.globl _fini\n\
+-	.type	 _fini,@function\n\
+-_fini:\n\
+-#	leaf function           0\n\
+-#	automatics              0\n\
+-#	outgoing args           0\n\
+-#	need frame pointer      0\n\
+-#	call alloca             0\n\
+-#	has varargs             0\n\
+-#	incoming args (stack)   0\n\
+-#	function length         30\n\
+-	STMG	6,15,48(15)\n\
+-	LGR	1,15\n\
+-	AGHI	15,-160\n\
+-	STG	1,0(15)\n\
+-	LARL	12,_GLOBAL_OFFSET_TABLE_\n\
+-#APP\n\
+-	.align 4,0x07\n\
+-	END_FINI\n\
+-\n\
+-/*@_fini_PROLOG_ENDS*/\n\
+-\n\
+-/*@_fini_EPILOG_BEGINS*/\n\
+-	.align 4\n\
+-	.section .fini\n\
+-#NO_APP\n\
+-	.align 4\n\
+-	LG	4,272(15)\n\
+-	LMG	6,15,208(15)\n\
+-	BR	4\n\
+-#APP\n\
+-	END_FINI\n\
+-\n\
+-/*@_fini_EPILOG_ENDS*/\n\
+-\n\
+-/*@TRAILER_BEGINS*/\n\
+-	");
+diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-sigsuspend.c b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-sigsuspend.c
+deleted file mode 100644
+index d57283a..0000000
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/pt-sigsuspend.c
++++ /dev/null
+@@ -1 +0,0 @@
+-#include "../../ia64/pt-sigsuspend.c"
+diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
+deleted file mode 100644
+index cf3124e..0000000
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
++++ /dev/null
+@@ -1,115 +0,0 @@
+-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
+-
+-   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, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include <sysdep.h>
+-#include <tls.h>
+-#ifndef __ASSEMBLER__
+-# include <linuxthreads/internals.h>
+-#endif
+-
+-#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt
+-
+-# undef PSEUDO
+-# define PSEUDO(name, syscall_name, args)				      \
+-	.text;								      \
+-L(pseudo_cancel):							      \
+-	STM_##args							      \
+-	stmg	%r13,%r15,104(%r15);					      \
+-	lgr	%r14,%r15;						      \
+-	aghi	%r15,-160;						      \
+-	stg	%r14,0(%r15);						      \
+-	brasl	%r14,CENABLE;						      \
+-	lgr	%r0,%r2;						      \
+-	LM_##args							      \
+-	DO_CALL(syscall_name, args);					      \
+-	lgr	%r13,%r2;						      \
+-	lgr	%r2,%r0;						      \
+-	brasl	%r14,CDISABLE;						      \
+-	lgr	%r2,%r13;						      \
+-	lmg	%r13,%r15,104+160(%r15);				      \
+-	j	L(pseudo_check);					      \
+-ENTRY(name)								      \
+-	SINGLE_THREAD_P							      \
+-	jne	L(pseudo_cancel);					      \
+-	DO_CALL(syscall_name, args);					      \
+-L(pseudo_check):							      \
+-	lghi	%r4,-4095;						      \
+-	clgr	%r2,%r4;						      \
+-	jgnl	SYSCALL_ERROR_LABEL;					      \
+-L(pseudo_end):
+-
+-# ifdef IS_IN_libpthread
+-#  define CENABLE	__pthread_enable_asynccancel
+-#  define CDISABLE	__pthread_disable_asynccancel
+-#  define __local_multiple_threads	__pthread_multiple_threads
+-# elif !defined NOT_IN_libc
+-#  define CENABLE	__libc_enable_asynccancel
+-#  define CDISABLE	__libc_disable_asynccancel
+-#  define __local_multiple_threads	__libc_multiple_threads
+-# else
+-#  define CENABLE	__librt_enable_asynccancel@PLT
+-#  define CDISABLE	__librt_disable_asynccancel@PLT
+-# endif
+-
+-#define STM_0		/* Nothing */
+-#define STM_1		stg %r2,16(%r15);
+-#define STM_2		stmg %r2,%r3,16(%r15);
+-#define STM_3		stmg %r2,%r4,16(%r15);
+-#define STM_4		stmg %r2,%r5,16(%r15);
+-#define STM_5		stmg %r2,%r5,16(%r15);
+-
+-#define LM_0		/* Nothing */
+-#define LM_1		lg %r2,16+160(%r15);
+-#define LM_2		lmg %r2,%r3,16+160(%r15);
+-#define LM_3		lmg %r2,%r4,16+160(%r15);
+-#define LM_4		lmg %r2,%r5,16+160(%r15);
+-#define LM_5		lmg %r2,%r5,16+160(%r15);
+-
+-# if !defined NOT_IN_libc || defined IS_IN_libpthread
+-#  ifndef __ASSEMBLER__
+-extern int __local_multiple_threads attribute_hidden;
+-#   define SINGLE_THREAD_P \
+-  __builtin_expect (__local_multiple_threads == 0, 1)
+-#  else
+-#   define SINGLE_THREAD_P \
+-	larl	%r1,__local_multiple_threads;				      \
+-	icm	%r0,15,0(%r1);
+-#  endif
+-
+-# else
+-
+-#  ifndef __ASSEMBLER__
+-#   define SINGLE_THREAD_P \
+-  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \
+-				   p_header.data.multiple_threads) == 0, 1)
+-#  else
+-#   define SINGLE_THREAD_P \
+-	ear	%r1,%a0;						      \
+-	sllg	%r1,%r1,32;						      \
+-	ear	%r1,%a1;						      \
+-	icm	%r1,15,MULTIPLE_THREADS_OFFSET(%r1);
+-#  endif
+-
+-# endif
+-
+-#elif !defined __ASSEMBLER__
+-
+-/* This code should never be used but we define it anyhow.  */
+-# define SINGLE_THREAD_P (1)
+-
+-#endif
+diff --git a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S b/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S
+deleted file mode 100644
+index 109d4f6..0000000
+--- a/libpthread/linuxthreads/sysdeps/unix/sysv/linux/s390/s390-64/vfork.S
++++ /dev/null
+@@ -1,53 +0,0 @@
+-/* Copyright (C) 2003 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>
+-
+-   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, see
+-   <http://www.gnu.org/licenses/>.  */
+-
+-#include <sysdep-cancel.h>
+-#define _ERRNO_H	1
+-#include <bits/errno.h>
+-
+-/* Clone the calling process, but without copying the whole address space.
+-   The calling process is suspended until the new process exits or is
+-   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
+-   and the process ID of the new process to the old process.  */
+-
+-ENTRY (__vfork)
+-#ifdef SHARED
+-	larl	%r1,__libc_pthread_functions
+-	lg	%r1,0(%r1)
+-#else
+-	.weak	pthread_create
+-	larl	%r1,pthread_create
+-#endif
+-	ltgr	%r1,%r1
+-	jgne	HIDDEN_JUMPTARGET(fork)
+-
+-	/* Do vfork system call.  */
+-	svc	SYS_ify (vfork)
+-
+-	/* Check for error.  */
+-	lghi	%r4,-4095
+-	clgr	%r2,%r4
+-	jgnl	SYSCALL_ERROR_LABEL
+-
+-	/* Normal return.  */
+-	br	%r14
+-PSEUDO_END(__vfork)
+-
+-libc_hidden_def (__vfork)
+-
+-weak_alias (__vfork, vfork)
+-- 
+1.8.5.2 (Apple Git-48)
+

+ 2 - 2
toolchain/uclibc/patches/0.9.34-git/0004-disable-tests-if-HAVE_SHARED-is-not-set.patch

@@ -1,7 +1,7 @@
-From b23a0c664498b7cca99e9e9cc06a2c18b0799663 Mon Sep 17 00:00:00 2001
+From c6f378032f50fe7c531368111743a94015c6949d Mon Sep 17 00:00:00 2001
 From: Waldemar Brodkorb <wbx@openadk.org>
 From: Waldemar Brodkorb <wbx@openadk.org>
 Date: Sun, 7 Sep 2014 16:38:14 +0200
 Date: Sun, 7 Sep 2014 16:38:14 +0200
-Subject: [PATCH 4/4] disable tests if HAVE_SHARED is not set
+Subject: [PATCH 4/6] disable tests if HAVE_SHARED is not set
 
 
 Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
 Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
 ---
 ---

+ 28 - 0
toolchain/uclibc/patches/0.9.34-git/0005-disable-tests-for-arc-as-long-as-binutils-is-buggy.patch

@@ -0,0 +1,28 @@
+From 01ba5566cd878ae5e2183e1a89729922bfa80fa0 Mon Sep 17 00:00:00 2001
+From: Waldemar Brodkorb <wbx@openadk.org>
+Date: Tue, 9 Sep 2014 18:40:22 +0200
+Subject: [PATCH 5/6] disable tests for arc as long as binutils is buggy
+
+Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
+---
+ test/nptl/Makefile.in | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/test/nptl/Makefile.in b/test/nptl/Makefile.in
+index d20d2c1..12119e2 100644
+--- a/test/nptl/Makefile.in
++++ b/test/nptl/Makefile.in
+@@ -53,6 +53,10 @@ TESTS += tst-clock tst-clock_nanosleep tst-cpuclock1 tst-cpuclock2	\
+ 	tst-mqueue7 tst-mqueue8 tst-mqueue9 tst-timer2 tst-timer3	\
+ 	tst-timer4 tst-timer5
+ 
++ifeq ($(TARGET_ARCH),arc)
++TESTS_DISABLED += tst-tls12 tst-tls-at-ctor
++endif
++
+ ifeq ($(UCLIBC_HAS_OBSOLETE_BSD_SIGNAL),)
+ TESTS_DISABLED += tst-exec2 tst-exec3 tst-exec4
+ endif
+-- 
+1.8.5.2 (Apple Git-48)
+

+ 170 - 0
toolchain/uclibc/patches/0.9.34-git/0006-arm-add-RESET_PID-in-the-clone-impl.patch

@@ -0,0 +1,170 @@
+From b516d8b113e479254d114c17cb51f2687098149c Mon Sep 17 00:00:00 2001
+From: Wang Yufen <wangyufen@huawei.com>
+Date: Fri, 5 Sep 2014 15:19:21 +0800
+Subject: [PATCH 6/6] arm: add RESET_PID in the clone impl
+
+Called getpid() When creating a new process with clone(), getpid() returns
+the father_process's value. It should be child_process's value.
+The reason is missing a RESET_PID in the arm clone impl.
+
+Signed-off-by: Wang Yufen <wangyufen@huawei.com>
+Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
+---
+ libc/sysdeps/linux/arm/clone.S  | 61 +++++++++++++++++++++++++++++++----------
+ libc/sysdeps/linux/arm/sysdep.h | 36 ++++++++++++++++++++++++
+ 2 files changed, 83 insertions(+), 14 deletions(-)
+
+diff --git a/libc/sysdeps/linux/arm/clone.S b/libc/sysdeps/linux/arm/clone.S
+index 03cd10e..29045ef 100644
+--- a/libc/sysdeps/linux/arm/clone.S
++++ b/libc/sysdeps/linux/arm/clone.S
+@@ -19,12 +19,17 @@
+ /* clone() is even more special than fork() as it mucks with stacks
+    and invokes a function in the right context after its all over.  */
+ 
++#include <sysdep.h>
+ #define _ERRNO_H
+ #include <features.h>
+ #include <bits/errno.h>
+ #include <sys/syscall.h>
+ #include <bits/arm_asm.h>
+ #include <bits/arm_bx.h>
++#include <sysdep-cancel.h>
++
++#define CLONE_VM      0x00000100
++#define CLONE_THREAD  0x00010000
+ 
+ #if defined(__NR_clone)
+ /* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */
+@@ -87,6 +92,8 @@ __error:
+ .pool
+ #else
+ __clone:
++.fnstart
++.cantunwind
+ 	@ sanity check args
+ 	cmp	r0, #0
+ 	IT(te, ne)
+@@ -95,32 +102,58 @@ __clone:
+ 	beq	__error
+ 
+ 	@ insert the args onto the new stack
+-	sub	r1, r1, #8
+-	str	r3, [r1, #4]
+-	@ save the function pointer as the 0th element
+-	str	r0, [r1]
++	str	r3, [r1, #-4]!
++	str	r0, [r1, #-4]!
+ 
+ 	@ do the system call
+ 	@ get flags
+ 	mov	r0, r2
++#ifdef RESET_PID
++	mov	ip, r2
++#endif
+ 	@ new sp is already in r1
+-	@ load remaining arguments off the stack
+-	stmfd	sp!, {r4}
+-	ldr	r2, [sp, #4]
+-	ldr	r3, [sp, #8]
+-	ldr	r4, [sp, #12]
+-	DO_CALL (clone)
+-	movs	a1, a1
+-	IT(t, ne)
+-	ldmnefd	sp!, {r4}
++	push	{r4, r7}
++	cfi_adjust_cfa_offset (8)
++	cfi_rel_offset (r4, 0)
++	cfi_rel_offset (r7, 4)
++	ldr	r2, [sp, #8]
++	ldr	r3, [sp, #12]
++	ldr	r4, [sp, #16]
++	ldr	r7, =SYS_ify(clone)
++	swi	0x0
++	cfi_endproc
++	cmp	r0, #0
++	beq	1f
++	pop	{r4, r7}
+ 	blt	__error
+-	IT(t, ne)
+ #if defined(__USE_BX__)
+ 	bxne	lr
+ #else
+ 	movne	pc, lr
+ #endif
+ 
++	cfi_startproc
++.fnend
++PSEUDO_END (__clone)
++
++1:
++	.fnstart
++	.cantunwind
++#ifdef RESET_PID
++	tst	ip, #CLONE_THREAD
++	bne	3f
++	GET_TLS (lr)
++	mov	r1, r0
++	tst	ip, #CLONE_VM
++	ldr	r7, =SYS_ify(getpid)
++	ite	ne
++	movne	r0, #-1
++	swieq	0x0
++	NEGOFF_ADJ_BASE (r1, TID_OFFSET)
++	str	r0, NEGOFF_OFF1 (r1, TID_OFFSET)
++	str	r0, NEGOFF_OFF2 (r1, PID_OFFSET, TID_OFFSET)
++3:
++#endif
+ 	@ pick the function arg and call address off the stack and execute
+ 	ldr	r0, [sp, #4]
+ 	mov	lr, pc
+diff --git a/libc/sysdeps/linux/arm/sysdep.h b/libc/sysdeps/linux/arm/sysdep.h
+index 64f4040..2d0a9cc 100644
+--- a/libc/sysdeps/linux/arm/sysdep.h
++++ b/libc/sysdeps/linux/arm/sysdep.h
+@@ -213,6 +213,42 @@ __local_syscall_error:						\
+    sees the right arguments.
+ 
+ */
++#if __ARM_ARCH > 6 || defined (__ARM_ARCH_6K__) || defined (__ARM_ARCH_6ZK__)
++# define ARCH_HAS_HARD_TP
++#endif
++
++# ifdef __thumb2__
++#  define NEGOFF_ADJ_BASE(R, OFF)	add R, R, $OFF
++#  define NEGOFF_ADJ_BASE2(D, S, OFF)	add D, S, $OFF
++#  define NEGOFF_OFF1(R, OFF)		[R]
++#  define NEGOFF_OFF2(R, OFFA, OFFB)	[R, $((OFFA) - (OFFB))]
++# else
++#  define NEGOFF_ADJ_BASE(R, OFF)
++#  define NEGOFF_ADJ_BASE2(D, S, OFF)	mov D, S
++#  define NEGOFF_OFF1(R, OFF)		[R, $OFF]
++#  define NEGOFF_OFF2(R, OFFA, OFFB)	[R, $OFFA]
++# endif
++
++# ifdef ARCH_HAS_HARD_TP
++/* If the cpu has cp15 available, use it.  */
++#  define GET_TLS(TMP)		mrc p15, 0, r0, c13, c0, 3
++# else
++/* At this generic level we have no tricks to pull.  Call the ABI routine.  */
++#  define GET_TLS(TMP)					\
++	push	{ r1, r2, r3, lr };			\
++	cfi_remember_state;				\
++	cfi_adjust_cfa_offset (16);			\
++	cfi_rel_offset (r1, 0);				\
++	cfi_rel_offset (r2, 4);				\
++	cfi_rel_offset (r3, 8);				\
++	cfi_rel_offset (lr, 12);			\
++	bl	__aeabi_read_tp;			\
++	pop	{ r1, r2, r3, lr };			\
++	cfi_restore_state
++# endif /* ARCH_HAS_HARD_TP */
++
++
++
+ 
+ #undef	DO_CALL
+ #if defined(__ARM_EABI__)
+-- 
+1.8.5.2 (Apple Git-48)
+