Implement sending signals to blocked-in-kernel processes.

This is dirty but pretty cool! If we have a pending, unmasked signal for
a process that's blocked inside the kernel, we set up alternate stacks
for that process and unblock it to execute the signal handler.

A slightly different return trampoline is used here: since we need to
get back into the kernel, a dedicated syscall is used (sys$sigreturn.)

This restores the TSS contents of the process to the state it was in
while we were originally blocking in the kernel.

NOTE: There's currently only one "kernel resume TSS" so signal nesting
definitely won't work.
This commit is contained in:
Andreas Kling 2018-11-07 21:19:47 +01:00
parent c8b308910e
commit 03a8357e84
Notes: sideshowbarker 2024-07-19 18:32:19 +09:00
10 changed files with 190 additions and 27 deletions

View file

@ -1,7 +1,7 @@
#include "FileDescriptor.h"
#include "FileSystem.h"
#include "CharacterDevice.h"
#include "sys-errno.h"
#include <LibC/errno_numbers.h>
#include "UnixTypes.h"
#include <AK/BufferStream.h>