From 9c925ff964bf221207dd6727d468ee964e2725fd Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Thu, 3 Jul 2014 22:09:33 -0700 Subject: IA64: Consolidate NPTL/non versions of vfork --- sysdeps/unix/sysv/linux/ia64/vfork.S | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) (limited to 'sysdeps/unix/sysv/linux/ia64/vfork.S') 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 #define _SIGNAL_H #include +#include /* 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) -- cgit 1.4.1