diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-29 17:19:57 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-29 17:19:57 +0200 |
| commit | 81027667166d9624ee12f45f011426678d1bbbf4 (patch) | |
| tree | d12fd352d23ae9c9a167c2c1b8b98c2c9cac2df7 /dev/kernel | |
| parent | 3167f59dbb401d6a79b1524537e04218baf49ee3 (diff) | |
feat: Improve libSystem's architecture and implementation.
fix: Fix NeKit's Ref, and ErrorOr classes.
fix: Fix userland tools.
next:
- Finish the latest tickets and then release nekernel 0.0.3
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc | 2 | ||||
| -rw-r--r-- | dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc | 2 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/DeviceMgr.h | 2 | ||||
| -rw-r--r-- | dev/kernel/NeKit/ErrorOr.h | 8 | ||||
| -rw-r--r-- | dev/kernel/NeKit/Ref.h | 37 | ||||
| -rw-r--r-- | dev/kernel/src/HardwareThreadScheduler.cc | 4 | ||||
| -rw-r--r-- | dev/kernel/src/KString.cc | 2 | ||||
| -rw-r--r-- | dev/kernel/src/Pmm.cc | 2 |
8 files changed, 27 insertions, 32 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc b/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc index 0c468e14..1dbce4ac 100644 --- a/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc +++ b/dev/kernel/HALKit/AMD64/HalSchedulerCorePrimitives.cc @@ -22,7 +22,7 @@ EXTERN_C Void __zka_pure_call(USER_PROCESS* process) { /// @param stack_ptr the frame pointer. /***********************************************************************************/ -EXTERN_C Bool hal_check_stack(HAL::StackFramePtr stack_ptr) { +EXTERN_C Bool hal_check_task(HAL::StackFramePtr stack_ptr) { if (!stack_ptr) return No; return stack_ptr->SP != 0 && stack_ptr->IP != 0; diff --git a/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc b/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc index ee286639..10f95e29 100644 --- a/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc +++ b/dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc @@ -22,7 +22,7 @@ EXTERN_C Void __zka_pure_call(USER_PROCESS* process) { /// @param stack_ptr the frame pointer.
/***********************************************************************************/
-EXTERN_C Bool hal_check_stack(HAL::StackFramePtr stack_ptr) {
+EXTERN_C Bool hal_check_task(HAL::StackFramePtr stack_ptr) {
if (!stack_ptr) return No;
return stack_ptr->SP != 0 && stack_ptr->IP != 0;
diff --git a/dev/kernel/KernelKit/DeviceMgr.h b/dev/kernel/KernelKit/DeviceMgr.h index 7c7b9da3..0a21710d 100644 --- a/dev/kernel/KernelKit/DeviceMgr.h +++ b/dev/kernel/KernelKit/DeviceMgr.h @@ -41,6 +41,8 @@ class IOBuf; template <typename T> class IDeviceObject { public: + IDeviceObject() = default; + explicit IDeviceObject(void (*Out)(IDeviceObject<T>*, T), void (*In)(IDeviceObject<T>*, T)) : fOut(Out), fIn(In) {} diff --git a/dev/kernel/NeKit/ErrorOr.h b/dev/kernel/NeKit/ErrorOr.h index d7751b7e..5e983d09 100644 --- a/dev/kernel/NeKit/ErrorOr.h +++ b/dev/kernel/NeKit/ErrorOr.h @@ -18,13 +18,13 @@ using ErrorT = UInt; template <typename T> class ErrorOr final { public: - ErrorOr() = default; + explicit ErrorOr() = default; ~ErrorOr() = default; public: - explicit ErrorOr(Int32 err) : mId(err) {} + explicit ErrorOr(Int32 err) : mRef((T*)RTL_ALLOCA(sizeof(T))), mId(err) {} - explicit ErrorOr(nullPtr Null) {} + explicit ErrorOr(nullPtr) {} explicit ErrorOr(T* Class) : mRef(Class) {} @@ -48,7 +48,7 @@ class ErrorOr final { private: Ref<T> mRef; - UInt32 mId{0}; + Int32 mId{0}; }; using ErrorOrAny = ErrorOr<voidPtr>; diff --git a/dev/kernel/NeKit/Ref.h b/dev/kernel/NeKit/Ref.h index 9920aa6f..9380bab4 100644 --- a/dev/kernel/NeKit/Ref.h +++ b/dev/kernel/NeKit/Ref.h @@ -11,46 +11,39 @@ #include <KernelKit/HeapMgr.h> #include <NeKit/Defines.h> #include <NeKit/KernelPanic.h> +#include <CompilerKit/CompilerKit.h> namespace Kernel { template <typename T> class Ref final { public: - Ref() = default; - - ~Ref() { - if (mm_is_valid_ptr(fClass)) delete fClass; - } + explicit Ref() = default; + ~Ref() = default; public: - Ref(T* cls) : fClass(cls) {} - - Ref(T cls) : fClass(nullptr) { fClass = &cls; } + Ref(T* cls) : fClass(*cls) {} + Ref(T cls) : fClass(cls) {} Ref& operator=(T ref) { - fClass = &ref; + fClass = ref; return *this; } + NE_COPY_DEFAULT(Ref); + public: - T operator->() const { - MUST_PASS(*fClass); - return *fClass; - } + T operator->() const { return fClass; } - T& Leak() noexcept { return *fClass; } + T& Leak() noexcept { return fClass; } - T& TryLeak() const noexcept { - MUST_PASS(*fClass); - return *fClass; - } + T& TryLeak() const noexcept { return fClass; } - T operator*() { return *fClass; } + T operator*() { return fClass; } - operator bool() noexcept { return fClass; } + operator bool() noexcept { return true; } private: - T* fClass{nullptr}; + T fClass; }; template <typename T> @@ -70,7 +63,7 @@ class NonNullRef final { NonNullRef(const NonNullRef<T>& ref) = default; private: - Ref<T> fRef{nullptr}; + Ref<T> fRef{}; }; } // namespace Kernel diff --git a/dev/kernel/src/HardwareThreadScheduler.cc b/dev/kernel/src/HardwareThreadScheduler.cc index 78bad9d6..e3255326 100644 --- a/dev/kernel/src/HardwareThreadScheduler.cc +++ b/dev/kernel/src/HardwareThreadScheduler.cc @@ -20,7 +20,7 @@ namespace Kernel { /// @note Those symbols are needed in order to switch and validate the stack. /***********************************************************************************/ -EXTERN_C Bool hal_check_stack(HAL::StackFramePtr frame); +EXTERN_C Bool hal_check_task(HAL::StackFramePtr frame); EXTERN_C Bool mp_register_task(HAL::StackFramePtr frame, ProcessID pid); STATIC HardwareThreadScheduler kHardwareThreadScheduler; @@ -96,7 +96,7 @@ Bool HardwareThread::Switch(HAL::StackFramePtr frame) { return NO; } - if (!hal_check_stack(frame)) { + if (!hal_check_task(frame)) { return NO; } diff --git a/dev/kernel/src/KString.cc b/dev/kernel/src/KString.cc index 9f332cdf..f5732280 100644 --- a/dev/kernel/src/KString.cc +++ b/dev/kernel/src/KString.cc @@ -64,7 +64,7 @@ bool KString::operator!=(const Char* rhs) const { } ErrorOr<KString> KStringBuilder::Construct(const Char* data) { - if (!data || *data == 0) return {}; + if (!data || *data == 0) return ErrorOr<KString>(new KString(0)); KString* view = new KString(rt_string_len(data)); (*view) += data; diff --git a/dev/kernel/src/Pmm.cc b/dev/kernel/src/Pmm.cc index b9fba20e..7f5050f9 100644 --- a/dev/kernel/src/Pmm.cc +++ b/dev/kernel/src/Pmm.cc @@ -35,7 +35,7 @@ Ref<PTEWrapper> Pmm::RequestPage(Boolean user, Boolean readWrite) { if (pt.fPresent) { kout << "[PMM]: Allocation failed.\r"; - return {}; + return {pt}; } return Ref<PTEWrapper>(pt); |
