diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/ia64/clone2.S')
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/clone2.S | 28 |
1 files changed, 8 insertions, 20 deletions
diff --git a/sysdeps/unix/sysv/linux/ia64/clone2.S b/sysdeps/unix/sysv/linux/ia64/clone2.S index 9b257b3c9b..b381817dfa 100644 --- a/sysdeps/unix/sysv/linux/ia64/clone2.S +++ b/sysdeps/unix/sysv/linux/ia64/clone2.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2000-2016 Free Software Foundation, Inc. +/* Copyright (C) 2000-2018 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 @@ -67,35 +67,23 @@ ENTRY(__clone2) (CHILD) mov loc0=gp (PARENT) ret ;; - tbit.nz p6,p0=in3,16 /* CLONE_THREAD */ - tbit.z p7,p10=in3,8 /* CLONE_VM */ -(p6) br.cond.dptk 1f - ;; - mov r15=SYS_ify (getpid) -(p10) addl r8=-1,r0 -(p7) break __BREAK_SYSCALL - ;; - add r9=PID,r13 - add r10=TID,r13 - ;; - st4 [r9]=r8 - st4 [r10]=r8 - ;; -1: ld8 out1=[in0],8 /* Retrieve code pointer. */ + ld8 out1=[in0],8 /* Retrieve code pointer. */ mov out0=in4 /* Pass proper argument to fn */ ;; ld8 gp=[in0] /* Load function gp. */ mov b6=out1 br.call.dptk.many rp=b6 /* Call fn(arg) in the child */ ;; - mov out0=r8 /* Argument to _exit */ + mov out0=r8 /* Argument to exit */ mov gp=loc0 - .globl HIDDEN_JUMPTARGET(_exit) - br.call.dpnt.many rp=HIDDEN_JUMPTARGET(_exit) - /* call _exit with result from fn. */ + mov r15=SYS_ify (exit) + .save rp, r0 + break __BREAK_SYSCALL ret /* Not reached. */ PSEUDO_END(__clone2) +libc_hidden_def (__clone2) + /* For now we leave __clone undefined. This is unlikely to be a */ /* problem, since at least the i386 __clone in glibc always failed */ /* with a 0 sp (eventhough the kernel explicitly handled it). */ |