struct rt_sigframe
{
- struct siginfo *pinfo;
- void *puc;
struct siginfo info;
struct ucontext uc;
unsigned long tramp[2]; /* signal trampoline */
if (err)
goto give_sigsegv;
- /* Set up registers for signal handler */
- regs->gpr[GPR_SP] = (unsigned long) frame;
- regs->gpr[GPR_ARG0] = signal; /* Arg for signal handler */
- regs->pc = (unsigned long) ka->sa.sa_handler;
+ /* Set up registers for signal handler. */
+ regs->pc = (v850_reg_t) ka->sa.sa_handler;
+ regs->gpr[GPR_SP] = (v850_reg_t)frame;
+ /* Signal handler args: */
+ regs->gpr[GPR_ARG0] = signal; /* arg 0: signum */
+ regs->gpr[GPR_ARG1] = (v850_reg_t)&frame->sc;/* arg 1: sigcontext */
set_fs(USER_DS);
? current_thread_info()->exec_domain->signal_invmap[sig]
: sig;
- err |= __put_user(&frame->info, &frame->pinfo);
- err |= __put_user(&frame->uc, &frame->puc);
err |= copy_siginfo_to_user(&frame->info, info);
/* Create the ucontext. */
if (err)
goto give_sigsegv;
- /* Set up registers for signal handler */
- regs->gpr[GPR_SP] = (unsigned long) frame;
- regs->gpr[GPR_ARG0] = signal; /* Arg for signal handler */
- regs->pc = (unsigned long) ka->sa.sa_handler;
+ /* Set up registers for signal handler. */
+ regs->pc = (v850_reg_t) ka->sa.sa_handler;
+ regs->gpr[GPR_SP] = (v850_reg_t)frame;
+ /* Signal handler args: */
+ regs->gpr[GPR_ARG0] = signal; /* arg 0: signum */
+ regs->gpr[GPR_ARG1] = (v850_reg_t)&frame->info; /* arg 1: siginfo */
+ regs->gpr[GPR_ARG2] = (v850_reg_t)&frame->uc; /* arg 2: ucontext */
set_fs(USER_DS);