diff options
Diffstat (limited to 'src/kernel/HALKit/AMD64/HalKernelPanic.cpp')
| -rw-r--r-- | src/kernel/HALKit/AMD64/HalKernelPanic.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
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(); } } |
