int abi_sigsuspend(struct pt_regs * regs) { unsigned long * set; unsigned long oldset; old_sigset_t newset; int error; if (personality(PER_BSD)) { oldset = get_syscall_parameter (regs, 0); } else { set = (unsigned long *)get_syscall_parameter (regs, 0); error = get_user(oldset, set); if (error) return error; } newset = map_bitvec(oldset, current->exec_domain->signal_map); #ifdef CONFIG_ABI_TRACE if ((ibcs_trace & TRACE_SIGNAL) || ibcs_func_p->trace) printk("iBCS: sigsuspend oldset, newset = %lx %lx\n", oldset, newset); #endif { #if 0 extern do_sigpause(unsigned int, struct pt_regs *); return do_sigpause(newset, regs); #endif } return SYS(sigsuspend)(0, oldset, newset, regs->esi, regs->edi, regs->ebp, regs->eax, regs->xds, regs->xes, regs->orig_eax, regs->eip, regs->xcs, regs->eflags, regs->esp, regs->xss); }
int abi_sigsuspend(struct pt_regs *regs) { u_long abi_mask, *abi_maskp; old_sigset_t mask; int err; abi_maskp = (u_long *)SIGNAL_NUMBER(regs); if (get_user(abi_mask, abi_maskp)) return -EFAULT; mask = map_bitvec(abi_mask, current_thread_info()->exec_domain->signal_map); #if defined(CONFIG_ABI_TRACE) abi_trace(ABI_TRACE_SIGNAL, "sigsuspend(mask = %lx)\n", mask); #endif #ifdef CONFIG_65BIT err = 0; #else err = SYS(sigsuspend,0, current->blocked.sig[0], mask); #endif return err; }