kernel: Add default actions for signals

This commit is contained in:
apio 2023-07-10 19:59:01 +02:00
parent bdcb690a7a
commit fc3fdc2b87
Signed by: apio
GPG Key ID: B8A7D06E42258954

View File

@ -98,6 +98,16 @@ Result<SharedPtr<VFS::Inode>> Thread::resolve_atfile(int dirfd, const String& pa
unreachable(); unreachable();
} }
enum class DefaultSignalAction
{
Ignore,
Terminate,
};
static constexpr DefaultSignalAction default_actions[] = {
DefaultSignalAction::Terminate // SIGABRT
};
void Thread::process_pending_signals(Registers* current_regs) void Thread::process_pending_signals(Registers* current_regs)
{ {
for (int i = 0; i < NSIG; i++) for (int i = 0; i < NSIG; i++)
@ -123,9 +133,15 @@ void Thread::process_pending_signals(Registers* current_regs)
return; return;
} }
kinfoln("signal: using default behavior (handler=SIG_DFL) (terminating)"); kinfoln("signal: using default behavior (handler=SIG_DFL)");
// FIXME: Add different default handlers for different signals and add signal exit codes.
exit_and_signal_parent(255); auto action = default_actions[i];
switch (action)
{
case DefaultSignalAction::Ignore: return;
// FIXME: Add signal exit codes.
case DefaultSignalAction::Terminate: exit_and_signal_parent(255);
}
} }
// If we fail to deliver the signal (usually because there's not enough space on the stack), execute the // If we fail to deliver the signal (usually because there's not enough space on the stack), execute the
// default action. // default action.