diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-12-26 09:53:29 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-12-26 09:53:29 +0100 |
| commit | 731758b271233b9c11052001ffc20a5a2ca1f365 (patch) | |
| tree | 551322f342a9d6587b22bfeec5c2f79a7dd68810 | |
| parent | 0c6bfdb34cdb2435b95d256ddc0917a0a115c893 (diff) | |
feat: kernel: system and API improvements.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
| -rw-r--r-- | src/kernel/KernelKit/FileMgr.h | 2 | ||||
| -rw-r--r-- | src/kernel/KernelKit/HardwareThreadScheduler.h | 10 | ||||
| -rw-r--r-- | src/kernel/KernelKit/IDylibObject.h | 8 | ||||
| -rw-r--r-- | src/kernel/KernelKit/ILoader.h | 14 | ||||
| -rw-r--r-- | src/kernel/KernelKit/PE32CodeMgr.h | 4 | ||||
| -rw-r--r-- | src/kernel/NeKit/OwnPtr.h | 5 | ||||
| -rw-r--r-- | 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<VoidPtr> GetBlob() = 0; - virtual _Output const Char* AsString() = 0; - virtual _Output const Char* MIME() = 0; - virtual _Output const Char* Path() = 0; - virtual _Output ErrorOr<VoidPtr> FindStart() = 0; - virtual _Output ErrorOr<VoidPtr> FindSymbol(_Input const Char* name, _Input Int32 kind) = 0; + virtual _Output ErrorOr<VoidPtr> GetBlob() { return ErrorOr<VoidPtr>{}; } + virtual _Output const Char* AsString() { return ""; } + virtual _Output const Char* MIME() { return ""; } + virtual _Output const Char* Path() { return ""; } + virtual _Output ErrorOr<VoidPtr> FindStart() { return ErrorOr<VoidPtr>{}; } + virtual _Output ErrorOr<VoidPtr> FindSymbol(_Input const Char*, _Input Int32) { return ErrorOr<VoidPtr>{}; } }; } // 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 <KernelKit/ProcessScheduler.h> #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 <typename T> 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<T> AsRef() { return Ref<T>(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 <NeKit/KernelPanic.h> #include <NeKit/OwnPtr.h> +#define kPeStackSizeSymbol "__NESizeOfReserveStack" +#define kPeHeapSizeSymbol "__NESizeOfReserveHeap" +#define kPeNameSymbol "__NEProgramName" + namespace Kernel { namespace Detail { /***********************************************************************************/ @@ -222,17 +226,17 @@ ErrorOr<VoidPtr> 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>{(VoidPtr) rt_alloc_string("USER_PROCESS_PE32+")}; } - auto id = + ProcessID id = UserProcessScheduler::The().Spawn(reinterpret_cast<const Char*>(symname.Leak().Leak()), errOrStart.Leak().Leak(), exec.GetBlob().Leak().Leak()); |
