Lines Matching full: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
119 #define COPY(x) err |= __get_user(regs->x, &sc->sc_##x) in restore_sigcontext()
120 COPY(regs[1]); in restore_sigcontext()
121 COPY(regs[2]); COPY(regs[3]); in restore_sigcontext()
122 COPY(regs[4]); COPY(regs[5]); in restore_sigcontext()
123 COPY(regs[6]); COPY(regs[7]); in restore_sigcontext()
124 COPY(regs[8]); COPY(regs[9]); in restore_sigcontext()
125 COPY(regs[10]); COPY(regs[11]); in restore_sigcontext()
126 COPY(regs[12]); COPY(regs[13]); in restore_sigcontext()
127 COPY(regs[14]); COPY(regs[15]); in restore_sigcontext()
138 regs->sr |= SR_FD; /* Release FPU */ in restore_sigcontext()
139 clear_fpu(tsk, regs); in restore_sigcontext()
147 regs->tra = -1; /* disable syscall checks */ in restore_sigcontext()
154 struct pt_regs *regs = current_pt_regs(); in sys_sigreturn() local
155 struct sigframe __user *frame = (struct sigframe __user *)regs->regs[15]; in sys_sigreturn()
173 if (restore_sigcontext(regs, &frame->sc, &r0)) in sys_sigreturn()
184 struct pt_regs *regs = current_pt_regs(); in sys_rt_sigreturn() local
185 struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs->regs[15]; in sys_rt_sigreturn()
200 if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0)) in sys_rt_sigreturn()
218 setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, in setup_sigcontext() argument
223 #define COPY(x) err |= __put_user(regs->x, &sc->sc_##x) in setup_sigcontext()
224 COPY(regs[0]); COPY(regs[1]); in setup_sigcontext()
225 COPY(regs[2]); COPY(regs[3]); in setup_sigcontext()
226 COPY(regs[4]); COPY(regs[5]); in setup_sigcontext()
227 COPY(regs[6]); COPY(regs[7]); in setup_sigcontext()
228 COPY(regs[8]); COPY(regs[9]); in setup_sigcontext()
229 COPY(regs[10]); COPY(regs[11]); in setup_sigcontext()
230 COPY(regs[12]); COPY(regs[13]); in setup_sigcontext()
231 COPY(regs[14]); COPY(regs[15]); in setup_sigcontext()
238 err |= save_sigcontext_fpu(sc, regs); in setup_sigcontext()
267 struct pt_regs *regs) in setup_frame() argument
272 frame = get_sigframe(&ksig->ka, regs->regs[15], sizeof(*frame)); in setup_frame()
277 err |= setup_sigcontext(&frame->sc, regs, set->sig[0]); in setup_frame()
286 regs->pr = (unsigned long) ksig->ka.sa.sa_restorer; in setup_frame()
289 regs->pr = VDSO_SYM(&__kernel_sigreturn); in setup_frame()
301 regs->pr = (unsigned long) frame->retcode; in setup_frame()
302 flush_icache_range(regs->pr, regs->pr + sizeof(frame->retcode)); in setup_frame()
309 regs->regs[15] = (unsigned long) frame; in setup_frame()
310 regs->regs[4] = sig; /* Arg for signal handler */ in setup_frame()
311 regs->regs[5] = 0; in setup_frame()
312 regs->regs[6] = (unsigned long) &frame->sc; in setup_frame()
318 err |= __get_user(regs->pc, &funcptr->text); in setup_frame()
319 err |= __get_user(regs->regs[12], &funcptr->GOT); in setup_frame()
321 regs->pc = (unsigned long)ksig->ka.sa.sa_handler; in setup_frame()
327 current->comm, task_pid_nr(current), frame, regs->pc, regs->pr); in setup_frame()
333 struct pt_regs *regs) in setup_rt_frame() argument
338 frame = get_sigframe(&ksig->ka, regs->regs[15], sizeof(*frame)); in setup_rt_frame()
348 err |= __save_altstack(&frame->uc.uc_stack, regs->regs[15]); in setup_rt_frame()
350 regs, set->sig[0]); in setup_rt_frame()
356 regs->pr = (unsigned long) ksig->ka.sa.sa_restorer; in setup_rt_frame()
359 regs->pr = VDSO_SYM(&__kernel_rt_sigreturn); in setup_rt_frame()
371 regs->pr = (unsigned long) frame->retcode; in setup_rt_frame()
372 flush_icache_range(regs->pr, regs->pr + sizeof(frame->retcode)); in setup_rt_frame()
379 regs->regs[15] = (unsigned long) frame; in setup_rt_frame()
380 regs->regs[4] = sig; /* Arg for signal handler */ in setup_rt_frame()
381 regs->regs[5] = (unsigned long) &frame->info; in setup_rt_frame()
382 regs->regs[6] = (unsigned long) &frame->uc; in setup_rt_frame()
388 err |= __get_user(regs->pc, &funcptr->text); in setup_rt_frame()
389 err |= __get_user(regs->regs[12], &funcptr->GOT); in setup_rt_frame()
391 regs->pc = (unsigned long)ksig->ka.sa.sa_handler; in setup_rt_frame()
397 current->comm, task_pid_nr(current), frame, regs->pc, regs->pr); in setup_rt_frame()
403 handle_syscall_restart(unsigned long save_r0, struct pt_regs *regs, in handle_syscall_restart() argument
407 if (regs->tra < 0) in handle_syscall_restart()
411 switch (regs->regs[0]) { in handle_syscall_restart()
415 regs->regs[0] = -EINTR; in handle_syscall_restart()
423 regs->regs[0] = save_r0; in handle_syscall_restart()
424 regs->pc -= instruction_size(__raw_readw(regs->pc - 4)); in handle_syscall_restart()
433 handle_signal(struct ksignal *ksig, struct pt_regs *regs, unsigned int save_r0) in handle_signal() argument
440 ret = setup_rt_frame(ksig, oldset, regs); in handle_signal()
442 ret = setup_frame(ksig, oldset, regs); in handle_signal()
456 static void do_signal(struct pt_regs *regs, unsigned int save_r0) in do_signal() argument
466 if (!user_mode(regs)) in do_signal()
470 handle_syscall_restart(save_r0, regs, &ksig.ka.sa); in do_signal()
473 handle_signal(&ksig, regs, save_r0); in do_signal()
478 if (regs->tra >= 0) { in do_signal()
480 if (regs->regs[0] == -ERESTARTNOHAND || in do_signal()
481 regs->regs[0] == -ERESTARTSYS || in do_signal()
482 regs->regs[0] == -ERESTARTNOINTR) { in do_signal()
483 regs->regs[0] = save_r0; in do_signal()
484 regs->pc -= instruction_size(__raw_readw(regs->pc - 4)); in do_signal()
485 } else if (regs->regs[0] == -ERESTART_RESTARTBLOCK) { in do_signal()
486 regs->pc -= instruction_size(__raw_readw(regs->pc - 4)); in do_signal()
487 regs->regs[3] = __NR_restart_syscall; in do_signal()
498 asmlinkage void do_notify_resume(struct pt_regs *regs, unsigned int save_r0, in do_notify_resume() argument
503 do_signal(regs, save_r0); in do_notify_resume()
506 tracehook_notify_resume(regs); in do_notify_resume()