1 #include <asm/rse.h> 2 3 /* Return -1 on error or 1 on success (never 0!). */ 4 static int get_syscall_args(struct tcb * tcp)5get_syscall_args(struct tcb *tcp) 6 { 7 unsigned long *rbs_end = 8 (unsigned long *) ia64_regs.ar[PT_AUR_BSP]; 9 unsigned long sof = (ia64_regs.cfm >> 0) & 0x7f; 10 unsigned long sol = (ia64_regs.cfm >> 7) & 0x7f; 11 unsigned long *out0 = ia64_rse_skip_regs(rbs_end, -sof + sol); 12 unsigned int i; 13 14 for (i = 0; i < tcp->s_ent->nargs; ++i) { 15 if (umove(tcp, 16 (unsigned long) ia64_rse_skip_regs(out0, i), 17 &tcp->u_arg[i]) < 0) { 18 if (errno == EPERM) 19 tcp->u_arg[i] = 0; 20 else 21 return -1; 22 } 23 } 24 25 return 1; 26 } 27