• Home
  • Raw
  • Download

Lines Matching refs:regs

44 static int setup_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)  in setup_sigcontext()  argument
49 reg = regs->cp0_epc; err |= __put_user(reg, &sc->sc_pc); in setup_sigcontext()
50 err |= __put_user(regs->cp0_psr, &sc->sc_psr); in setup_sigcontext()
51 err |= __put_user(regs->cp0_condition, &sc->sc_condition); in setup_sigcontext()
55 reg = regs->regs[i]; \ in setup_sigcontext()
70 reg = regs->ceh; err |= __put_user(reg, &sc->sc_mdceh); in setup_sigcontext()
71 reg = regs->cel; err |= __put_user(reg, &sc->sc_mdcel); in setup_sigcontext()
72 err |= __put_user(regs->cp0_ecr, &sc->sc_ecr); in setup_sigcontext()
73 err |= __put_user(regs->cp0_ema, &sc->sc_ema); in setup_sigcontext()
78 static int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc) in restore_sigcontext() argument
83 err |= __get_user(regs->cp0_epc, &sc->sc_pc); in restore_sigcontext()
84 err |= __get_user(regs->cp0_condition, &sc->sc_condition); in restore_sigcontext()
87 regs->ceh = (int) reg; in restore_sigcontext()
89 regs->cel = (int) reg; in restore_sigcontext()
92 regs->cp0_psr = (int) reg; in restore_sigcontext()
94 regs->cp0_ecr = (int) reg; in restore_sigcontext()
96 regs->cp0_ema = (int) reg; in restore_sigcontext()
100 regs->regs[i] = reg; \ in restore_sigcontext()
121 struct pt_regs *regs, size_t frame_size) in get_sigframe() argument
126 sp = regs->regs[0]; in get_sigframe()
137 score_rt_sigreturn(struct pt_regs *regs) in score_rt_sigreturn() argument
146 frame = (struct rt_sigframe __user *) regs->regs[0]; in score_rt_sigreturn()
154 sig = restore_sigcontext(regs, &frame->rs_uc.uc_mcontext); in score_rt_sigreturn()
162 regs->is_syscall = 0; in score_rt_sigreturn()
168 : : "r" (regs) : "r8"); in score_rt_sigreturn()
176 static int setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs, in setup_rt_frame() argument
182 frame = get_sigframe(&ksig->ka, regs, sizeof(*frame)); in setup_rt_frame()
200 err |= __save_altstack(&frame->rs_uc.uc_stack, regs->regs[0]); in setup_rt_frame()
201 err |= setup_sigcontext(regs, &frame->rs_uc.uc_mcontext); in setup_rt_frame()
207 regs->regs[0] = (unsigned long) frame; in setup_rt_frame()
208 regs->regs[3] = (unsigned long) frame->rs_code; in setup_rt_frame()
209 regs->regs[4] = ksig->sig; in setup_rt_frame()
210 regs->regs[5] = (unsigned long) &frame->rs_info; in setup_rt_frame()
211 regs->regs[6] = (unsigned long) &frame->rs_uc; in setup_rt_frame()
212 regs->regs[29] = (unsigned long) ksig->ka.sa.sa_handler; in setup_rt_frame()
213 regs->cp0_epc = (unsigned long) ksig->ka.sa.sa_handler; in setup_rt_frame()
218 static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) in handle_signal() argument
222 if (regs->is_syscall) { in handle_signal()
223 switch (regs->regs[4]) { in handle_signal()
226 regs->regs[4] = EINTR; in handle_signal()
230 regs->regs[4] = EINTR; in handle_signal()
234 regs->regs[4] = regs->orig_r4; in handle_signal()
235 regs->regs[7] = regs->orig_r7; in handle_signal()
236 regs->cp0_epc -= 8; in handle_signal()
239 regs->is_syscall = 0; in handle_signal()
245 ret = setup_rt_frame(ksig, regs, sigmask_to_save()); in handle_signal()
250 static void do_signal(struct pt_regs *regs) in do_signal() argument
259 if (!user_mode(regs)) in do_signal()
264 handle_signal(&ksig, regs); in do_signal()
268 if (regs->is_syscall) { in do_signal()
269 if (regs->regs[4] == ERESTARTNOHAND || in do_signal()
270 regs->regs[4] == ERESTARTSYS || in do_signal()
271 regs->regs[4] == ERESTARTNOINTR) { in do_signal()
272 regs->regs[4] = regs->orig_r4; in do_signal()
273 regs->regs[7] = regs->orig_r7; in do_signal()
274 regs->cp0_epc -= 8; in do_signal()
277 if (regs->regs[4] == ERESTART_RESTARTBLOCK) { in do_signal()
278 regs->regs[27] = __NR_restart_syscall; in do_signal()
279 regs->regs[4] = regs->orig_r4; in do_signal()
280 regs->regs[7] = regs->orig_r7; in do_signal()
281 regs->cp0_epc -= 8; in do_signal()
284 regs->is_syscall = 0; /* Don't deal with this again. */ in do_signal()
298 asmlinkage void do_notify_resume(struct pt_regs *regs, void *unused, in do_notify_resume() argument
303 do_signal(regs); in do_notify_resume()
306 tracehook_notify_resume(regs); in do_notify_resume()