summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal <amlalelmahrouss@icloud.com>2024-12-07 11:45:47 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-12-07 15:30:32 +0100
commit829821e56b88a2aa825265f5c3ca9c97a8c1e961 (patch)
tree1f9844bf3afef9480e368c52e17c9df562ff894f /dev
parentdc2d81f3c7628433bd3c51f1624200b3913ac746 (diff)
Fix Readme SSH link.
Ammend (Error): Fixing #8 issue currently (WiP) Signed-off-by: Amlal <amlalelmahrouss@icloud.com> Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev')
-rw-r--r--dev/ZKAKit/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc25
-rw-r--r--dev/ZKAKit/amd64-efi.make2
-rw-r--r--dev/ZKAKit/src/UserProcessScheduler.cc3
3 files changed, 28 insertions, 2 deletions
diff --git a/dev/ZKAKit/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc b/dev/ZKAKit/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
index 1fb0cfce..db400e02 100644
--- a/dev/ZKAKit/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
+++ b/dev/ZKAKit/HALKit/AMD64/HalCoreInterruptHandlerAMD64.cc
@@ -14,7 +14,20 @@
EXTERN_C void idt_handle_gpf(Kernel::UIntPtr rsp)
{
kcout << "Kernel: GPF.\r";
- Kernel::UserProcessScheduler::The().GetCurrentProcess().Leak().Crash();
+
+ auto process = Kernel::UserProcessScheduler::The().GetCurrentProcess();
+
+ process.Leak().ProcessSignal.SignalIP = 0UL;
+ process.Leak().ProcessSignal.SignalID = SIGKILL;
+ process.Leak().ProcessSignal.PreviousStatus = process.Leak().Status;
+
+ kcout << "Kernel: PRCFROZE status set..\r";
+
+ process.Leak().Status = Kernel::ProcessStatusKind::kFrozen;
+
+ process.Leak().Crash();
+
+ Kernel::ke_stop(RUNTIME_CHECK_POINTER);
}
/// @brief Handle page fault.
@@ -36,6 +49,8 @@ EXTERN_C void idt_handle_pf(Kernel::UIntPtr rsp)
process.Leak().Status = Kernel::ProcessStatusKind::kFrozen;
process.Leak().Crash();
+
+ Kernel::ke_stop(RUNTIME_CHECK_PAGE);
}
/// @brief Handle scheduler interrupt.
@@ -62,6 +77,8 @@ EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp)
process.Leak().Status = Kernel::ProcessStatusKind::kFrozen;
process.Leak().Crash();
+
+ Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED);
}
/// @brief Handle any generic fault.
@@ -81,6 +98,8 @@ EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp)
process.Leak().Status = Kernel::ProcessStatusKind::kFrozen;
process.Leak().Crash();
+
+ Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED);
}
EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip)
@@ -99,6 +118,8 @@ EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip)
kcout << "Kernel: PRCFROZE status set..\r";
process.Leak().Status = Kernel::ProcessStatusKind::kFrozen;
+
+ Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED);
}
/// @brief Handle #UD fault.
@@ -118,6 +139,8 @@ EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp)
process.Leak().Status = Kernel::ProcessStatusKind::kFrozen;
process.Leak().Crash();
+
+ Kernel::ke_stop(RUNTIME_CHECK_UNEXCPECTED);
}
/// @brief Enter syscall from assembly.
diff --git a/dev/ZKAKit/amd64-efi.make b/dev/ZKAKit/amd64-efi.make
index 0e279520..dd9567d2 100644
--- a/dev/ZKAKit/amd64-efi.make
+++ b/dev/ZKAKit/amd64-efi.make
@@ -26,7 +26,7 @@ DISK_DRV = -D__AHCI__
endif
ifneq ($(DEBUG_SUPPORT), )
-DEBUG_MACRO = -D__DEBUG__
+DEBUG_MACRO = -D__DEBUG__
endif
COPY = cp
diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc
index 4b24d98a..9524b7b8 100644
--- a/dev/ZKAKit/src/UserProcessScheduler.cc
+++ b/dev/ZKAKit/src/UserProcessScheduler.cc
@@ -57,6 +57,9 @@ namespace Kernel
Void UserProcess::Crash()
{
+ if (this->Status != ProcessStatusKind::kRunning)
+ return;
+
kcout << this->Name << ": crashed, error id: " << number(kErrorProcessFault) << endl;
this->Exit(kErrorProcessFault);
}