Lines Matching refs:regs
90 struct pt_regs *regs) in save_sigcontext_fpu() argument
108 unlazy_fpu(tsk, regs); in save_sigcontext_fpu()
115 restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *r0_p) in restore_sigcontext() argument
118 unsigned int sr = regs->sr & ~SR_USER_MASK; in restore_sigcontext()
120 #define COPY(x) err |= __get_user(regs->x, &sc->sc_##x) in restore_sigcontext()
121 COPY(regs[1]); in restore_sigcontext()
122 COPY(regs[2]); COPY(regs[3]); in restore_sigcontext()
123 COPY(regs[4]); COPY(regs[5]); in restore_sigcontext()
124 COPY(regs[6]); COPY(regs[7]); in restore_sigcontext()
125 COPY(regs[8]); COPY(regs[9]); in restore_sigcontext()
126 COPY(regs[10]); COPY(regs[11]); in restore_sigcontext()
127 COPY(regs[12]); COPY(regs[13]); in restore_sigcontext()
128 COPY(regs[14]); COPY(regs[15]); in restore_sigcontext()
134 regs->sr = (regs->sr & SR_USER_MASK) | sr; in restore_sigcontext()
141 regs->sr |= SR_FD; /* Release FPU */ in restore_sigcontext()
142 clear_fpu(tsk, regs); in restore_sigcontext()
150 regs->tra = -1; /* disable syscall checks */ in restore_sigcontext()
157 struct pt_regs *regs = current_pt_regs(); in sys_sigreturn() local
158 struct sigframe __user *frame = (struct sigframe __user *)regs->regs[15]; in sys_sigreturn()
176 if (restore_sigcontext(regs, &frame->sc, &r0)) in sys_sigreturn()
187 struct pt_regs *regs = current_pt_regs(); in sys_rt_sigreturn() local
188 struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs->regs[15]; in sys_rt_sigreturn()
203 if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0)) in sys_rt_sigreturn()
221 setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, in setup_sigcontext() argument
226 #define COPY(x) err |= __put_user(regs->x, &sc->sc_##x) in setup_sigcontext()
227 COPY(regs[0]); COPY(regs[1]); in setup_sigcontext()
228 COPY(regs[2]); COPY(regs[3]); in setup_sigcontext()
229 COPY(regs[4]); COPY(regs[5]); in setup_sigcontext()
230 COPY(regs[6]); COPY(regs[7]); in setup_sigcontext()
231 COPY(regs[8]); COPY(regs[9]); in setup_sigcontext()
232 COPY(regs[10]); COPY(regs[11]); in setup_sigcontext()
233 COPY(regs[12]); COPY(regs[13]); in setup_sigcontext()
234 COPY(regs[14]); COPY(regs[15]); in setup_sigcontext()
241 err |= save_sigcontext_fpu(sc, regs); in setup_sigcontext()
270 struct pt_regs *regs) in setup_frame() argument
275 frame = get_sigframe(&ksig->ka, regs->regs[15], sizeof(*frame)); in setup_frame()
280 err |= setup_sigcontext(&frame->sc, regs, set->sig[0]); in setup_frame()
289 regs->pr = (unsigned long) ksig->ka.sa.sa_restorer; in setup_frame()
292 regs->pr = VDSO_SYM(&__kernel_sigreturn); in setup_frame()
304 regs->pr = (unsigned long) frame->retcode; in setup_frame()
305 flush_icache_range(regs->pr, regs->pr + sizeof(frame->retcode)); in setup_frame()
312 regs->regs[15] = (unsigned long) frame; in setup_frame()
313 regs->regs[4] = sig; /* Arg for signal handler */ in setup_frame()
314 regs->regs[5] = 0; in setup_frame()
315 regs->regs[6] = (unsigned long) &frame->sc; in setup_frame()
321 err |= __get_user(regs->pc, &funcptr->text); in setup_frame()
322 err |= __get_user(regs->regs[12], &funcptr->GOT); in setup_frame()
324 regs->pc = (unsigned long)ksig->ka.sa.sa_handler; in setup_frame()
330 current->comm, task_pid_nr(current), frame, regs->pc, regs->pr); in setup_frame()
336 struct pt_regs *regs) in setup_rt_frame() argument
341 frame = get_sigframe(&ksig->ka, regs->regs[15], sizeof(*frame)); in setup_rt_frame()
351 err |= __save_altstack(&frame->uc.uc_stack, regs->regs[15]); in setup_rt_frame()
353 regs, set->sig[0]); in setup_rt_frame()
359 regs->pr = (unsigned long) ksig->ka.sa.sa_restorer; in setup_rt_frame()
362 regs->pr = VDSO_SYM(&__kernel_rt_sigreturn); in setup_rt_frame()
374 regs->pr = (unsigned long) frame->retcode; in setup_rt_frame()
375 flush_icache_range(regs->pr, regs->pr + sizeof(frame->retcode)); in setup_rt_frame()
382 regs->regs[15] = (unsigned long) frame; in setup_rt_frame()
383 regs->regs[4] = sig; /* Arg for signal handler */ in setup_rt_frame()
384 regs->regs[5] = (unsigned long) &frame->info; in setup_rt_frame()
385 regs->regs[6] = (unsigned long) &frame->uc; in setup_rt_frame()
391 err |= __get_user(regs->pc, &funcptr->text); in setup_rt_frame()
392 err |= __get_user(regs->regs[12], &funcptr->GOT); in setup_rt_frame()
394 regs->pc = (unsigned long)ksig->ka.sa.sa_handler; in setup_rt_frame()
400 current->comm, task_pid_nr(current), frame, regs->pc, regs->pr); in setup_rt_frame()
406 handle_syscall_restart(unsigned long save_r0, struct pt_regs *regs, in handle_syscall_restart() argument
410 if (regs->tra < 0) in handle_syscall_restart()
414 switch (regs->regs[0]) { in handle_syscall_restart()
418 regs->regs[0] = -EINTR; in handle_syscall_restart()
426 regs->regs[0] = save_r0; in handle_syscall_restart()
427 regs->pc -= instruction_size(__raw_readw(regs->pc - 4)); in handle_syscall_restart()
436 handle_signal(struct ksignal *ksig, struct pt_regs *regs, unsigned int save_r0) in handle_signal() argument
443 ret = setup_rt_frame(ksig, oldset, regs); in handle_signal()
445 ret = setup_frame(ksig, oldset, regs); in handle_signal()
459 static void do_signal(struct pt_regs *regs, unsigned int save_r0) in do_signal() argument
469 if (!user_mode(regs)) in do_signal()
473 handle_syscall_restart(save_r0, regs, &ksig.ka.sa); in do_signal()
476 handle_signal(&ksig, regs, save_r0); in do_signal()
481 if (regs->tra >= 0) { in do_signal()
483 if (regs->regs[0] == -ERESTARTNOHAND || in do_signal()
484 regs->regs[0] == -ERESTARTSYS || in do_signal()
485 regs->regs[0] == -ERESTARTNOINTR) { in do_signal()
486 regs->regs[0] = save_r0; in do_signal()
487 regs->pc -= instruction_size(__raw_readw(regs->pc - 4)); in do_signal()
488 } else if (regs->regs[0] == -ERESTART_RESTARTBLOCK) { in do_signal()
489 regs->pc -= instruction_size(__raw_readw(regs->pc - 4)); in do_signal()
490 regs->regs[3] = __NR_restart_syscall; in do_signal()
501 asmlinkage void do_notify_resume(struct pt_regs *regs, unsigned int save_r0, in do_notify_resume() argument
506 do_signal(regs, save_r0); in do_notify_resume()
509 resume_user_mode_work(regs); in do_notify_resume()