Kernel: Clean up signal handling
We now appreciate sa_mask and SA_NODEFER and change the signal mask for the duration of signal handler. This is done by making a sigprocmask syscall at the end of the signal handler. Back-to-back signals will still grow stack as original registers are popped AFTER the block mask is updated. I guess this is why linux has sigreturn(?).
This commit is contained in:
@@ -157,12 +157,13 @@ namespace Kernel
|
||||
|
||||
struct signal_handle_info_t
|
||||
{
|
||||
vaddr_t signal_handler;
|
||||
vaddr_t signal_stack_top;
|
||||
vaddr_t handler;
|
||||
vaddr_t stack_top;
|
||||
uint64_t restore_sigmask;
|
||||
bool has_sa_restart;
|
||||
};
|
||||
signal_handle_info_t remove_signal_and_get_info(int signal);
|
||||
void handle_signal_impl(int signal, const siginfo_t&, vaddr_t signal_handler, vaddr_t signal_stack_top);
|
||||
void handle_signal_impl(int signal, const siginfo_t&, const signal_handle_info_t&);
|
||||
|
||||
private:
|
||||
// NOTE: this is the first member to force it being last destructed
|
||||
|
||||
Reference in New Issue
Block a user