From 731758b271233b9c11052001ffc20a5a2ca1f365 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Fri, 26 Dec 2025 09:53:29 +0100 Subject: feat: kernel: system and API improvements. Signed-off-by: Amlal El Mahrouss --- src/kernel/KernelKit/FileMgr.h | 2 +- src/kernel/KernelKit/HardwareThreadScheduler.h | 10 ++++------ src/kernel/KernelKit/IDylibObject.h | 8 ++++---- src/kernel/KernelKit/ILoader.h | 14 +++++++------- src/kernel/KernelKit/PE32CodeMgr.h | 4 ---- src/kernel/NeKit/OwnPtr.h | 5 ++--- src/kernel/src/PE32CodeMgr.cc | 10 +++++++--- 7 files changed, 25 insertions(+), 28 deletions(-) diff --git a/src/kernel/KernelKit/FileMgr.h b/src/kernel/KernelKit/FileMgr.h index c04c95af..e14f6dfd 100644 --- a/src/kernel/KernelKit/FileMgr.h +++ b/src/kernel/KernelKit/FileMgr.h @@ -23,7 +23,7 @@ #define INC_FILEMGR_H /// @file FileMgr.h -/// @brief File Manager System. +/// @brief File Manager Subsystem. /// @author Amlal El Mahrouss (amlal@nekernel.org) //! Include filesystems that NeKernel supports. diff --git a/src/kernel/KernelKit/HardwareThreadScheduler.h b/src/kernel/KernelKit/HardwareThreadScheduler.h index eb38b869..6fb2dea7 100644 --- a/src/kernel/KernelKit/HardwareThreadScheduler.h +++ b/src/kernel/KernelKit/HardwareThreadScheduler.h @@ -17,11 +17,6 @@ #define kMaxAPInsideSched (4U) namespace Kernel { -class HardwareThread; -class HardwareThreadScheduler; - -using ThreadID = UInt32; - enum struct ThreadKind { kAPInvalid = 0, kAPSystemReserved = 100, // System reserved thread, well user can't use it @@ -29,9 +24,12 @@ enum struct ThreadKind { kAPRealTime, // fallback thread, cannot be used by user if not clear or // used by Kernel. kAPBoot, // The core we booted from, the mama. - kAPCount, + kAPCount = kAPBoot - kAPSystemReserved + 1, }; +/// \brief Alias for thread ID. +using ThreadID = UInt32; + /***********************************************************************************/ /// /// \name HardwareThread diff --git a/src/kernel/KernelKit/IDylibObject.h b/src/kernel/KernelKit/IDylibObject.h index 39431305..d834b8db 100644 --- a/src/kernel/KernelKit/IDylibObject.h +++ b/src/kernel/KernelKit/IDylibObject.h @@ -33,11 +33,11 @@ class IDylibObject { NE_COPY_DEFAULT(IDylibObject) - virtual DylibTraits** GetAddressOf() = 0; - virtual DylibTraits* Get() = 0; + virtual DylibTraits** GetAddressOf() { return nullptr; } + virtual DylibTraits* Get() { return nullptr; } - virtual Void Mount(DylibTraits* to_mount) = 0; - virtual Void Unmount() = 0; + virtual Void Mount(DylibTraits*) {} + virtual Void Unmount() {} }; /// @brief Pure implementation, missing method/function handler. diff --git a/src/kernel/KernelKit/ILoader.h b/src/kernel/KernelKit/ILoader.h index 77f49451..8a6b8bfa 100644 --- a/src/kernel/KernelKit/ILoader.h +++ b/src/kernel/KernelKit/ILoader.h @@ -13,7 +13,7 @@ namespace Kernel { /// @brief This interface is used to make loader contracts (MSCOFF, PEF). -/// @author @Amlal-El-Mahrouss +/// @author Amlal El Mahrouss class ILoader { public: explicit ILoader() = default; @@ -22,11 +22,11 @@ class ILoader { NE_COPY_DEFAULT(ILoader) public: - virtual _Output ErrorOr GetBlob() = 0; - virtual _Output const Char* AsString() = 0; - virtual _Output const Char* MIME() = 0; - virtual _Output const Char* Path() = 0; - virtual _Output ErrorOr FindStart() = 0; - virtual _Output ErrorOr FindSymbol(_Input const Char* name, _Input Int32 kind) = 0; + virtual _Output ErrorOr GetBlob() { return ErrorOr{}; } + virtual _Output const Char* AsString() { return ""; } + virtual _Output const Char* MIME() { return ""; } + virtual _Output const Char* Path() { return ""; } + virtual _Output ErrorOr FindStart() { return ErrorOr{}; } + virtual _Output ErrorOr FindSymbol(_Input const Char*, _Input Int32) { return ErrorOr{}; } }; } // namespace Kernel diff --git a/src/kernel/KernelKit/PE32CodeMgr.h b/src/kernel/KernelKit/PE32CodeMgr.h index c62cd518..3e359a7c 100644 --- a/src/kernel/KernelKit/PE32CodeMgr.h +++ b/src/kernel/KernelKit/PE32CodeMgr.h @@ -29,10 +29,6 @@ #include #endif -#define kPeStackSizeSymbol "__NESizeOfReserveStack" -#define kPeHeapSizeSymbol "__NESizeOfReserveHeap" -#define kPeNameSymbol "__NEProgramName" - #define kPeApplicationMime "application/vnd-portable-executable" #define kPeImageStart "__ImageStart" diff --git a/src/kernel/NeKit/OwnPtr.h b/src/kernel/NeKit/OwnPtr.h index d67236b9..ceb6142d 100644 --- a/src/kernel/NeKit/OwnPtr.h +++ b/src/kernel/NeKit/OwnPtr.h @@ -22,7 +22,7 @@ class NonNullRefPtr; template class OwnPtr final { public: - OwnPtr() = default; + OwnPtr() : fCls(nullptr) {} ~OwnPtr() { this->Reset(); } OwnPtr& operator=(const OwnPtr&) = default; @@ -51,8 +51,7 @@ class OwnPtr final { Ref AsRef() { return Ref(fCls); } explicit operator bool() { return fCls; } - bool operator!() { return !fCls; } - + private: T* fCls{nullptr}; }; diff --git a/src/kernel/src/PE32CodeMgr.cc b/src/kernel/src/PE32CodeMgr.cc index 3cf43270..42f522ff 100644 --- a/src/kernel/src/PE32CodeMgr.cc +++ b/src/kernel/src/PE32CodeMgr.cc @@ -14,6 +14,10 @@ #include #include +#define kPeStackSizeSymbol "__NESizeOfReserveStack" +#define kPeHeapSizeSymbol "__NESizeOfReserveHeap" +#define kPeNameSymbol "__NEProgramName" + namespace Kernel { namespace Detail { /***********************************************************************************/ @@ -222,17 +226,17 @@ ErrorOr PE32Loader::GetBlob() { namespace Utils { ProcessID rtl_create_user_process(PE32Loader& exec, const UserProcess::ExecutableKind& process_kind) { - auto errOrStart = exec.FindStart(); + ErrorOrAny errOrStart = exec.FindStart(); if (errOrStart.Error() != kErrorSuccess) return kSchedInvalidPID; - auto symname = exec.FindSymbol(kPeImageStart, 0); + ErrorOrAny symname = exec.FindSymbol(kPeImageStart, 0); if (!symname) { symname = ErrorOr{(VoidPtr) rt_alloc_string("USER_PROCESS_PE32+")}; } - auto id = + ProcessID id = UserProcessScheduler::The().Spawn(reinterpret_cast(symname.Leak().Leak()), errOrStart.Leak().Leak(), exec.GetBlob().Leak().Leak()); -- cgit v1.2.3