From: Waldemar Brodkorb <wbx@openadk.org>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH] uclibc: fix duplicate vfork problems when static linking
Date: Mon, 1 Sep 2014 22:06:06 +0200 [thread overview]
Message-ID: <20140901200606.GA14078@waldemar-brodkorb.de> (raw)
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>
---
...nptl-remove-duplicate-vfork-in-libpthread.patch | 691 ++++++++++++++++++++
1 file changed, 691 insertions(+)
create mode 100644 package/uclibc/0.9.33.2/uclibc-0062-nptl-remove-duplicate-vfork-in-libpthread.patch
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
index 0000000..4ab737f
--- /dev/null
+++ b/package/uclibc/0.9.33.2/uclibc-0062-nptl-remove-duplicate-vfork-in-libpthread.patch
@@ -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)
+
--
1.7.10.4
next reply other threads:[~2014-09-01 20:06 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-01 20:06 Waldemar Brodkorb [this message]
2014-09-07 9:07 ` [Buildroot] [PATCH] uclibc: fix duplicate vfork problems when static linking Thomas Petazzoni
2014-09-14 20:59 ` Peter Korsgaard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140901200606.GA14078@waldemar-brodkorb.de \
--to=wbx@openadk.org \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.