/linux/arch/x86/kernel/ |
H A D | signal.c | 49 ksig->ka.sa.sa_flags & SA_IA32_ABI; in is_ia32_compat_frame() 60 ksig->ka.sa.sa_flags & SA_X32_ABI; in is_x32_frame() 79 struct k_sigaction *ka = &ksig->ka; in get_sigframe() 80 int ia32_frame = is_ia32_frame(ksig); in get_sigframe() 212 rseq_signal_deliver(ksig, regs); in setup_rt_frame() 215 if (is_ia32_frame(ksig)) { in setup_rt_frame() 219 return ia32_setup_frame(ksig, regs); in setup_rt_frame() 220 } else if (is_x32_frame(ksig)) { in setup_rt_frame() 308 struct ksignal ksig; in arch_do_signal_or_restart() local 310 if (get_signal(&ksig)) { in arch_do_signal_or_restart() [all …]
|
H A D | signal_64.c | 172 if (!(ksig->ka.sa.sa_flags & SA_RESTORER)) in x64_setup_rt_frame() 193 if (ksig->ka.sa.sa_flags & SA_SIGINFO) { in x64_setup_rt_frame() 198 if (setup_signal_shadow_stack(ksig)) in x64_setup_rt_frame() 202 regs->di = ksig->sig; in x64_setup_rt_frame() 210 regs->ip = (unsigned long) ksig->ka.sa.sa_handler; in x64_setup_rt_frame() 311 if (!(ksig->ka.sa.sa_flags & SA_RESTORER)) in x32_setup_rt_frame() 318 if (setup_signal_shadow_stack(ksig)) in x32_setup_rt_frame() 329 restorer = ksig->ka.sa.sa_restorer; in x32_setup_rt_frame() 335 if (ksig->ka.sa.sa_flags & SA_SIGINFO) { in x32_setup_rt_frame() 342 regs->ip = (unsigned long) ksig->ka.sa.sa_handler; in x32_setup_rt_frame() [all …]
|
/linux/arch/um/kernel/ |
H A D | signal.c | 49 static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) in handle_signal() argument 69 if (!(ksig->ka.sa.sa_flags & SA_RESTART)) { in handle_signal() 82 if ((ksig->ka.sa.sa_flags & SA_ONSTACK) && (sas_ss_flags(sp) == 0)) in handle_signal() 86 if (!(ksig->ka.sa.sa_flags & SA_SIGINFO)) in handle_signal() 87 err = setup_signal_stack_sc(sp, ksig, regs, oldset); in handle_signal() 90 err = setup_signal_stack_si(sp, ksig, regs, oldset); in handle_signal() 92 signal_setup_done(err, ksig, singlestep); in handle_signal() 97 struct ksignal ksig; in do_signal() local 100 while (get_signal(&ksig)) { in do_signal() 103 handle_signal(&ksig, regs); in do_signal()
|
/linux/arch/csky/kernel/ |
H A D | signal.c | 128 sp = sigsp(sp, ksig) - framesize; in get_sigframe() 142 frame = get_sigframe(ksig, regs, sizeof(*frame)); in setup_rt_frame() 146 err |= copy_siginfo_to_user(&frame->info, &ksig->info); in setup_rt_frame() 168 regs->pc = (unsigned long)ksig->ka.sa.sa_handler; in setup_rt_frame() 170 regs->a0 = ksig->sig; /* a0: signal number */ in setup_rt_frame() 195 if (!(ksig->ka.sa.sa_flags & SA_RESTART)) { in handle_signal() 208 ret = setup_rt_frame(ksig, oldset, regs); in handle_signal() 210 signal_setup_done(ret, ksig, 0); in handle_signal() 215 struct ksignal ksig; in do_signal() local 217 if (get_signal(&ksig)) { in do_signal() [all …]
|
/linux/arch/openrisc/kernel/ |
H A D | signal.c | 168 static inline void __user *get_sigframe(struct ksignal *ksig, in get_sigframe() argument 175 sp = sigsp(sp, ksig); in get_sigframe() 195 frame = get_sigframe(ksig, regs, sizeof(*frame)); in setup_rt_frame() 201 if (ksig->ka.sa.sa_flags & SA_SIGINFO) in setup_rt_frame() 202 err |= copy_siginfo_to_user(&frame->info, &ksig->info); in setup_rt_frame() 243 handle_signal(struct ksignal *ksig, struct pt_regs *regs) in handle_signal() argument 247 ret = setup_rt_frame(ksig, sigmask_to_save(), regs); in handle_signal() 266 struct ksignal ksig; in do_signal() local 301 if (get_signal(&ksig)) { in do_signal() 306 && !(ksig.ka.sa.sa_flags & SA_RESTART))) { in do_signal() [all …]
|
/linux/arch/arm/kernel/ |
H A D | signal.c | 345 if (ksig->ka.sa.sa_flags & SA_THIRTYTWO) in setup_return() 387 if (ksig->ka.sa.sa_flags & SA_SIGINFO) in setup_return() 398 if (ksig->ka.sa.sa_flags & SA_SIGINFO) in setup_return() 435 regs->ARM_r0 = ksig->sig; in setup_return() 510 rseq_signal_deliver(ksig, regs); in handle_signal() 515 if (ksig->ka.sa.sa_flags & SA_SIGINFO) in handle_signal() 518 ret = setup_frame(ksig, oldset, regs); in handle_signal() 525 signal_setup_done(ret, ksig, 0); in handle_signal() 540 struct ksignal ksig; in do_signal() local 578 if (get_signal(&ksig)) { in do_signal() [all …]
|
/linux/arch/sh/kernel/ |
H A D | signal_32.c | 273 int err = 0, sig = ksig->sig; in setup_frame() 288 if (ksig->ka.sa.sa_flags & SA_RESTORER) { in setup_frame() 324 regs->pc = (unsigned long)ksig->ka.sa.sa_handler; in setup_frame() 339 int err = 0, sig = ksig->sig; in setup_rt_frame() 358 if (ksig->ka.sa.sa_flags & SA_RESTORER) { in setup_rt_frame() 442 if (ksig->ka.sa.sa_flags & SA_SIGINFO) in handle_signal() 443 ret = setup_rt_frame(ksig, oldset, regs); in handle_signal() 445 ret = setup_frame(ksig, oldset, regs); in handle_signal() 461 struct ksignal ksig; in do_signal() local 472 if (get_signal(&ksig)) { in do_signal() [all …]
|
/linux/arch/sparc/kernel/ |
H A D | signal_32.c | 212 sp = sigsp(sp, ksig) - framesize; in get_sigframe() 292 regs->u_regs[UREG_I0] = ksig->sig; in setup_frame() 301 if (ksig->ka.ka_restorer) in setup_frame() 391 regs->u_regs[UREG_I0] = ksig->sig; in setup_rt_frame() 398 if (ksig->ka.ka_restorer) in setup_rt_frame() 423 if (ksig->ka.sa.sa_flags & SA_SIGINFO) in handle_signal() 426 err = setup_frame(ksig, regs, oldset); in handle_signal() 427 signal_setup_done(err, ksig, 0); in handle_signal() 457 struct ksignal ksig; in do_signal() local 482 has_handler = get_signal(&ksig); in do_signal() [all …]
|
H A D | signal32.c | 275 sp = sigsp(sp, ksig) - framesize; in get_sigframe() 382 force_sigsegv(ksig->sig); in setup_frame32() 458 regs->u_regs[UREG_I0] = ksig->sig; in setup_frame32() 471 if (ksig->ka.ka_restorer) { in setup_frame32() 516 force_sigsegv(ksig->sig); in setup_rt_frame32() 590 regs->u_regs[UREG_I0] = ksig->sig; in setup_rt_frame32() 603 if (ksig->ka.ka_restorer) in setup_rt_frame32() 634 signal_setup_done(err, ksig, 0); in handle_signal32() 664 struct ksignal ksig; in do_signal32() local 667 bool has_handler = get_signal(&ksig); in do_signal32() [all …]
|
/linux/arch/microblaze/kernel/ |
H A D | signal.c | 149 unsigned long sp = sigsp(regs->r1, ksig); in get_sigframe() 158 int err = 0, sig = ksig->sig; in setup_rt_frame() 163 frame = get_sigframe(ksig, regs, sizeof(*frame)); in setup_rt_frame() 168 if (ksig->ka.sa.sa_flags & SA_SIGINFO) in setup_rt_frame() 169 err |= copy_siginfo_to_user(&frame->info, &ksig->info); in setup_rt_frame() 220 regs->pc = (unsigned long)ksig->ka.sa.sa_handler; in setup_rt_frame() 266 ret = setup_rt_frame(ksig, oldset, regs); in handle_signal() 282 struct ksignal ksig; in do_signal() local 290 if (get_signal(&ksig)) { in do_signal() 293 handle_restart(regs, &ksig.ka, 1); in do_signal() [all …]
|
/linux/arch/hexagon/kernel/ |
H A D | signal.c | 30 unsigned long sp = sigsp(regs->r29, ksig); in get_sigframe() 95 static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, in setup_rt_frame() argument 102 frame = get_sigframe(ksig, regs, sizeof(struct rt_sigframe)); in setup_rt_frame() 107 if (copy_siginfo_to_user(&frame->info, &ksig->info)) in setup_rt_frame() 124 | (unsigned long long)ksig->sig; in setup_rt_frame() 128 pt_set_elr(regs, (unsigned long)ksig->ka.sa.sa_handler); in setup_rt_frame() 153 if (!(ksig->ka.sa.sa_flags & SA_RESTART)) { in handle_signal() 173 ret = setup_rt_frame(ksig, sigmask_to_save(), regs); in handle_signal() 183 struct ksignal ksig; in do_signal() local 188 if (get_signal(&ksig)) { in do_signal() [all …]
|
/linux/arch/nios2/kernel/ |
H A D | signal.c | 176 usp = sigsp(usp, ksig); in get_sigframe() 188 frame = get_sigframe(ksig, regs, sizeof(*frame)); in setup_rt_frame() 190 if (ksig->ka.sa.sa_flags & SA_SIGINFO) in setup_rt_frame() 209 regs->r4 = (unsigned long) ksig->sig; in setup_rt_frame() 216 force_sigsegv(ksig->sig); in setup_rt_frame() 229 ret = setup_rt_frame(ksig, oldset, regs); in handle_signal() 231 signal_setup_done(ret, ksig, 0); in handle_signal() 238 struct ksignal ksig; in do_signal() local 270 if (get_signal(&ksig)) { in do_signal() 276 && !(ksig.ka.sa.sa_flags & SA_RESTART))) { in do_signal() [all …]
|
/linux/arch/riscv/kernel/ |
H A D | signal.c | 313 sp = sigsp(sp, ksig) - framesize; in get_sigframe() 329 frame = get_sigframe(ksig, regs, frame_size); in setup_rt_frame() 379 current->comm, task_pid_nr(current), ksig->sig, in setup_rt_frame() 391 rseq_signal_deliver(ksig, regs); in handle_signal() 395 ret = compat_setup_rt_frame(ksig, oldset, regs); in handle_signal() 397 ret = setup_rt_frame(ksig, oldset, regs); in handle_signal() 399 signal_setup_done(ret, ksig, 0); in handle_signal() 406 struct ksignal ksig; in arch_do_signal_or_restart() local 437 if (get_signal(&ksig)) { in arch_do_signal_or_restart() 447 !(ksig.ka.sa.sa_flags & SA_RESTART)))) { in arch_do_signal_or_restart() [all …]
|
H A D | compat_signal.c | 176 static inline void __user *compat_get_sigframe(struct ksignal *ksig, in compat_get_sigframe() argument 191 sp = sigsp(sp, ksig) - framesize; in compat_get_sigframe() 199 int compat_setup_rt_frame(struct ksignal *ksig, sigset_t *set, in compat_setup_rt_frame() argument 205 frame = compat_get_sigframe(ksig, regs, sizeof(*frame)); in compat_setup_rt_frame() 209 err |= copy_siginfo_to_user32(&frame->info, &ksig->info); in compat_setup_rt_frame() 230 regs->epc = (unsigned long)ksig->ka.sa.sa_handler; in compat_setup_rt_frame() 232 regs->a0 = ksig->sig; /* a0: signal number */ in compat_setup_rt_frame() 238 current->comm, task_pid_nr(current), ksig->sig, in compat_setup_rt_frame()
|
/linux/arch/arc/kernel/ |
H A D | signal.c | 253 unsigned long sp = sigsp(regs->sp, ksig); in get_sigframe() 296 if (unlikely(ksig->ka.sa.sa_flags & SA_SIGINFO)) { in setup_rt_frame() 297 err |= copy_siginfo_to_user(&sf->info, &ksig->info); in setup_rt_frame() 318 regs->r0 = ksig->sig; in setup_rt_frame() 321 regs->ret = (unsigned long)ksig->ka.sa.sa_handler; in setup_rt_frame() 327 if(!(ksig->ka.sa.sa_flags & SA_RESTORER)) in setup_rt_frame() 398 failed = setup_rt_frame(ksig, oldset, regs); in handle_signal() 400 signal_setup_done(failed, ksig, 0); in handle_signal() 405 struct ksignal ksig; in do_signal() local 412 arc_restart_syscall(&ksig.ka, regs); in do_signal() [all …]
|
/linux/arch/s390/kernel/ |
H A D | signal.c | 391 if (ksig->ka.sa.sa_flags & SA_RESTORER) in setup_rt_frame() 421 regs->gprs[2] = ksig->sig; in setup_rt_frame() 434 if (ksig->ka.sa.sa_flags & SA_SIGINFO) in handle_signal() 435 ret = setup_rt_frame(ksig, oldset, regs); in handle_signal() 437 ret = setup_frame(ksig->sig, &ksig->ka, oldset, regs); in handle_signal() 454 struct ksignal ksig; in arch_do_signal_or_restart() local 465 if (get_signal(&ksig)) { in arch_do_signal_or_restart() 476 if (!(ksig.ka.sa.sa_flags & SA_RESTART)) { in arch_do_signal_or_restart() 492 rseq_signal_deliver(&ksig, regs); in arch_do_signal_or_restart() 494 handle_signal32(&ksig, oldset, regs); in arch_do_signal_or_restart() [all …]
|
H A D | compat_signal.c | 254 int sig = ksig->sig; in setup_frame32() 268 frame = get_sigframe(&ksig->ka, regs, frame_size); in setup_frame32() 300 if (ksig->ka.sa.sa_flags & SA_RESTORER) { in setup_frame32() 302 ksig->ka.sa.sa_restorer | PSW32_ADDR_AMODE; in setup_frame32() 354 frame = get_sigframe(&ksig->ka, regs, frame_size); in setup_rt_frame32() 364 if (ksig->ka.sa.sa_flags & SA_RESTORER) { in setup_rt_frame32() 366 ksig->ka.sa.sa_restorer | PSW32_ADDR_AMODE; in setup_rt_frame32() 396 regs->gprs[2] = ksig->sig; in setup_rt_frame32() 413 if (ksig->ka.sa.sa_flags & SA_SIGINFO) in handle_signal32() 414 ret = setup_rt_frame32(ksig, oldset, regs); in handle_signal32() [all …]
|
/linux/arch/x86/include/asm/ |
H A D | sighandling.h | 19 get_sigframe(struct ksignal *ksig, struct pt_regs *regs, size_t frame_size, 22 int ia32_setup_frame(struct ksignal *ksig, struct pt_regs *regs); 23 int ia32_setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs); 24 int x64_setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs); 25 int x32_setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs);
|
/linux/arch/powerpc/kernel/ |
H A D | signal.c | 172 oldsp = sigsp(oldsp, ksig); in get_sigframe() 246 struct ksignal ksig = { .sig = 0 }; in do_signal() local 251 get_signal(&ksig); in do_signal() 254 check_syscall_restart(tsk->thread.regs, &ksig.ka, ksig.sig > 0); in do_signal() 256 if (ksig.sig <= 0) { in do_signal() 280 rseq_signal_deliver(&ksig, tsk->thread.regs); in do_signal() 283 if (ksig.ka.sa.sa_flags & SA_SIGINFO) in do_signal() 284 ret = handle_rt_signal32(&ksig, oldset, tsk); in do_signal() 286 ret = handle_signal32(&ksig, oldset, tsk); in do_signal() 288 ret = handle_rt_signal64(&ksig, oldset, tsk); in do_signal() [all …]
|
/linux/arch/alpha/kernel/ |
H A D | signal.c | 345 r26 = (unsigned long) ksig->ka.ka_restorer; in setup_frame() 361 regs->r16 = ksig->sig; /* a0: signal number */ in setup_frame() 399 r26 = (unsigned long) ksig->ka.ka_restorer; in setup_rt_frame() 438 if (ksig->ka.sa.sa_flags & SA_SIGINFO) in handle_signal() 439 ret = setup_rt_frame(ksig, oldset, regs); in handle_signal() 441 ret = setup_frame(ksig, oldset, regs); in handle_signal() 443 signal_setup_done(ret, ksig, 0); in handle_signal() 487 struct ksignal ksig; in do_signal() local 490 if (get_signal(&ksig)) { in do_signal() 495 syscall_restart(r0, r19, regs, &ksig.ka); in do_signal() [all …]
|
/linux/include/linux/ |
H A D | rseq.h | 34 static inline void rseq_handle_notify_resume(struct ksignal *ksig, in rseq_handle_notify_resume() argument 38 __rseq_handle_notify_resume(ksig, regs); in rseq_handle_notify_resume() 41 static inline void rseq_signal_deliver(struct ksignal *ksig, in rseq_signal_deliver() argument 47 rseq_handle_notify_resume(ksig, regs); in rseq_signal_deliver() 96 static inline void rseq_handle_notify_resume(struct ksignal *ksig, in rseq_handle_notify_resume() argument 100 static inline void rseq_signal_deliver(struct ksignal *ksig, in rseq_signal_deliver() argument
|
/linux/arch/xtensa/kernel/ |
H A D | signal.c | 346 int err = 0, sig = ksig->sig; in setup_frame() 377 if (ksig->ka.sa.sa_flags & SA_SIGINFO) { in setup_frame() 378 err |= copy_siginfo_to_user(&frame->info, &ksig->info); in setup_frame() 389 if (ksig->ka.sa.sa_flags & SA_RESTORER) { in setup_frame() 392 (unsigned long __user *)ksig->ka.sa.sa_restorer; in setup_frame() 396 ra = (unsigned long)ksig->ka.sa.sa_restorer; in setup_frame() 455 struct ksignal ksig; in do_signal() local 459 if (get_signal(&ksig)) { in do_signal() 475 if (!(ksig.ka.sa.sa_flags & SA_RESTART)) { in do_signal() 494 ret = setup_frame(&ksig, sigmask_to_save(), regs); in do_signal() [all …]
|
/linux/arch/parisc/kernel/ |
H A D | signal.c | 234 frame = get_sigframe(&ksig->ka, usp, sigframe_size); in setup_rt_frame() 236 DBG(1, "%s: frame %p info %p\n", __func__, frame, &ksig->info); in setup_rt_frame() 261 err |= copy_siginfo_to_user(&frame->info, &ksig->info); in setup_rt_frame() 284 haddr = A(ksig->ka.sa.sa_handler); in setup_rt_frame() 351 regs->gr[26] = ksig->sig; /* signal number */ in setup_rt_frame() 389 __func__, ksig->sig, &ksig->ka, &ksig->info, oldset, regs); in handle_signal() 392 ret = setup_rt_frame(ksig, oldset, regs, in_syscall); in handle_signal() 550 struct ksignal ksig; in do_signal() local 554 has_handler = get_signal(&ksig); in do_signal() 563 syscall_restart(regs, &ksig.ka); in do_signal() [all …]
|
/linux/arch/x86/um/ |
H A D | signal.c | 366 int err = 0, sig = ksig->sig; in setup_signal_stack_sc() 375 if (ksig->ka.sa.sa_flags & SA_RESTORER) in setup_signal_stack_sc() 376 restorer = ksig->ka.sa.sa_restorer; in setup_signal_stack_sc() 412 int err = 0, sig = ksig->sig; in setup_signal_stack_si() 420 if (ksig->ka.sa.sa_flags & SA_RESTORER) in setup_signal_stack_si() 421 restorer = ksig->ka.sa.sa_restorer; in setup_signal_stack_si() 427 err |= copy_siginfo_to_user(&frame->info, &ksig->info); in setup_signal_stack_si() 493 int err = 0, sig = ksig->sig; in setup_signal_stack_si() 504 if (ksig->ka.sa.sa_flags & SA_SIGINFO) { in setup_signal_stack_si() 533 if (ksig->ka.sa.sa_flags & SA_RESTORER) in setup_signal_stack_si() [all …]
|
/linux/arch/mips/kernel/ |
H A D | signal.c | 579 sp = sigsp(sp, ksig); in get_sigframe() 739 regs->regs[ 4] = ksig->sig; in setup_frame() 788 regs->regs[ 4] = ksig->sig; in setup_rt_frame() 852 rseq_signal_deliver(ksig, regs); in handle_signal() 854 if (sig_uses_siginfo(&ksig->ka, abi)) in handle_signal() 856 ksig, regs, oldset); in handle_signal() 859 ksig, regs, oldset); in handle_signal() 861 signal_setup_done(ret, ksig, 0); in handle_signal() 866 struct ksignal ksig; in do_signal() local 868 if (get_signal(&ksig)) { in do_signal() [all …]
|