From 11034c004ee7b232e53d69e9f1ae9000f008285f Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sun, 31 Aug 2025 09:47:51 +0200 Subject: feat: kernel: Revamped `SignalKit` framework. DDK revamp. ci: testing improvements. Signed-off-by: Amlal El Mahrouss --- dev/kernel/ArchKit/ArchKit.h | 2 + dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc | 16 ++++---- dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc | 2 +- dev/kernel/HALKit/ARM64/HalKernelMain.cc | 4 +- dev/kernel/SignalKit/SignalGen.h | 43 ++++++++++++++++++++++ dev/kernel/SignalKit/Signals.h | 24 ------------ dev/kernel/src/UserProcessScheduler.cc | 4 +- dev/libDDK/ddk.json | 23 ------------ dev/libDDK/libDDK.json | 23 ++++++++++++ 9 files changed, 83 insertions(+), 58 deletions(-) create mode 100644 dev/kernel/SignalKit/SignalGen.h delete mode 100644 dev/kernel/SignalKit/Signals.h delete mode 100644 dev/libDDK/ddk.json create mode 100644 dev/libDDK/libDDK.json (limited to 'dev') diff --git a/dev/kernel/ArchKit/ArchKit.h b/dev/kernel/ArchKit/ArchKit.h index bc3447fc..2042bded 100644 --- a/dev/kernel/ArchKit/ArchKit.h +++ b/dev/kernel/ArchKit/ArchKit.h @@ -69,6 +69,7 @@ namespace HAL { typedef Kernel::Void (*rt_syscall_proc)(Kernel::VoidPtr); +/// @brief System Call Dispatch. struct HAL_DISPATCH_ENTRY final { Kernel::UInt64 fHash; Kernel::Bool fHooked; @@ -79,6 +80,7 @@ struct HAL_DISPATCH_ENTRY final { typedef Kernel::Void (*rt_kerncall_proc)(Kernel::SizeT, Kernel::VoidPtr, Kernel::SizeT); +/// @brief Kernel Call Dispatch. struct HAL_KERNEL_DISPATCH_ENTRY final { Kernel::UInt64 fHash; Kernel::Bool fHooked; diff --git a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc index b837497e..7408639c 100644 --- a/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc +++ b/dev/kernel/HALKit/AMD64/HalCoreInterruptHandler.cc @@ -8,7 +8,7 @@ #include #include #include -#include +#include EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip); @@ -80,8 +80,9 @@ EXTERN_C void idt_handle_math(Kernel::UIntPtr rsp) { hal_idt_send_eoi(8); process.Leak().Signal.SignalArg = rsp; - process.Leak().Signal.SignalID = SIGKILL; - process.Leak().Signal.Status = process.Leak().Status; + process.Leak().Signal.SignalID = sig_generate_unique(); + ; + process.Leak().Signal.Status = process.Leak().Status; } /// @brief Handle any generic fault. @@ -95,8 +96,9 @@ EXTERN_C void idt_handle_generic(Kernel::UIntPtr rsp) { Kernel::kout << "Kernel: Generic Process Fault.\r"; process.Leak().Signal.SignalArg = rsp; - process.Leak().Signal.SignalID = SIGKILL; - process.Leak().Signal.Status = process.Leak().Status; + process.Leak().Signal.SignalID = sig_generate_unique(); + ; + process.Leak().Signal.Status = process.Leak().Status; Kernel::kout << "Kernel: SIGKILL status.\r"; } @@ -107,7 +109,7 @@ EXTERN_C Kernel::Void idt_handle_breakpoint(Kernel::UIntPtr rip) { hal_idt_send_eoi(3); process.Leak().Signal.SignalArg = rip; - process.Leak().Signal.SignalID = SIGTRAP; + process.Leak().Signal.SignalID = sig_generate_unique(); process.Leak().Signal.Status = process.Leak().Status; @@ -123,7 +125,7 @@ EXTERN_C void idt_handle_ud(Kernel::UIntPtr rsp) { hal_idt_send_eoi(6); process.Leak().Signal.SignalArg = rsp; - process.Leak().Signal.SignalID = SIGKILL; + process.Leak().Signal.SignalID = sig_generate_unique(); process.Leak().Signal.Status = process.Leak().Status; } diff --git a/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc b/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc index 0c26f4cb..dd875c63 100644 --- a/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc +++ b/dev/kernel/HALKit/ARM64/HalCoreInterruptHandler.cc @@ -8,7 +8,7 @@ #include #include #include -#include +#include EXTERN_C Kernel::Void int_handle_breakpoint(Kernel::UIntPtr rip); EXTERN_C BOOL mp_handle_gic_interrupt_el0(Void); diff --git a/dev/kernel/HALKit/ARM64/HalKernelMain.cc b/dev/kernel/HALKit/ARM64/HalKernelMain.cc index 20bd3d8a..d7663f4e 100644 --- a/dev/kernel/HALKit/ARM64/HalKernelMain.cc +++ b/dev/kernel/HALKit/ARM64/HalKernelMain.cc @@ -37,6 +37,8 @@ EXTERN_C void hal_init_platform(Kernel::HEL::BootInfoHeader* handover_hdr) { FB::fb_clear_video(); + kBitMapCursor = 0UL; + #ifdef __NE_ARM64_EFI__ fw_init_efi((EfiSystemTable*) handover_hdr->f_FirmwareCustomTables[1]); @@ -74,4 +76,4 @@ EXTERN_C void hal_init_platform(Kernel::HEL::BootInfoHeader* handover_hdr) { while (YES) ; } -#endif \ No newline at end of file +#endif diff --git a/dev/kernel/SignalKit/SignalGen.h b/dev/kernel/SignalKit/SignalGen.h new file mode 100644 index 00000000..e1684acb --- /dev/null +++ b/dev/kernel/SignalKit/SignalGen.h @@ -0,0 +1,43 @@ +/* ------------------------------------------- + + Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include + +#define SIGKILL 1 +#define SIGPAUS 2 +#define SIGEXEC 3 +#define SIGTRAP 4 +#define SIGABRT 5 +#define SIGCONT 6 +#define SIGSEG 7 + +#define SIGBREK 660 +#define SIGATCH 661 +#define SIGDTCH 662 + +/// @author Amlal El Mahrouss +/// @brief Signal Generation API. + +namespace Kernel { +typedef UInt32 rt_signal_kind; + +/// @brief Standard signal seed for general purpose usage. +inline static constexpr auto kBasicSignalSeed = 0x0895034f; + +/// @brief Generate signal from **Sig** +template +inline rt_signal_kind sig_generate_unique() { + static_assert(Sig > 0, "Signal is zero (invalid)"); + return Sig ^ Seed; +} + +/// @brief Validate signal from **sig** +constexpr BOOL sig_validate_unique(rt_signal_kind sig) { + return sig > 0; +} +} // namespace Kernel diff --git a/dev/kernel/SignalKit/Signals.h b/dev/kernel/SignalKit/Signals.h deleted file mode 100644 index 142ed3ab..00000000 --- a/dev/kernel/SignalKit/Signals.h +++ /dev/null @@ -1,24 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include - -#define SIGKILL 0 -#define SIGPAUS 1 -#define SIGEXEC 2 -#define SIGTRAP 3 -#define SIGABRT 4 -#define SIGCONT 5 - -#define SIGBREK 666 -#define SIGATCH 661 -#define SIGDTCH 662 - -namespace Kernel { -typedef UInt32 SignalKind; -} \ No newline at end of file diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc index 8a3152f0..15da4431 100644 --- a/dev/kernel/src/UserProcessScheduler.cc +++ b/dev/kernel/src/UserProcessScheduler.cc @@ -21,7 +21,7 @@ #include #include #include -#include +#include ///! BUGS: 0 @@ -593,7 +593,7 @@ Bool UserProcessHelper::CanBeScheduled(const USER_PROCESS& process) { // real time processes shouldn't wait that much. if (process.Affinity == AffinityKind::kRealTime) return Yes; - if (process.Signal.SignalID == SIGTRAP) { + if (process.Signal.SignalID == sig_generate_unique()) { return No; } diff --git a/dev/libDDK/ddk.json b/dev/libDDK/ddk.json deleted file mode 100644 index ffc05f5f..00000000 --- a/dev/libDDK/ddk.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compiler_path": "x86_64-w64-mingw32-gcc", - "compiler_std": "c++20", - "headers_path": ["../", "./"], - "sources_path": ["src/*.c", "src/*.cc", "src/*.S"], - "output_name": "ddk.sys", - "compiler_flags": [ - "-ffreestanding", - "-shared", - "-std=c17", - "-fno-rtti", - "-fno-exceptions", - "-Wl,--subsystem=17" - ], - "cpp_macros": [ - "__NEOSKRNL__", - "__DDK_AMD64__", - "__DDK__", - "kDDKVersionHighest=0x0100", - "kDDKVersionLowest=0x0100", - "kDDKVersion=0x0100" - ] -} diff --git a/dev/libDDK/libDDK.json b/dev/libDDK/libDDK.json new file mode 100644 index 00000000..113dd585 --- /dev/null +++ b/dev/libDDK/libDDK.json @@ -0,0 +1,23 @@ +{ + "compiler_path": "x86_64-w64-mingw32-gcc", + "compiler_std": "c++20", + "headers_path": ["../", "./"], + "sources_path": ["src/*.c", "src/*.cc", "src/*.S"], + "output_name": "libDDK.dll", + "compiler_flags": [ + "-ffreestanding", + "-shared", + "-std=c17", + "-fno-rtti", + "-fno-exceptions", + "-Wl,--subsystem=17" + ], + "cpp_macros": [ + "__NEOSKRNL__", + "__DDK_AMD64__", + "__DDK__", + "kDDKVersionHighest=0x0100", + "kDDKVersionLowest=0x0100", + "kDDKVersion=0x0100" + ] +} -- cgit v1.2.3