Lines Matching +full:sw +full:- +full:reset +full:- +full:number

1 // SPDX-License-Identifier: GPL-2.0
7 * 1997-11-02 Modified for POSIX.1b signals by Richard Henderson
69 __get_user(new_ka.sa.sa_handler, &act->sa_handler) || in SYSCALL_DEFINE3()
70 __get_user(new_ka.sa.sa_flags, &act->sa_flags) || in SYSCALL_DEFINE3()
71 __get_user(mask, &act->sa_mask)) in SYSCALL_DEFINE3()
72 return -EFAULT; in SYSCALL_DEFINE3()
81 __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || in SYSCALL_DEFINE3()
82 __put_user(old_ka.sa.sa_flags, &oact->sa_flags) || in SYSCALL_DEFINE3()
83 __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) in SYSCALL_DEFINE3()
84 return -EFAULT; in SYSCALL_DEFINE3()
99 return -EINVAL; in SYSCALL_DEFINE5()
104 return -EFAULT; in SYSCALL_DEFINE5()
111 return -EFAULT; in SYSCALL_DEFINE5()
142 [offsetof(struct rt_sigframe, uc.uc_mcontext) == 176 ? 1 : -1];
152 struct switch_stack *sw = (struct switch_stack *)regs - 1; in restore_sigcontext() local
153 long i, err = __get_user(regs->pc, &sc->sc_pc); in restore_sigcontext()
155 current->restart_block.fn = do_no_restart_syscall; in restore_sigcontext()
157 sw->r26 = (unsigned long) ret_from_sys_call; in restore_sigcontext()
159 err |= __get_user(regs->r0, sc->sc_regs+0); in restore_sigcontext()
160 err |= __get_user(regs->r1, sc->sc_regs+1); in restore_sigcontext()
161 err |= __get_user(regs->r2, sc->sc_regs+2); in restore_sigcontext()
162 err |= __get_user(regs->r3, sc->sc_regs+3); in restore_sigcontext()
163 err |= __get_user(regs->r4, sc->sc_regs+4); in restore_sigcontext()
164 err |= __get_user(regs->r5, sc->sc_regs+5); in restore_sigcontext()
165 err |= __get_user(regs->r6, sc->sc_regs+6); in restore_sigcontext()
166 err |= __get_user(regs->r7, sc->sc_regs+7); in restore_sigcontext()
167 err |= __get_user(regs->r8, sc->sc_regs+8); in restore_sigcontext()
168 err |= __get_user(sw->r9, sc->sc_regs+9); in restore_sigcontext()
169 err |= __get_user(sw->r10, sc->sc_regs+10); in restore_sigcontext()
170 err |= __get_user(sw->r11, sc->sc_regs+11); in restore_sigcontext()
171 err |= __get_user(sw->r12, sc->sc_regs+12); in restore_sigcontext()
172 err |= __get_user(sw->r13, sc->sc_regs+13); in restore_sigcontext()
173 err |= __get_user(sw->r14, sc->sc_regs+14); in restore_sigcontext()
174 err |= __get_user(sw->r15, sc->sc_regs+15); in restore_sigcontext()
175 err |= __get_user(regs->r16, sc->sc_regs+16); in restore_sigcontext()
176 err |= __get_user(regs->r17, sc->sc_regs+17); in restore_sigcontext()
177 err |= __get_user(regs->r18, sc->sc_regs+18); in restore_sigcontext()
178 err |= __get_user(regs->r19, sc->sc_regs+19); in restore_sigcontext()
179 err |= __get_user(regs->r20, sc->sc_regs+20); in restore_sigcontext()
180 err |= __get_user(regs->r21, sc->sc_regs+21); in restore_sigcontext()
181 err |= __get_user(regs->r22, sc->sc_regs+22); in restore_sigcontext()
182 err |= __get_user(regs->r23, sc->sc_regs+23); in restore_sigcontext()
183 err |= __get_user(regs->r24, sc->sc_regs+24); in restore_sigcontext()
184 err |= __get_user(regs->r25, sc->sc_regs+25); in restore_sigcontext()
185 err |= __get_user(regs->r26, sc->sc_regs+26); in restore_sigcontext()
186 err |= __get_user(regs->r27, sc->sc_regs+27); in restore_sigcontext()
187 err |= __get_user(regs->r28, sc->sc_regs+28); in restore_sigcontext()
188 err |= __get_user(regs->gp, sc->sc_regs+29); in restore_sigcontext()
189 err |= __get_user(usp, sc->sc_regs+30); in restore_sigcontext()
193 err |= __get_user(sw->fp[i], sc->sc_fpregs+i); in restore_sigcontext()
194 err |= __get_user(sw->fp[31], &sc->sc_fpcr); in restore_sigcontext()
212 if (__get_user(set.sig[0], &sc->sc_mask)) in do_sigreturn()
220 /* Send SIGTRAP if we're single-stepping: */ in do_sigreturn()
222 send_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *) regs->pc, in do_sigreturn()
238 if (!access_ok(&frame->uc, sizeof(frame->uc))) in do_rt_sigreturn()
240 if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) in do_rt_sigreturn()
245 if (restore_sigcontext(&frame->uc.uc_mcontext, regs)) in do_rt_sigreturn()
248 /* Send SIGTRAP if we're single-stepping: */ in do_rt_sigreturn()
250 send_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *) regs->pc, in do_rt_sigreturn()
267 return (void __user *)((sigsp(sp, ksig) - frame_size) & -32ul); in get_sigframe()
274 struct switch_stack *sw = (struct switch_stack *)regs - 1; in setup_sigcontext() local
277 err |= __put_user(on_sig_stack((unsigned long)sc), &sc->sc_onstack); in setup_sigcontext()
278 err |= __put_user(mask, &sc->sc_mask); in setup_sigcontext()
279 err |= __put_user(regs->pc, &sc->sc_pc); in setup_sigcontext()
280 err |= __put_user(8, &sc->sc_ps); in setup_sigcontext()
282 err |= __put_user(regs->r0 , sc->sc_regs+0); in setup_sigcontext()
283 err |= __put_user(regs->r1 , sc->sc_regs+1); in setup_sigcontext()
284 err |= __put_user(regs->r2 , sc->sc_regs+2); in setup_sigcontext()
285 err |= __put_user(regs->r3 , sc->sc_regs+3); in setup_sigcontext()
286 err |= __put_user(regs->r4 , sc->sc_regs+4); in setup_sigcontext()
287 err |= __put_user(regs->r5 , sc->sc_regs+5); in setup_sigcontext()
288 err |= __put_user(regs->r6 , sc->sc_regs+6); in setup_sigcontext()
289 err |= __put_user(regs->r7 , sc->sc_regs+7); in setup_sigcontext()
290 err |= __put_user(regs->r8 , sc->sc_regs+8); in setup_sigcontext()
291 err |= __put_user(sw->r9 , sc->sc_regs+9); in setup_sigcontext()
292 err |= __put_user(sw->r10 , sc->sc_regs+10); in setup_sigcontext()
293 err |= __put_user(sw->r11 , sc->sc_regs+11); in setup_sigcontext()
294 err |= __put_user(sw->r12 , sc->sc_regs+12); in setup_sigcontext()
295 err |= __put_user(sw->r13 , sc->sc_regs+13); in setup_sigcontext()
296 err |= __put_user(sw->r14 , sc->sc_regs+14); in setup_sigcontext()
297 err |= __put_user(sw->r15 , sc->sc_regs+15); in setup_sigcontext()
298 err |= __put_user(regs->r16, sc->sc_regs+16); in setup_sigcontext()
299 err |= __put_user(regs->r17, sc->sc_regs+17); in setup_sigcontext()
300 err |= __put_user(regs->r18, sc->sc_regs+18); in setup_sigcontext()
301 err |= __put_user(regs->r19, sc->sc_regs+19); in setup_sigcontext()
302 err |= __put_user(regs->r20, sc->sc_regs+20); in setup_sigcontext()
303 err |= __put_user(regs->r21, sc->sc_regs+21); in setup_sigcontext()
304 err |= __put_user(regs->r22, sc->sc_regs+22); in setup_sigcontext()
305 err |= __put_user(regs->r23, sc->sc_regs+23); in setup_sigcontext()
306 err |= __put_user(regs->r24, sc->sc_regs+24); in setup_sigcontext()
307 err |= __put_user(regs->r25, sc->sc_regs+25); in setup_sigcontext()
308 err |= __put_user(regs->r26, sc->sc_regs+26); in setup_sigcontext()
309 err |= __put_user(regs->r27, sc->sc_regs+27); in setup_sigcontext()
310 err |= __put_user(regs->r28, sc->sc_regs+28); in setup_sigcontext()
311 err |= __put_user(regs->gp , sc->sc_regs+29); in setup_sigcontext()
312 err |= __put_user(sp, sc->sc_regs+30); in setup_sigcontext()
313 err |= __put_user(0, sc->sc_regs+31); in setup_sigcontext()
316 err |= __put_user(sw->fp[i], sc->sc_fpregs+i); in setup_sigcontext()
317 err |= __put_user(0, sc->sc_fpregs+31); in setup_sigcontext()
318 err |= __put_user(sw->fp[31], &sc->sc_fpcr); in setup_sigcontext()
320 err |= __put_user(regs->trap_a0, &sc->sc_traparg_a0); in setup_sigcontext()
321 err |= __put_user(regs->trap_a1, &sc->sc_traparg_a1); in setup_sigcontext()
322 err |= __put_user(regs->trap_a2, &sc->sc_traparg_a2); in setup_sigcontext()
336 return -EFAULT; in setup_frame()
338 err |= setup_sigcontext(&frame->sc, regs, set->sig[0], oldsp); in setup_frame()
340 return -EFAULT; in setup_frame()
344 r26 = (unsigned long) ksig->ka.ka_restorer; in setup_frame()
346 err |= __put_user(INSN_MOV_R30_R16, frame->retcode+0); in setup_frame()
347 err |= __put_user(INSN_LDI_R0+__NR_sigreturn, frame->retcode+1); in setup_frame()
348 err |= __put_user(INSN_CALLSYS, frame->retcode+2); in setup_frame()
350 r26 = (unsigned long) frame->retcode; in setup_frame()
358 regs->r26 = r26; in setup_frame()
359 regs->r27 = regs->pc = (unsigned long) ksig->ka.sa.sa_handler; in setup_frame()
360 regs->r16 = ksig->sig; /* a0: signal number */ in setup_frame()
361 regs->r17 = 0; /* a1: exception code */ in setup_frame()
362 regs->r18 = (unsigned long) &frame->sc; /* a2: sigcontext pointer */ in setup_frame()
367 current->comm, current->pid, frame, regs->pc, regs->r26); in setup_frame()
381 return -EFAULT; in setup_rt_frame()
383 err |= copy_siginfo_to_user(&frame->info, &ksig->info); in setup_rt_frame()
386 err |= __put_user(0, &frame->uc.uc_flags); in setup_rt_frame()
387 err |= __put_user(0, &frame->uc.uc_link); in setup_rt_frame()
388 err |= __put_user(set->sig[0], &frame->uc.uc_osf_sigmask); in setup_rt_frame()
389 err |= __save_altstack(&frame->uc.uc_stack, oldsp); in setup_rt_frame()
390 err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, in setup_rt_frame()
391 set->sig[0], oldsp); in setup_rt_frame()
392 err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); in setup_rt_frame()
394 return -EFAULT; in setup_rt_frame()
398 r26 = (unsigned long) ksig->ka.ka_restorer; in setup_rt_frame()
400 err |= __put_user(INSN_MOV_R30_R16, frame->retcode+0); in setup_rt_frame()
402 frame->retcode+1); in setup_rt_frame()
403 err |= __put_user(INSN_CALLSYS, frame->retcode+2); in setup_rt_frame()
405 r26 = (unsigned long) frame->retcode; in setup_rt_frame()
409 return -EFAULT; in setup_rt_frame()
412 regs->r26 = r26; in setup_rt_frame()
413 regs->r27 = regs->pc = (unsigned long) ksig->ka.sa.sa_handler; in setup_rt_frame()
414 regs->r16 = ksig->sig; /* a0: signal number */ in setup_rt_frame()
415 regs->r17 = (unsigned long) &frame->info; /* a1: siginfo pointer */ in setup_rt_frame()
416 regs->r18 = (unsigned long) &frame->uc; /* a2: ucontext pointer */ in setup_rt_frame()
421 current->comm, current->pid, frame, regs->pc, regs->r26); in setup_rt_frame()
437 if (ksig->ka.sa.sa_flags & SA_SIGINFO) in handle_signal()
449 switch (regs->r0) { in syscall_restart()
451 if (!(ka->sa.sa_flags & SA_RESTART)) { in syscall_restart()
453 regs->r0 = EINTR; in syscall_restart()
458 regs->r0 = r0; /* reset v0 and a3 and replay syscall */ in syscall_restart()
459 regs->r19 = r19; in syscall_restart()
460 regs->pc -= 4; in syscall_restart()
463 regs->r0 = EINTR; in syscall_restart()
475 * the kernel can handle, and then we build all the user-level signal handling
476 * stack-frames in one go after that.
490 /* ... so re-check the single stepping. */ in do_signal()
499 switch (regs->r0) { in do_signal()
503 /* Reset v0 and a3 and replay syscall. */ in do_signal()
504 regs->r0 = r0; in do_signal()
505 regs->r19 = r19; in do_signal()
506 regs->pc -= 4; in do_signal()
510 regs->r0 = __NR_restart_syscall; in do_signal()
511 regs->pc -= 4; in do_signal()
518 ptrace_set_bpt(current); /* re-set breakpoint */ in do_signal()