summaryrefslogtreecommitdiffhomepage
path: root/src/kernel
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-12-26 09:53:29 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-12-26 09:53:29 +0100
commit731758b271233b9c11052001ffc20a5a2ca1f365 (patch)
tree551322f342a9d6587b22bfeec5c2f79a7dd68810 /src/kernel
parent0c6bfdb34cdb2435b95d256ddc0917a0a115c893 (diff)
feat: kernel: system and API improvements.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/KernelKit/FileMgr.h2
-rw-r--r--src/kernel/KernelKit/HardwareThreadScheduler.h10
-rw-r--r--src/kernel/KernelKit/IDylibObject.h8
-rw-r--r--src/kernel/KernelKit/ILoader.h14
-rw-r--r--src/kernel/KernelKit/PE32CodeMgr.h4
-rw-r--r--src/kernel/NeKit/OwnPtr.h5
-rw-r--r--src/kernel/src/PE32CodeMgr.cc10
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());