mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 15:34:33 +00:00
Fix signals from exception handler
This commit is contained in:
parent
8be2e10a8c
commit
5a00e91011
@ -153,6 +153,7 @@ nsa bool UserModeExceptionHandler(CPU::ExceptionFrame *Frame)
|
||||
dbgPrint(Frame);
|
||||
#endif
|
||||
|
||||
int sigRet = -1;
|
||||
switch (Frame->InterruptNumber)
|
||||
{
|
||||
case CPU::x86::PageFault:
|
||||
@ -169,14 +170,14 @@ nsa bool UserModeExceptionHandler(CPU::ExceptionFrame *Frame)
|
||||
return true;
|
||||
}
|
||||
|
||||
proc->Signals.SendSignal(SIGSEGV,
|
||||
sigRet = proc->Signals.SendSignal(SIGSEGV,
|
||||
{Tasking::KILL_CRASH});
|
||||
break;
|
||||
}
|
||||
case CPU::x86::Debug:
|
||||
case CPU::x86::Breakpoint:
|
||||
{
|
||||
proc->Signals.SendSignal(SIGTRAP,
|
||||
sigRet = proc->Signals.SendSignal(SIGTRAP,
|
||||
{Tasking::KILL_CRASH});
|
||||
break;
|
||||
}
|
||||
@ -186,20 +187,20 @@ nsa bool UserModeExceptionHandler(CPU::ExceptionFrame *Frame)
|
||||
case CPU::x86::x87FloatingPoint:
|
||||
case CPU::x86::SIMDFloatingPoint:
|
||||
{
|
||||
proc->Signals.SendSignal(SIGFPE,
|
||||
sigRet = proc->Signals.SendSignal(SIGFPE,
|
||||
{Tasking::KILL_CRASH});
|
||||
break;
|
||||
}
|
||||
case CPU::x86::InvalidOpcode:
|
||||
case CPU::x86::GeneralProtectionFault:
|
||||
{
|
||||
proc->Signals.SendSignal(SIGILL,
|
||||
sigRet = proc->Signals.SendSignal(SIGILL,
|
||||
{Tasking::KILL_CRASH});
|
||||
break;
|
||||
}
|
||||
case CPU::x86::DeviceNotAvailable:
|
||||
{
|
||||
proc->Signals.SendSignal(SIGBUS,
|
||||
sigRet = proc->Signals.SendSignal(SIGBUS,
|
||||
{Tasking::KILL_CRASH});
|
||||
break;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
@ -611,7 +611,7 @@ namespace Tasking
|
||||
pcb->SetState(Zombie);
|
||||
else
|
||||
pcb->SetState(Terminated);
|
||||
return 0;
|
||||
return val.sival_int == Tasking::KILL_CRASH ? -EFAULT : 0;
|
||||
}
|
||||
case SIG_IGN:
|
||||
{
|
||||
@ -635,7 +635,7 @@ namespace Tasking
|
||||
pcb->SetState(CoreDump);
|
||||
else
|
||||
pcb->SetState(Terminated);
|
||||
return 0;
|
||||
return val.sival_int == Tasking::KILL_CRASH ? -EFAULT : 0;
|
||||
}
|
||||
case SIG_STOP:
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user