diff options
author | Ulrich Drepper <drepper@gmail.com> | 2012-01-07 11:19:05 -0500 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2012-01-07 11:19:05 -0500 |
commit | d75a0a62b12c35ee85f786d5f8d155ab39909411 (patch) | |
tree | c3479d23878ef4ab05629d4a60f4f7623269c1dd /sysdeps/unix/sysv/linux/ia64/clone2.S | |
parent | dcc9756b5bfbb2b97f73bad863d7e1c4002bea98 (diff) | |
download | glibc-d75a0a62b12c35ee85f786d5f8d155ab39909411.tar.gz glibc-d75a0a62b12c35ee85f786d5f8d155ab39909411.tar.xz glibc-d75a0a62b12c35ee85f786d5f8d155ab39909411.zip |
Remove IA-64 support
Diffstat (limited to 'sysdeps/unix/sysv/linux/ia64/clone2.S')
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/clone2.S | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/sysdeps/unix/sysv/linux/ia64/clone2.S b/sysdeps/unix/sysv/linux/ia64/clone2.S deleted file mode 100644 index d38eb201ad..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/clone2.S +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright (C) 2000, 2001, 2003, 2004, 2006 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 <asm/errno.h> - - -/* int __clone2(int (*fn) (void *arg), void *child_stack_base, */ -/* size_t child_stack_size, int flags, void *arg, */ -/* pid_t *parent_tid, void *tls, pid_t *child_tid) */ - -#define CHILD p8 -#define PARENT p9 - -ENTRY(__clone2) - .prologue - alloc r2=ar.pfs,8,1,6,0 - cmp.eq p6,p0=0,in0 - cmp.eq p7,p0=0,in1 - mov r8=EINVAL - mov out0=in3 /* Flags are first syscall argument. */ - mov out1=in1 /* Stack address. */ -(p6) br.cond.spnt.many __syscall_error /* no NULL function pointers */ -(p7) br.cond.spnt.many __syscall_error /* no NULL stack pointers */ - ;; - mov out2=in2 /* Stack size. */ - mov out3=in5 /* Parent TID Pointer */ - mov out4=in7 /* Child TID Pointer */ - mov out5=in6 /* TLS pointer */ - /* - * clone2() is special: the child cannot execute br.ret right - * after the system call returns, because it starts out - * executing on an empty stack. Because of this, we can't use - * the new (lightweight) syscall convention here. Instead, we - * just fall back on always using "break". - * - * Furthermore, since the child starts with an empty stack, we - * need to avoid unwinding past invalid memory. To that end, - * we'll pretend now that __clone2() is the end of the - * call-chain. This is wrong for the parent, but only until - * it returns from clone2() but it's better than the - * alternative. - */ - mov r15=SYS_ify (clone2) - .save rp, r0 - break __BREAK_SYSCALL - .body - cmp.eq p6,p0=-1,r10 - cmp.eq CHILD,PARENT=0,r8 /* Are we the child? */ -(p6) br.cond.spnt.many __syscall_error - ;; -(CHILD) mov loc0=gp -(PARENT) ret - ;; -#ifdef RESET_PID - 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 - ;; -#endif -1: 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 gp=loc0 - .globl HIDDEN_JUMPTARGET(_exit) - br.call.dpnt.many rp=HIDDEN_JUMPTARGET(_exit) - /* call _exit with result from fn. */ - ret /* Not reached. */ -PSEUDO_END(__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). */ -/* Thus all such calls needed to pass an explicit sp, and as a result, */ -/* would be unlikely to work on ia64. */ |