October 2017
Intermediate to advanced
354 pages
9h 28m
English
To set up a stack frame for a user-mode handler, handle_signal() invokes setup_rt_frame() with the address of the instance of ksignal, which contains the k_sigaction associated with the signal and the pointer to struct pt_regs in the kernel stack of the current process. Following is x86 implementation of setup_rt_frame():
setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs){ int usig = ksig->sig; sigset_t *set = sigmask_to_save(); compat_sigset_t *cset = (compat_sigset_t *) set; /* Set up the stack frame */ if (is_ia32_frame(ksig)) { if (ksig->ka.sa.sa_flags & SA_SIGINFO) return ia32_setup_rt_frame(usig, ksig, cset, regs); // for 32bit systems with SA_SIGINFO else return ia32_setup_frame(usig, ksig, ...