/* * ia64 specific vfork syscall * * Written By: Martin Hicks * */ /* This syscall is a special case of the clone syscall */ #include #include #include /* These are redefined here because linux/sched.h isn't safe for * inclusion in asm. */ #define CLONE_VM 0x00000100 /* set if VM shared between processes */ #define CLONE_VFORK 0x00004000 /* set if parent wants the child to wake it up on exit */ /* pid_t vfork(void) */ /* Implemented as clone(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) */ .align 32 .proc vfork .global vfork vfork: alloc r2=ar.pfs,0,0,2,0 mov r15=__NR_clone mov out0=CLONE_VM|CLONE_VFORK|SIGCHLD mov out1=0 ;; break 0x100000 // Do the syscall ;; addl r15=0,r1 cmp.eq p7,p6 = -1,r10 ;; ld8 r14=[r15] ;; (p7) st4 [r14]=r8 ;; (p7) mov r8=-1 br.ret.sptk.many b0 .endp vfork