Lines Matching refs:regs
95 static int restore_sigframe(struct pt_regs *regs, in restore_sigframe() argument
107 __get_user_error(regs->regs[i], &sf->uc.uc_mcontext.regs[i], in restore_sigframe()
109 __get_user_error(regs->sp, &sf->uc.uc_mcontext.sp, err); in restore_sigframe()
110 __get_user_error(regs->pc, &sf->uc.uc_mcontext.pc, err); in restore_sigframe()
111 __get_user_error(regs->pstate, &sf->uc.uc_mcontext.pstate, err); in restore_sigframe()
116 regs->syscallno = ~0UL; in restore_sigframe()
118 err |= !valid_user_regs(®s->user_regs); in restore_sigframe()
129 asmlinkage long sys_rt_sigreturn(struct pt_regs *regs) in sys_rt_sigreturn() argument
140 if (regs->sp & 15) in sys_rt_sigreturn()
143 frame = (struct rt_sigframe __user *)regs->sp; in sys_rt_sigreturn()
148 if (restore_sigframe(regs, frame)) in sys_rt_sigreturn()
154 return regs->regs[0]; in sys_rt_sigreturn()
160 regs->pc, regs->sp); in sys_rt_sigreturn()
166 struct pt_regs *regs, sigset_t *set) in setup_sigframe() argument
173 __put_user_error(regs->regs[29], &sf->fp, err); in setup_sigframe()
174 __put_user_error(regs->regs[30], &sf->lr, err); in setup_sigframe()
177 __put_user_error(regs->regs[i], &sf->uc.uc_mcontext.regs[i], in setup_sigframe()
179 __put_user_error(regs->sp, &sf->uc.uc_mcontext.sp, err); in setup_sigframe()
180 __put_user_error(regs->pc, &sf->uc.uc_mcontext.pc, err); in setup_sigframe()
181 __put_user_error(regs->pstate, &sf->uc.uc_mcontext.pstate, err); in setup_sigframe()
213 struct pt_regs *regs) in get_sigframe() argument
218 sp = sp_top = sigsp(regs->sp, ksig); in get_sigframe()
232 static void setup_return(struct pt_regs *regs, struct k_sigaction *ka, in setup_return() argument
237 regs->regs[0] = usig; in setup_return()
238 regs->sp = (unsigned long)frame; in setup_return()
239 regs->regs[29] = regs->sp + offsetof(struct rt_sigframe, fp); in setup_return()
240 regs->pc = (unsigned long)ka->sa.sa_handler; in setup_return()
247 regs->regs[30] = (unsigned long)sigtramp; in setup_return()
251 struct pt_regs *regs) in setup_rt_frame() argument
256 frame = get_sigframe(ksig, regs); in setup_rt_frame()
263 err |= __save_altstack(&frame->uc.uc_stack, regs->sp); in setup_rt_frame()
264 err |= setup_sigframe(frame, regs, set); in setup_rt_frame()
266 setup_return(regs, &ksig->ka, frame, usig); in setup_rt_frame()
269 regs->regs[1] = (unsigned long)&frame->info; in setup_rt_frame()
270 regs->regs[2] = (unsigned long)&frame->uc; in setup_rt_frame()
277 static void setup_restart_syscall(struct pt_regs *regs) in setup_restart_syscall() argument
280 compat_setup_restart_syscall(regs); in setup_restart_syscall()
282 regs->regs[8] = __NR_restart_syscall; in setup_restart_syscall()
288 static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) in handle_signal() argument
300 ret = compat_setup_rt_frame(usig, ksig, oldset, regs); in handle_signal()
302 ret = compat_setup_frame(usig, ksig, oldset, regs); in handle_signal()
304 ret = setup_rt_frame(usig, ksig, oldset, regs); in handle_signal()
310 ret |= !valid_user_regs(®s->user_regs); in handle_signal()
331 static void do_signal(struct pt_regs *regs) in do_signal() argument
335 int syscall = (int)regs->syscallno; in do_signal()
342 continue_addr = regs->pc; in do_signal()
343 restart_addr = continue_addr - (compat_thumb_mode(regs) ? 2 : 4); in do_signal()
344 retval = regs->regs[0]; in do_signal()
349 regs->syscallno = ~0UL; in do_signal()
360 regs->regs[0] = regs->orig_x0; in do_signal()
361 regs->pc = restart_addr; in do_signal()
376 if (regs->pc == restart_addr && in do_signal()
381 regs->regs[0] = -EINTR; in do_signal()
382 regs->pc = continue_addr; in do_signal()
385 handle_signal(&ksig, regs); in do_signal()
393 if (syscall >= 0 && regs->pc == restart_addr) { in do_signal()
395 setup_restart_syscall(regs); in do_signal()
402 asmlinkage void do_notify_resume(struct pt_regs *regs, in do_notify_resume() argument
406 do_signal(regs); in do_notify_resume()
410 tracehook_notify_resume(regs); in do_notify_resume()