Lines Matching refs:regs
91 struct pt_regs *regs) in save_sigcontext_fpu() argument
109 unlazy_fpu(tsk, regs); in save_sigcontext_fpu()
116 restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *r0_p) in restore_sigcontext() argument
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()
139 regs->sr |= SR_FD; /* Release FPU */ in restore_sigcontext()
140 clear_fpu(tsk, regs); in restore_sigcontext()
148 regs->tra = -1; /* disable syscall checks */ in restore_sigcontext()
155 struct pt_regs *regs = current_pt_regs(); in sys_sigreturn() local
156 struct sigframe __user *frame = (struct sigframe __user *)regs->regs[15]; in sys_sigreturn()
174 if (restore_sigcontext(regs, &frame->sc, &r0)) in sys_sigreturn()
185 struct pt_regs *regs = current_pt_regs(); in sys_rt_sigreturn() local
186 struct rt_sigframe __user *frame = (struct rt_sigframe __user *)regs->regs[15]; in sys_rt_sigreturn()
201 if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0)) in sys_rt_sigreturn()
219 setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, in setup_sigcontext() argument
224 #define COPY(x) err |= __put_user(regs->x, &sc->sc_##x) in setup_sigcontext()
225 COPY(regs[0]); COPY(regs[1]); in setup_sigcontext()
226 COPY(regs[2]); COPY(regs[3]); in setup_sigcontext()
227 COPY(regs[4]); COPY(regs[5]); in setup_sigcontext()
228 COPY(regs[6]); COPY(regs[7]); in setup_sigcontext()
229 COPY(regs[8]); COPY(regs[9]); in setup_sigcontext()
230 COPY(regs[10]); COPY(regs[11]); in setup_sigcontext()
231 COPY(regs[12]); COPY(regs[13]); in setup_sigcontext()
232 COPY(regs[14]); COPY(regs[15]); in setup_sigcontext()
239 err |= save_sigcontext_fpu(sc, regs); in setup_sigcontext()
268 struct pt_regs *regs) in setup_frame() argument
273 frame = get_sigframe(&ksig->ka, regs->regs[15], sizeof(*frame)); in setup_frame()
278 err |= setup_sigcontext(&frame->sc, regs, set->sig[0]); in setup_frame()
287 regs->pr = (unsigned long) ksig->ka.sa.sa_restorer; in setup_frame()
290 regs->pr = VDSO_SYM(&__kernel_sigreturn); in setup_frame()
302 regs->pr = (unsigned long) frame->retcode; in setup_frame()
303 flush_icache_range(regs->pr, regs->pr + sizeof(frame->retcode)); in setup_frame()
310 regs->regs[15] = (unsigned long) frame; in setup_frame()
311 regs->regs[4] = sig; /* Arg for signal handler */ in setup_frame()
312 regs->regs[5] = 0; in setup_frame()
313 regs->regs[6] = (unsigned long) &frame->sc; in setup_frame()
319 err |= __get_user(regs->pc, &funcptr->text); in setup_frame()
320 err |= __get_user(regs->regs[12], &funcptr->GOT); in setup_frame()
322 regs->pc = (unsigned long)ksig->ka.sa.sa_handler; in setup_frame()
328 current->comm, task_pid_nr(current), frame, regs->pc, regs->pr); in setup_frame()
334 struct pt_regs *regs) in setup_rt_frame() argument
339 frame = get_sigframe(&ksig->ka, regs->regs[15], sizeof(*frame)); in setup_rt_frame()
349 err |= __save_altstack(&frame->uc.uc_stack, regs->regs[15]); in setup_rt_frame()
351 regs, set->sig[0]); in setup_rt_frame()
357 regs->pr = (unsigned long) ksig->ka.sa.sa_restorer; in setup_rt_frame()
360 regs->pr = VDSO_SYM(&__kernel_rt_sigreturn); in setup_rt_frame()
372 regs->pr = (unsigned long) frame->retcode; in setup_rt_frame()
373 flush_icache_range(regs->pr, regs->pr + sizeof(frame->retcode)); in setup_rt_frame()
380 regs->regs[15] = (unsigned long) frame; in setup_rt_frame()
381 regs->regs[4] = sig; /* Arg for signal handler */ in setup_rt_frame()
382 regs->regs[5] = (unsigned long) &frame->info; in setup_rt_frame()
383 regs->regs[6] = (unsigned long) &frame->uc; in setup_rt_frame()
389 err |= __get_user(regs->pc, &funcptr->text); in setup_rt_frame()
390 err |= __get_user(regs->regs[12], &funcptr->GOT); in setup_rt_frame()
392 regs->pc = (unsigned long)ksig->ka.sa.sa_handler; in setup_rt_frame()
398 current->comm, task_pid_nr(current), frame, regs->pc, regs->pr); in setup_rt_frame()
404 handle_syscall_restart(unsigned long save_r0, struct pt_regs *regs, in handle_syscall_restart() argument
408 if (regs->tra < 0) in handle_syscall_restart()
412 switch (regs->regs[0]) { in handle_syscall_restart()
416 regs->regs[0] = -EINTR; in handle_syscall_restart()
424 regs->regs[0] = save_r0; in handle_syscall_restart()
425 regs->pc -= instruction_size(__raw_readw(regs->pc - 4)); in handle_syscall_restart()
434 handle_signal(struct ksignal *ksig, struct pt_regs *regs, unsigned int save_r0) in handle_signal() argument
441 ret = setup_rt_frame(ksig, oldset, regs); in handle_signal()
443 ret = setup_frame(ksig, oldset, regs); in handle_signal()
457 static void do_signal(struct pt_regs *regs, unsigned int save_r0) in do_signal() argument
467 if (!user_mode(regs)) in do_signal()
471 handle_syscall_restart(save_r0, regs, &ksig.ka.sa); in do_signal()
474 handle_signal(&ksig, regs, save_r0); in do_signal()
479 if (regs->tra >= 0) { in do_signal()
481 if (regs->regs[0] == -ERESTARTNOHAND || in do_signal()
482 regs->regs[0] == -ERESTARTSYS || in do_signal()
483 regs->regs[0] == -ERESTARTNOINTR) { in do_signal()
484 regs->regs[0] = save_r0; in do_signal()
485 regs->pc -= instruction_size(__raw_readw(regs->pc - 4)); in do_signal()
486 } else if (regs->regs[0] == -ERESTART_RESTARTBLOCK) { in do_signal()
487 regs->pc -= instruction_size(__raw_readw(regs->pc - 4)); in do_signal()
488 regs->regs[3] = __NR_restart_syscall; in do_signal()
499 asmlinkage void do_notify_resume(struct pt_regs *regs, unsigned int save_r0, in do_notify_resume() argument
504 do_signal(regs, save_r0); in do_notify_resume()
508 tracehook_notify_resume(regs); in do_notify_resume()