diff options
Diffstat (limited to 'src/kernel/HALKit')
| -rw-r--r-- | src/kernel/HALKit/AMD64/HalKernelMain.cpp | 3 | ||||
| -rw-r--r-- | src/kernel/HALKit/AMD64/HalKernelPanic.cpp | 20 |
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(); } } |
