Fix signals from exception handler

This commit is contained in:
EnderIce2
2024-03-28 03:15:05 +02:00
parent 8be2e10a8c
commit 5a00e91011
2 changed files with 20 additions and 12 deletions

View File

@ -153,6 +153,7 @@ nsa bool UserModeExceptionHandler(CPU::ExceptionFrame *Frame)
dbgPrint(Frame);
#endif
int sigRet = -1;
switch (Frame->InterruptNumber)
{
case CPU::x86::PageFault:
@ -169,15 +170,15 @@ nsa bool UserModeExceptionHandler(CPU::ExceptionFrame *Frame)
return true;
}
proc->Signals.SendSignal(SIGSEGV,
{Tasking::KILL_CRASH});
sigRet = proc->Signals.SendSignal(SIGSEGV,
{Tasking::KILL_CRASH});
break;
}
case CPU::x86::Debug:
case CPU::x86::Breakpoint:
{
proc->Signals.SendSignal(SIGTRAP,
{Tasking::KILL_CRASH});
sigRet = proc->Signals.SendSignal(SIGTRAP,
{Tasking::KILL_CRASH});
break;
}
case CPU::x86::DivideByZero:
@ -186,21 +187,21 @@ nsa bool UserModeExceptionHandler(CPU::ExceptionFrame *Frame)
case CPU::x86::x87FloatingPoint:
case CPU::x86::SIMDFloatingPoint:
{
proc->Signals.SendSignal(SIGFPE,
{Tasking::KILL_CRASH});
sigRet = proc->Signals.SendSignal(SIGFPE,
{Tasking::KILL_CRASH});
break;
}
case CPU::x86::InvalidOpcode:
case CPU::x86::GeneralProtectionFault:
{
proc->Signals.SendSignal(SIGILL,
{Tasking::KILL_CRASH});
sigRet = proc->Signals.SendSignal(SIGILL,
{Tasking::KILL_CRASH});
break;
}
case CPU::x86::DeviceNotAvailable:
{
proc->Signals.SendSignal(SIGBUS,
{Tasking::KILL_CRASH});
sigRet = proc->Signals.SendSignal(SIGBUS,
{Tasking::KILL_CRASH});
break;
}
case CPU::x86::NonMaskableInterrupt:
@ -221,6 +222,13 @@ nsa bool UserModeExceptionHandler(CPU::ExceptionFrame *Frame)
}
}
if (sigRet == 0)
{
trace("User mode exception handler handled");
thread->SetState(Tasking::Ready);
return true;
}
error("User mode exception handler failed");
return false;
}