summaryrefslogtreecommitdiffhomepage
path: root/src/kernel/HALKit
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/HALKit')
-rw-r--r--src/kernel/HALKit/AMD64/HalKernelMain.cpp3
-rw-r--r--src/kernel/HALKit/AMD64/HalKernelPanic.cpp20
2 files changed, 22 insertions, 1 deletions
diff --git a/src/kernel/HALKit/AMD64/HalKernelMain.cpp b/src/kernel/HALKit/AMD64/HalKernelMain.cpp
index ed508104..cb5fd461 100644
--- a/src/kernel/HALKit/AMD64/HalKernelMain.cpp
+++ b/src/kernel/HALKit/AMD64/HalKernelMain.cpp
@@ -156,7 +156,8 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) {
PEFLoader ldr("/system/init.out");
if (ldr.IsLoaded()) rtl_create_user_process(ldr, UserProcess::ExecutableKind::kExecutableKind);
-
+ else ke_panic(RUNTIME_CHECK_PROCESS, "RuntimeCheck: Invalid Process Data!");
+
UserProcessScheduler::The().SwitchTeam(kMidUserTeam);
while (YES);
diff --git a/src/kernel/HALKit/AMD64/HalKernelPanic.cpp b/src/kernel/HALKit/AMD64/HalKernelPanic.cpp
index 8c498b68..827bc5c3 100644
--- a/src/kernel/HALKit/AMD64/HalKernelPanic.cpp
+++ b/src/kernel/HALKit/AMD64/HalKernelPanic.cpp
@@ -38,7 +38,27 @@ Void ke_panic(const Kernel::Int32& id, const Char* message) {
}
Void RecoveryFactory::Recover() {
+ STATIC BOOL alreadyDumped = NO;
+#if defined(__FSKIT_INCLUDES_OPENHEFS__)
+ if (alreadyDumped) {
+ HAL::rt_cli();
+ HAL::rt_halt();
+ }
+
+ alreadyDumped = YES;
+
+ HeFileSystemMgr mgr;
+ auto node = mgr.Open("/system/dump.dmp", "wb");
+
+
+ if (node && hal_read_cr2()) mgr.Write(node, hal_read_cr2(), 0, 0x100);
+ if (node) mm_free_ptr(node);
+
+ node = nullptr;
+#endif
+
while (YES) {
+ HAL::rt_cli();
HAL::rt_halt();
}
}