uclibc: fix duplicate vfork problems when static linking
authorWaldemar Brodkorb <wbx@openadk.org>
Mon, 1 Sep 2014 20:06:06 +0000 (22:06 +0200)
committerPeter Korsgaard <peter@korsgaard.com>
Sun, 14 Sep 2014 20:26:59 +0000 (22:26 +0200)
Reported on uClibc mailinglist by Thomas Petazzoni
Should fix:
* SuperH
 http://autobuild.buildroot.org/results/a81/a810c2f27dee1978808461c05cbdcbf51a214e09/build-end.log
* i386
 http://autobuild.buildroot.org/results/f83/f83b65bfc6ea7c7406a02e92afda43e4c5db6e7c/build-end.log
* x86-64
 http://autobuild.buildroot.org/results/64f/64f418f54885e8b5093dc8949c2d1d1ff3c938ea/build-end.log
* powerpc
 http://autobuild.buildroot.org/results/d5b/d5b7ac84dde0e4e26cd7cc46d79e66c39ed5cd53/build-end.log

Tested with i386 static build of alsa-utils.
Patch will be send to uClibc soon, need to finish test-suite run.

Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
Tested-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
package/uclibc/0.9.33.2/uclibc-0062-nptl-remove-duplicate-vfork-in-libpthread.patch [new file with mode: 0644]

diff --git a/package/uclibc/0.9.33.2/uclibc-0062-nptl-remove-duplicate-vfork-in-libpthread.patch b/package/uclibc/0.9.33.2/uclibc-0062-nptl-remove-duplicate-vfork-in-libpthread.patch
new file mode 100644 (file)
index 0000000..4ab737f
--- /dev/null
@@ -0,0 +1,691 @@
+nptl: remove duplicate vfork() in libpthread
+
+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)
+find libpthread/nptl -name "*pt-vfork*" -exec git rm {} \;
+
+Reported-By: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
+---
+ .../nptl/sysdeps/unix/sysv/linux/alpha/pt-vfork.S  | 43 --------------
+ .../nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch |  2 +-
+ .../nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S    | 38 ------------
+ .../sysdeps/unix/sysv/linux/i386/Makefile.arch     |  2 +-
+ .../nptl/sysdeps/unix/sysv/linux/i386/pt-vfork.S   | 68 ----------------------
+ .../sysdeps/unix/sysv/linux/mips/Makefile.arch     |  2 +-
+ .../nptl/sysdeps/unix/sysv/linux/mips/pt-vfork.S   | 38 ------------
+ .../sysdeps/unix/sysv/linux/powerpc/Makefile.arch  |  2 +-
+ .../unix/sysv/linux/powerpc/powerpc32/pt-vfork.S   | 49 ----------------
+ .../unix/sysv/linux/powerpc/powerpc64/pt-vfork.S   | 49 ----------------
+ .../sysdeps/unix/sysv/linux/powerpc/pt-vfork.S     |  5 --
+ .../nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch  |  2 +-
+ .../nptl/sysdeps/unix/sysv/linux/sh/pt-vfork.S     | 65 ---------------------
+ .../sysdeps/unix/sysv/linux/sparc/Makefile.arch    |  2 +-
+ .../nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S  |  5 --
+ .../unix/sysv/linux/sparc/sparc32/pt-vfork.S       | 45 --------------
+ .../unix/sysv/linux/sparc/sparc64/pt-vfork.S       | 45 --------------
+ .../sysdeps/unix/sysv/linux/x86_64/Makefile.arch   |  2 +-
+ .../nptl/sysdeps/unix/sysv/linux/x86_64/pt-vfork.S | 33 -----------
+ 19 files changed, 7 insertions(+), 490 deletions(-)
+ delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/alpha/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/i386/pt-vfork.S
+ delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-vfork.S
+ delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/pt-vfork.S
+ delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/pt-vfork.S
+ delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pt-vfork.S
+ delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-vfork.S
+ delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S
+ delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pt-vfork.S
+ delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S
+ delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pt-vfork.S
+
+diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/pt-vfork.S
+deleted file mode 100644
+index ec5d175..0000000
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/pt-vfork.S
++++ /dev/null
+@@ -1,43 +0,0 @@
+-/* Copyright (C) 2003, 2004 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, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#include <sysdep.h>
+-#include <tcb-offsets.h>
+-
+-#undef PSEUDO_PREPARE_ARGS
+-#define PSEUDO_PREPARE_ARGS                                           \
+-      /* Load the current cached pid value across the vfork.  */      \
+-      rduniq;                                                         \
+-      ldl     a2, PID_OFFSET(v0);                                     \
+-      mov     v0, a1;                                                 \
+-      /* Write back its negation, to indicate that the pid value is   \
+-         uninitialized in the the child, and in the window between    \
+-         here and the point at which we restore the value.  */        \
+-      negl    a2, t0;                                                 \
+-      stl     t0, PID_OFFSET(v0);
+-
+-PSEUDO (__vfork, vfork, 0)
+-
+-      /* If we're back in the parent, restore the saved pid.  */
+-      beq     v0, 1f
+-      stl     a2, PID_OFFSET(a1)
+-1:    ret
+-
+-PSEUDO_END (__vfork)
+-
+-weak_alias (__vfork, vfork)
+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
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch
+@@ -5,7 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+-libpthread_linux_arch_SSRC = pt-vfork.S
++libpthread_linux_arch_SSRC =
+ libpthread_linux_arch_CSRC = pthread_once.c \
+       pt-__syscall_rt_sigaction.c pt-__syscall_error.c \
+       lowlevellock.c
+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
+index 9764e9e..0000000
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/pt-vfork.S
++++ /dev/null
+@@ -1,38 +0,0 @@
+-/* Copyright (C) 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, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#include <tcb-offsets.h>
+-
+-/* Save the PID value.  */
+-#define SAVE_PID \
+-      str     lr, [sp, #-4]!;         /* Save LR.  */                 \
+-      mov     r0, #0xffff0fff;        /* Point to the high page.  */  \
+-      mov     lr, pc;                 /* Save our return address.  */ \
+-      sub     pc, r0, #31;            /* Jump to the TLS entry.  */   \
+-      ldr     lr, [sp], #4;           /* Restore LR.  */              \
+-      mov     r2, r0;                 /* Save the TLS addr in r2.  */ \
+-      ldr     r3, [r2, #PID_OFFSET];  /* Load the saved PID.  */      \
+-      rsb     r0, r3, #0;             /* Negate it.  */               \
+-      str     r0, [r2, #PID_OFFSET]   /* Store the temporary PID.  */
+-
+-/* Restore the old PID value in the parent.  */
+-#define RESTORE_PID \
+-      cmp     r0, #0;                 /* If we are the parent... */   \
+-      strne   r3, [r2, #PID_OFFSET]   /* ... restore the saved PID.  */
+-
+-#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
+index 9a34595..98e2ae7 100644
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch
++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch
+@@ -5,7 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+-libpthread_linux_arch_SSRC = pt-vfork.S clone.S pthread_spin_unlock.S pthread_once.S
++libpthread_linux_arch_SSRC = clone.S pthread_spin_unlock.S pthread_once.S
+ libpthread_linux_arch_CSRC = pthread_spin_init.c pt-__syscall_error.c
+ libc_linux_arch_CSRC = fork.c
+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
+index aff926a..0000000
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/pt-vfork.S
++++ /dev/null
+@@ -1,68 +0,0 @@
+-/* Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Andreas Schwab <schwab@gnu.org>.
+-
+-   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 <sysdep.h>
+-#define _ERRNO_H      1
+-#include <bits/errno.h>
+-#include <bits/kernel-features.h>
+-#include <tcb-offsets.h>
+-
+-/* Save the PID value.  */
+-#define SAVE_PID \
+-      movl    %gs:PID, %edx;                                                \
+-      movl    %edx, %eax;                                                   \
+-      negl    %eax;                                                         \
+-      movl    %eax, %gs:PID
+-
+-/* Restore the old PID value in the parent.  */
+-#define RESTORE_PID \
+-      testl   %eax, %eax;                                                   \
+-      je      1f;                                                           \
+-      movl    %edx, %gs:PID;                                                \
+-1:
+-
+-/* 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)
+-      /* Pop the return PC value into ECX.  */
+-      popl    %ecx
+-
+-      SAVE_PID
+-
+-      /* Stuff the syscall number in EAX and enter into the kernel.  */
+-      movl    $SYS_ify (vfork), %eax
+-      int     $0x80
+-
+-      RESTORE_PID
+-
+-      /* Jump to the return PC.  Don't jump directly since this
+-         disturbs the branch target cache.  Instead push the return
+-         address back on the stack.  */
+-      pushl   %ecx
+-
+-      cmpl    $-4095, %eax
+-      jae     SYSCALL_ERROR_LABEL     /* Branch forward if it failed.  */
+-L(pseudo_end):
+-      ret
+-PSEUDO_END (__vfork)
+-
+-weak_alias (__vfork, vfork)
+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
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch
++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch
+@@ -5,7 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+-libpthread_linux_arch_SSRC = pt-vfork.S clone.S
++libpthread_linux_arch_SSRC = clone.S
+ libpthread_linux_arch_CSRC = pthread_once.c pt-__syscall_rt_sigaction.c
+ libc_linux_arch_CSRC = fork.c
+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
+index c02ffca..0000000
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-vfork.S
++++ /dev/null
+@@ -1,38 +0,0 @@
+-/* Copyright (C) 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, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#include <features.h>
+-#include <tls.h>
+-
+-/* Save the PID value.  */
+-#define SAVE_PID \
+-      READ_THREAD_POINTER(v1);        /* Get the thread pointer.  */  \
+-      lw      a2, PID_OFFSET(v1);     /* Load the saved PID.  */      \
+-      subu    a2, $0, a2;             /* Negate it.  */               \
+-      sw      a2, PID_OFFSET(v1);     /* Store the temporary PID.  */
+-
+-/* Restore the old PID value in the parent.  */
+-#define RESTORE_PID \
+-      beqz    v0, 1f;                 /* If we are the parent... */   \
+-      READ_THREAD_POINTER(v1);        /* Get the thread pointer.  */  \
+-      lw      a2, PID_OFFSET(v1);     /* Load the saved PID.  */      \
+-      subu    a2, $0, a2;             /* Re-negate it.  */            \
+-      sw      a2, PID_OFFSET(v1);     /* Restore the PID.  */         \
+-1:
+-
+-#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
+index 8581aea..0aa285e 100644
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch
++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch
+@@ -5,7 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+-libpthread_linux_arch_SSRC = pt-vfork.S
++libpthread_linux_arch_SSRC =
+ libpthread_linux_arch_CSRC = pthread_once.c pt-__syscall_error.c
+ libc_linux_arch_CSRC = fork.c
+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
+index 61651fd..0000000
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/pt-vfork.S
++++ /dev/null
+@@ -1,49 +0,0 @@
+-/* Copyright (C) 2004 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
+-
+-   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 <sysdep.h>
+-#define _ERRNO_H      1
+-#include <bits/errno.h>
+-#include <bits/kernel-features.h>
+-#include <tcb-offsets.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)
+-      lwz     0,PID(2)
+-      neg     0,0
+-      stw     0,PID(2)
+-
+-      DO_CALL (SYS_ify (vfork))
+-
+-      cmpwi   1,3,0
+-      beqlr-  1
+-
+-      lwz     0,PID(2)
+-      neg     0,0
+-      stw     0,PID(2)
+-
+-      PSEUDO_RET
+-
+-PSEUDO_END (__vfork)
+-
+-weak_alias (__vfork, vfork)
+diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/pt-vfork.S
+deleted file mode 100644
+index e5b7b53..0000000
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/pt-vfork.S
++++ /dev/null
+@@ -1,49 +0,0 @@
+-/* Copyright (C) 2004 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
+-
+-   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 <sysdep.h>
+-#define _ERRNO_H      1
+-#include <bits/errno.h>
+-#include <bits/kernel-features.h>
+-#include <tcb-offsets.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)
+-      lwz     0,PID(13)
+-      neg     0,0
+-      stw     0,PID(13)
+-
+-      DO_CALL (SYS_ify (vfork))
+-
+-      cmpwi   1,3,0
+-      beqlr-  1
+-
+-      lwz     0,PID(13)
+-      neg     0,0
+-      stw     0,PID(13)
+-
+-      PSEUDO_RET
+-
+-PSEUDO_END (__vfork)
+-
+-weak_alias (__vfork, vfork)
+diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pt-vfork.S
+deleted file mode 100644
+index 0225219..0000000
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/pt-vfork.S
++++ /dev/null
+@@ -1,5 +0,0 @@
+-#if defined __powerpc64__
+-# include "powerpc64/pt-vfork.S"
+-#else
+-# include "powerpc32/pt-vfork.S"
+-#endif
+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
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch
++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch
+@@ -5,7 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+-libpthread_linux_arch_SSRC = pt-vfork.S pthread_once.S pthread_rwlock_wrlock.S \
++libpthread_linux_arch_SSRC = pthread_once.S pthread_rwlock_wrlock.S \
+                       pthread_rwlock_rdlock.S pthread_rwlock_unlock.S \
+                       lowlevellock.S lowlevelrobustlock.S pthread_barrier_wait.S \
+                       pthread_cond_broadcast.S pthread_cond_signal.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
+index 54f2281..0000000
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/pt-vfork.S
++++ /dev/null
+@@ -1,65 +0,0 @@
+-/* Copyright (C) 2003, 2004 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, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#include <sysdep.h>
+-#define _ERRNO_H      1
+-#include <bits/errno.h>
+-#include <tcb-offsets.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)
+-      /* Save the PID value.  */
+-      stc     gbr, r2
+-      mov.w   .L2, r0
+-      mov.l   @(r0,r2), r4
+-      neg     r4, r1
+-      mov.l   r1, @(r0,r2)
+-
+-      mov.w   .L1, r3
+-      trapa   #0x10
+-      mov     r0, r1
+-
+-      /* Restore the old PID value in the parent.  */
+-      tst     r0, r0
+-      bt/s    2f
+-       stc    gbr, r2
+-      mov.w   .L2, r0
+-      mov.l   r4, @(r0,r2)
+-      mov     r1, r0
+-2:
+-      mov     #-12, r2
+-      shad    r2, r1
+-      not     r1, r1                  // r1=0 means r0 = -1 to -4095
+-      tst     r1, r1                  // i.e. error in linux
+-      bf      .Lpseudo_end
+-      SYSCALL_ERROR_HANDLER
+-.Lpseudo_end:
+-      rts
+-       nop
+-.L1:
+-      .word   __NR_vfork
+-.L2:
+-      .word   PID - TLS_PRE_TCB_SIZE
+-
+-PSEUDO_END (__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
+index 102c0da..8329885 100644
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch
++++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch
+@@ -5,7 +5,7 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+-libpthread_linux_arch_SSRC = pt-vfork.S clone.S
++libpthread_linux_arch_SSRC = clone.S
+ libpthread_linux_arch_CSRC = pthread_once.c lowlevellock.c \
+       pthread_barrier_init.c pthread_barrier_wait.c pthread_barrier_destroy.c \
+       pt-__syscall_error.c
+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
+index e8705c5..0000000
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-vfork.S
++++ /dev/null
+@@ -1,5 +0,0 @@
+-#if defined(__arch64__)
+-#include "sparc64/pt-vfork.S"
+-#else
+-#include "sparc32/pt-vfork.S"
+-#endif
+diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pt-vfork.S
+deleted file mode 100644
+index fb01242..0000000
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pt-vfork.S
++++ /dev/null
+@@ -1,45 +0,0 @@
+-/* Copyright (C) 2004 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
+-
+-   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 <sysdep.h>
+-#include <tcb-offsets.h>
+-
+-      .text
+-      .globl          __syscall_error
+-ENTRY(__vfork)
+-      ld      [%g7 + PID], %o5
+-      sub     %g0, %o5, %o4
+-      st      %o4, [%g7 + PID]
+-
+-      LOADSYSCALL(vfork)
+-      ta      0x10
+-      bcc     2f
+-       mov    %o7, %g1
+-      st      %o5, [%g7 + PID]
+-      call    __syscall_error
+-       mov    %g1, %o7
+-2:    sub     %o1, 1, %o1
+-      andcc   %o0, %o1, %o0
+-      bne,a   1f
+-       st     %o5, [%g7 + PID]
+-1:    retl
+-       nop
+-END(__vfork)
+-
+-weak_alias (__vfork, vfork)
+diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S
+deleted file mode 100644
+index 8941043..0000000
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/sparc64/pt-vfork.S
++++ /dev/null
+@@ -1,45 +0,0 @@
+-/* Copyright (C) 2004 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2004.
+-
+-   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 <sysdep.h>
+-#include <tcb-offsets.h>
+-
+-      .text
+-      .globl  __syscall_error
+-ENTRY(__vfork)
+-      ld      [%g7 + PID], %o5
+-      sub     %g0, %o5, %o4
+-      st      %o4, [%g7 + PID]
+-
+-      LOADSYSCALL(vfork)
+-      ta      0x6d
+-      bcc,pt  %xcc, 2f
+-       mov    %o7, %g1
+-      st      %o5, [%g7 + PID]
+-      call    __syscall_error
+-       mov    %g1, %o7
+-2:    sub     %o1, 1, %o1
+-      andcc   %o0, %o1, %o0
+-      bne,a,pt %icc, 1f
+-       st     %o5, [%g7 + PID]
+-1:    retl
+-       nop
+-END(__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
+index 71df986..10fa3cf 100644
+--- a/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 @@
+ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ #
+-libpthread_linux_arch_SSRC = pt-vfork.S clone.S pthread_once.S \
++libpthread_linux_arch_SSRC = clone.S pthread_once.S \
+       lowlevellock.S pthread_barrier_wait.S pthread_cond_signal.S pthread_cond_broadcast.S \
+       sem_post.S sem_timedwait.S lowlevelrobustlock.S \
+       sem_trywait.S sem_wait.S pthread_rwlock_rdlock.S pthread_rwlock_wrlock.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
+index df49496..0000000
+--- a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pt-vfork.S
++++ /dev/null
+@@ -1,33 +0,0 @@
+-/* Copyright (C) 2004 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, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#include <tcb-offsets.h>
+-
+-#define SAVE_PID \
+-      movl    %fs:PID, %esi;                                                \
+-      movl    %esi, %edx;                                                   \
+-      negl    %edx;                                                         \
+-      movl    %edx, %fs:PID
+-
+-#define RESTORE_PID \
+-      testq   %rax, %rax;                                                   \
+-      je      1f;                                                           \
+-      movl    %esi, %fs:PID;                                                \
+-1:
+-
+-#include <../../../../../../../libc/sysdeps/linux/x86_64/vfork.S>
+-- 
+1.8.5.2 (Apple Git-48)
+