From 4ed658c633ce5d7c5bde4acdbe322e5f51592369 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 25 Dec 2024 14:04:14 +0100 Subject: IMPL: Important refactors and improvements of ZkaOS. Signed-off-by: Amlal El Mahrouss --- dev/Kernel/src/ACPIFactoryInterface.cc | 2 +- dev/Kernel/src/BitMapMgr.cc | 2 +- dev/Kernel/src/FS/HPFS.cc | 2 +- dev/Kernel/src/FS/NeFS.cc | 2 +- dev/Kernel/src/Heap.cc | 4 +- dev/Kernel/src/KernelMain.cc | 4 +- dev/Kernel/src/KernelPanic.cc | 130 +++++++++++++++++++++++++++++++++ dev/Kernel/src/LPC.cc | 4 +- dev/Kernel/src/PEFCodeMgr.cc | 2 +- dev/Kernel/src/Stop.cc | 130 --------------------------------- dev/Kernel/src/User.cc | 2 +- dev/Kernel/src/UserProcessScheduler.cc | 2 +- 12 files changed, 143 insertions(+), 143 deletions(-) create mode 100644 dev/Kernel/src/KernelPanic.cc delete mode 100644 dev/Kernel/src/Stop.cc (limited to 'dev/Kernel/src') diff --git a/dev/Kernel/src/ACPIFactoryInterface.cc b/dev/Kernel/src/ACPIFactoryInterface.cc index 424a951a..83890220 100644 --- a/dev/Kernel/src/ACPIFactoryInterface.cc +++ b/dev/Kernel/src/ACPIFactoryInterface.cc @@ -37,7 +37,7 @@ namespace Kernel if (num < 1) { /// stop here, we should have entries... - ke_stop(RUNTIME_CHECK_ACPI); + ke_panic(RUNTIME_CHECK_ACPI); return ErrorOr{-1}; } diff --git a/dev/Kernel/src/BitMapMgr.cc b/dev/Kernel/src/BitMapMgr.cc index be9f73b8..f73ea911 100644 --- a/dev/Kernel/src/BitMapMgr.cc +++ b/dev/Kernel/src/BitMapMgr.cc @@ -13,7 +13,7 @@ #endif #include -#include +#include #define kBitMapMagic (0x10210U) diff --git a/dev/Kernel/src/FS/HPFS.cc b/dev/Kernel/src/FS/HPFS.cc index 8aba73ac..98c41f23 100644 --- a/dev/Kernel/src/FS/HPFS.cc +++ b/dev/Kernel/src/FS/HPFS.cc @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/dev/Kernel/src/FS/NeFS.cc b/dev/Kernel/src/FS/NeFS.cc index 1dd08e4f..650d42c3 100644 --- a/dev/Kernel/src/FS/NeFS.cc +++ b/dev/Kernel/src/FS/NeFS.cc @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/dev/Kernel/src/Heap.cc b/dev/Kernel/src/Heap.cc index 77425670..2575bbcc 100644 --- a/dev/Kernel/src/Heap.cc +++ b/dev/Kernel/src/Heap.cc @@ -105,7 +105,7 @@ namespace Kernel return nullptr; kcout << "This function is not implemented by minOSKrnl, please use the BSD's realloc instead.\r"; - ke_stop(RUNTIME_CHECK_PROCESS); + ke_panic(RUNTIME_CHECK_PROCESS); return nullptr; } @@ -235,7 +235,7 @@ namespace Kernel { if (!heap_info_ptr->fUser) { - ke_stop(RUNTIME_CHECK_POINTER); + ke_panic(RUNTIME_CHECK_POINTER); } } } diff --git a/dev/Kernel/src/KernelMain.cc b/dev/Kernel/src/KernelMain.cc index cc889619..d3498f24 100644 --- a/dev/Kernel/src/KernelMain.cc +++ b/dev/Kernel/src/KernelMain.cc @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright ZKA Technologies + Copyright Theater Quality Inc File: Main.cxx Purpose: Main entrypoint of kernel. @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include namespace Kernel::Detail diff --git a/dev/Kernel/src/KernelPanic.cc b/dev/Kernel/src/KernelPanic.cc new file mode 100644 index 00000000..0fd2ec64 --- /dev/null +++ b/dev/Kernel/src/KernelPanic.cc @@ -0,0 +1,130 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define kWebsiteURL "https://el-mahrouss-logic.com/products/help/" + +/* Each error code is attributed with an ID, which will prompt a string onto the + * screen. Wait for debugger... */ + +namespace Kernel +{ + /***********************************************************************************/ + /// @brief Stops execution of the kernel. + /// @param id kernel stop ID. + /***********************************************************************************/ + Void ke_panic(const Kernel::Int32& id) + { + fb_init(); + + auto panic_text = RGB(0xff, 0xff, 0xff); + + auto start_y = 50; + auto x = 10; + + if (id != RUNTIME_CHECK_BOOTSTRAP) + fb_render_string("Kernel Panic!", start_y, x, panic_text); + else + fb_render_string("Kernel Bootstrap:", start_y, x, panic_text); + + start_y += 10; + + fb_fini(); + + // show text according to error id. + + switch (id) + { + case RUNTIME_CHECK_PROCESS: { + fb_render_string("0x00000008: Invalid process behavior.", start_y, x, panic_text); + break; + } + case RUNTIME_CHECK_ACPI: { + fb_render_string("0x00000006: ACPI configuration error.", start_y, x, panic_text); + break; + } + case RUNTIME_CHECK_PAGE: { + fb_render_string("0x0000000B: Write/Read in non paged area.", start_y, x, panic_text); + break; + } + case RUNTIME_CHECK_FILESYSTEM: { + fb_render_string("0x0000000A: Filesystem driver error.", start_y, x, panic_text); + break; + } + case RUNTIME_CHECK_POINTER: { + fb_render_string("0x00000000: Kernel heap is corrupted.", start_y, x, panic_text); + break; + } + case RUNTIME_CHECK_BAD_BEHAVIOR: { + fb_render_string("0x00000009: Bad behavior.", start_y, x, panic_text); + break; + } + case RUNTIME_CHECK_BOOTSTRAP: { + fb_render_string("0x0000000A: Kernel has finished running, running OSLdr...", start_y, x, panic_text); + return; + } + case RUNTIME_CHECK_HANDSHAKE: { + fb_render_string("0x00000005: Handshake fault.", start_y, x, panic_text); + break; + } + case RUNTIME_CHECK_IPC: { + fb_render_string("0x00000003: Bad LPC message.", start_y, x, panic_text); + break; + } + case RUNTIME_CHECK_INVALID_PRIVILEGE: { + fb_render_string("0x00000007: Privilege access violation.", start_y, x, panic_text); + break; + case RUNTIME_CHECK_UNEXCPECTED: { + fb_render_string("0x0000000B: Unexpected violation.", start_y, x, panic_text); + break; + } + case RUNTIME_CHECK_VIRTUAL_OUT_OF_MEM: { + fb_render_string("0x10000001: Out of virtual memory.", start_y, x, panic_text); + + break; + } + case RUNTIME_CHECK_FAILED: { + fb_render_string("0x10000001: Kernel Bug check appears to have failed, a dump has been written to the storage.", start_y, x, panic_text); + break; + } + default: { + fb_render_string("0xFFFFFFFC: Unknown Kernel Error code.", start_y, x, panic_text); + break; + } + } + }; + + RecoveryFactory::Recover(); + } + + Void RecoveryFactory::Recover() noexcept + { + while (YES) + { + HAL::rt_halt(); + } + } + + void ke_runtime_check(bool expr, const Char* file, const Char* line) + { + if (!expr) + { + kcout << "FAILED: FILE: " << file << endl; + kcout << "FAILED: LINE: " << line << endl; + + ke_panic(RUNTIME_CHECK_FAILED); // Runtime Check failed + } + } +} // namespace Kernel diff --git a/dev/Kernel/src/LPC.cc b/dev/Kernel/src/LPC.cc index 07a7b982..f9a13796 100644 --- a/dev/Kernel/src/LPC.cc +++ b/dev/Kernel/src/LPC.cc @@ -5,7 +5,7 @@ ------------------------------------------- */ #include -#include +#include namespace Kernel { @@ -18,7 +18,7 @@ namespace Kernel { if (kRaiseOnBugCheck) { - ke_stop(RUNTIME_CHECK_BAD_BEHAVIOR); + ke_panic(RUNTIME_CHECK_BAD_BEHAVIOR); } return No; diff --git a/dev/Kernel/src/PEFCodeMgr.cc b/dev/Kernel/src/PEFCodeMgr.cc index a27db7e3..a8205004 100644 --- a/dev/Kernel/src/PEFCodeMgr.cc +++ b/dev/Kernel/src/PEFCodeMgr.cc @@ -9,7 +9,7 @@ #include #include #include -#include +#include #include #include diff --git a/dev/Kernel/src/Stop.cc b/dev/Kernel/src/Stop.cc deleted file mode 100644 index a8974849..00000000 --- a/dev/Kernel/src/Stop.cc +++ /dev/null @@ -1,130 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define kWebsiteURL "https://el-mahrouss-logic.com/products/help/" - -/* Each error code is attributed with an ID, which will prompt a string onto the - * screen. Wait for debugger... */ - -namespace Kernel -{ - /***********************************************************************************/ - /// @brief Stops execution of the kernel. - /// @param id kernel stop ID. - /***********************************************************************************/ - Void ke_stop(const Kernel::Int32& id) - { - cg_init(); - - auto panic_text = RGB(0xff, 0xff, 0xff); - - auto start_y = 50; - auto x = 10; - - if (id != RUNTIME_CHECK_BOOTSTRAP) - fb_render_string("Kernel Panic!", start_y, x, panic_text); - else - fb_render_string("Kernel Bootstrap:", start_y, x, panic_text); - - start_y += 10; - - cg_fini(); - - // show text according to error id. - - switch (id) - { - case RUNTIME_CHECK_PROCESS: { - fb_render_string("0x00000008: Invalid process behavior.", start_y, x, panic_text); - break; - } - case RUNTIME_CHECK_ACPI: { - fb_render_string("0x00000006: ACPI configuration error.", start_y, x, panic_text); - break; - } - case RUNTIME_CHECK_PAGE: { - fb_render_string("0x0000000B: Write/Read in non paged area.", start_y, x, panic_text); - break; - } - case RUNTIME_CHECK_FILESYSTEM: { - fb_render_string("0x0000000A: Filesystem driver error.", start_y, x, panic_text); - break; - } - case RUNTIME_CHECK_POINTER: { - fb_render_string("0x00000000: Kernel heap is corrupted.", start_y, x, panic_text); - break; - } - case RUNTIME_CHECK_BAD_BEHAVIOR: { - fb_render_string("0x00000009: Bad behavior.", start_y, x, panic_text); - break; - } - case RUNTIME_CHECK_BOOTSTRAP: { - fb_render_string("0x0000000A: Kernel has finished running, running OSLdr...", start_y, x, panic_text); - return; - } - case RUNTIME_CHECK_HANDSHAKE: { - fb_render_string("0x00000005: Handshake fault.", start_y, x, panic_text); - break; - } - case RUNTIME_CHECK_IPC: { - fb_render_string("0x00000003: Bad LPC message.", start_y, x, panic_text); - break; - } - case RUNTIME_CHECK_INVALID_PRIVILEGE: { - fb_render_string("0x00000007: Privilege access violation.", start_y, x, panic_text); - break; - case RUNTIME_CHECK_UNEXCPECTED: { - fb_render_string("0x0000000B: Unexpected violation.", start_y, x, panic_text); - break; - } - case RUNTIME_CHECK_VIRTUAL_OUT_OF_MEM: { - fb_render_string("0x10000001: Out of virtual memory.", start_y, x, panic_text); - - break; - } - case RUNTIME_CHECK_FAILED: { - fb_render_string("0x10000001: Kernel Bug check appears to have failed, a dump has been written to the storage.", start_y, x, panic_text); - break; - } - default: { - fb_render_string("0xFFFFFFFC: Unknown Kernel Error code.", start_y, x, panic_text); - break; - } - } - }; - - RecoveryFactory::Recover(); - } - - Void RecoveryFactory::Recover() noexcept - { - while (YES) - { - HAL::rt_halt(); - } - } - - void ke_runtime_check(bool expr, const Char* file, const Char* line) - { - if (!expr) - { - kcout << "FAILED: FILE: " << file << endl; - kcout << "FAILED: LINE: " << line << endl; - - ke_stop(RUNTIME_CHECK_FAILED); // Runtime Check failed - } - } -} // namespace Kernel diff --git a/dev/Kernel/src/User.cc b/dev/Kernel/src/User.cc index d45c8e1b..8d1bcac9 100644 --- a/dev/Kernel/src/User.cc +++ b/dev/Kernel/src/User.cc @@ -12,7 +12,7 @@ #include #include -#include +#include #include #include #include diff --git a/dev/Kernel/src/UserProcessScheduler.cc b/dev/Kernel/src/UserProcessScheduler.cc index 512b0c22..3904c222 100644 --- a/dev/Kernel/src/UserProcessScheduler.cc +++ b/dev/Kernel/src/UserProcessScheduler.cc @@ -256,7 +256,7 @@ namespace Kernel if (!success) { - ke_stop(RUNTIME_CHECK_PROCESS); + ke_panic(RUNTIME_CHECK_PROCESS); } this->DylibDelegate = nullptr; -- cgit v1.2.3