diff options
author | Roland McGrath <roland@hack.frob.com> | 2014-07-03 22:09:33 -0700 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2014-08-04 09:50:41 -0400 |
commit | 9c925ff964bf221207dd6727d468ee964e2725fd (patch) | |
tree | 19bbbf928807cbfbb80cbbfd9ce647d487b29ad5 /sysdeps/unix/sysv/linux | |
parent | e641054cd8a362a904b6ca898ef00e64ce42df29 (diff) | |
download | glibc-9c925ff964bf221207dd6727d468ee964e2725fd.tar.gz glibc-9c925ff964bf221207dd6727d468ee964e2725fd.tar.xz glibc-9c925ff964bf221207dd6727d468ee964e2725fd.zip |
IA64: Consolidate NPTL/non versions of vfork
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/nptl/pt-vfork.S | 59 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/nptl/vfork.S | 68 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/pt-vfork.S | 48 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/vfork.S | 35 |
4 files changed, 79 insertions, 131 deletions
diff --git a/sysdeps/unix/sysv/linux/ia64/nptl/pt-vfork.S b/sysdeps/unix/sysv/linux/ia64/nptl/pt-vfork.S deleted file mode 100644 index 59b5b7a704..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/nptl/pt-vfork.S +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2000-2014 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/>. */ - - -#include <sysdep.h> -#define _SIGNAL_H -#include <bits/signum.h> -#include <tcb-offsets.h> - -/* The following are defined in linux/sched.h, which unfortunately */ -/* is not safe for inclusion in an assembly file. */ -#define CLONE_VM 0x00000100 /* set if VM shared between processes */ -#define CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */ - -/* pid_t vfork(void); */ -/* Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */ - -ENTRY(__vfork) - .prologue // work around a GAS bug which triggers if - .body // first .prologue is not at the beginning of proc. - alloc r2=ar.pfs,0,0,2,0 - adds r14=PID,r13 - ;; - ld4 r16=[r14] - ;; - sub r15=0,r16 - mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD - mov out1=0 /* Standard sp value. */ - ;; - st4 [r14]=r15 - DO_CALL (SYS_ify (clone)) - cmp.eq p0,p7=0,r8 - adds r14=PID,r13 - ;; -(p7) ld4 r16=[r14] - cmp.eq p6,p0=-1,r10 - ;; -(p7) sub r15=0,r16 - ;; -(p7) st4 [r14]=r15 -(p6) br.cond.spnt.few __syscall_error - ret -PSEUDO_END(__vfork) - -weak_alias (__vfork, vfork) diff --git a/sysdeps/unix/sysv/linux/ia64/nptl/vfork.S b/sysdeps/unix/sysv/linux/ia64/nptl/vfork.S deleted file mode 100644 index f1ca305554..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/nptl/vfork.S +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (C) 2000-2014 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/>. */ - - -#include <sysdep.h> -#define _SIGNAL_H -#include <bits/signum.h> -#include <tcb-offsets.h> - -/* The following are defined in linux/sched.h, which unfortunately */ -/* is not safe for inclusion in an assembly file. */ -#define CLONE_VM 0x00000100 /* set if VM shared between processes */ -#define CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */ - -/* pid_t vfork(void); */ -/* Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */ - -ENTRY(__vfork) - .prologue // work around a GAS bug which triggers if - .body // first .prologue is not at the beginning of proc. - alloc r2=ar.pfs,0,0,2,0 - adds r14=PID,r13 - ;; - ld4 r16=[r14] - ;; - sub r15=0,r16 - cmp.eq p6,p0=0,r16 - ;; -(p6) movl r15=0x80000000 - mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD - mov out1=0 /* Standard sp value. */ - ;; - st4 [r14]=r15 - DO_CALL (SYS_ify (clone)) - cmp.eq p6,p0=0,r8 - adds r14=PID,r13 -(p6) br.cond.dptk 1f - ;; - ld4 r15=[r14] - ;; - extr.u r16=r15,0,31 - ;; - cmp.eq p0,p6=0,r16 - ;; -(p6) sub r16=0,r15 - ;; - st4 [r14]=r16 -1: - cmp.eq p6,p0=-1,r10 -(p6) br.cond.spnt.few __syscall_error - ret -PSEUDO_END(__vfork) -libc_hidden_def (__vfork) -weak_alias (__vfork, vfork) diff --git a/sysdeps/unix/sysv/linux/ia64/pt-vfork.S b/sysdeps/unix/sysv/linux/ia64/pt-vfork.S new file mode 100644 index 0000000000..05f68af21f --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/pt-vfork.S @@ -0,0 +1,48 @@ +/* vfork ABI-compatibility entry points for libpthread. IA64 version. + Copyright (C) 2014 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/>. */ + +#include <sysdep.h> +#include <shlib-compat.h> + +/* libpthread used to have its own vfork implementation that differed + from libc's only in having a pointless micro-optimization. There + is no longer any use to having a separate copy in libpthread, but + the historical ABI requires it. For static linking, there is no + need to provide anything here--the libc version will be linked in. + For shared library ABI compatibility, there must be __vfork and + vfork symbols in libpthread.so. */ + +#if (SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_20) \ + || SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_20)) + +LOCAL_LEAF (vfork_compat) + br __libc_vfork + ;; +END (vfork_compat) + +#endif + +#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_20) +weak_alias (vfork_compat, vfork) +compat_symbol (libpthread, vfork_compat, vfork, GLIBC_2_0); +#endif + +#if SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_20) +strong_alias (vfork_compat, __vfork_compat) +compat_symbol (libpthread, __vfork_compat, __vfork, GLIBC_2_1_2); +#endif diff --git a/sysdeps/unix/sysv/linux/ia64/vfork.S b/sysdeps/unix/sysv/linux/ia64/vfork.S index 0422104b45..ff2d22b902 100644 --- a/sysdeps/unix/sysv/linux/ia64/vfork.S +++ b/sysdeps/unix/sysv/linux/ia64/vfork.S @@ -19,6 +19,7 @@ #include <sysdep.h> #define _SIGNAL_H #include <bits/signum.h> +#include <tcb-offsets.h> /* The following are defined in linux/sched.h, which unfortunately */ /* is not safe for inclusion in an assembly file. */ @@ -28,16 +29,42 @@ /* pid_t vfork(void); */ /* Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */ -ENTRY(__vfork) +ENTRY (__libc_vfork) + .prologue // work around a GAS bug which triggers if + .body // first .prologue is not at the beginning of proc. alloc r2=ar.pfs,0,0,2,0 + adds r14=PID,r13 + ;; + ld4 r16=[r14] + ;; + sub r15=0,r16 + cmp.eq p6,p0=0,r16 + ;; +(p6) movl r15=0x80000000 mov out0=CLONE_VM+CLONE_VFORK+SIGCHLD mov out1=0 /* Standard sp value. */ ;; - DO_CALL_VIA_BREAK (SYS_ify (clone)) + st4 [r14]=r15 + DO_CALL (SYS_ify (clone)) + cmp.eq p6,p0=0,r8 + adds r14=PID,r13 +(p6) br.cond.dptk 1f + ;; + ld4 r15=[r14] + ;; + extr.u r16=r15,0,31 + ;; + cmp.eq p0,p6=0,r16 + ;; +(p6) sub r16=0,r15 + ;; + st4 [r14]=r16 +1: cmp.eq p6,p0=-1,r10 (p6) br.cond.spnt.few __syscall_error ret -PSEUDO_END(__vfork) -libc_hidden_def (__vfork) +PSEUDO_END (__libc_vfork) +strong_alias (__libc_vfork, __vfork) +libc_hidden_def (__vfork) weak_alias (__vfork, vfork) |