Esempio n. 1
0
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);
}
Esempio n. 2
0
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;
}