summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-05-29 17:19:57 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-05-29 17:19:57 +0200
commit81027667166d9624ee12f45f011426678d1bbbf4 (patch)
treed12fd352d23ae9c9a167c2c1b8b98c2c9cac2df7 /dev/kernel
parent3167f59dbb401d6a79b1524537e04218baf49ee3 (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.cc2
-rw-r--r--dev/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cc2
-rw-r--r--dev/kernel/KernelKit/DeviceMgr.h2
-rw-r--r--dev/kernel/NeKit/ErrorOr.h8
-rw-r--r--dev/kernel/NeKit/Ref.h37
-rw-r--r--dev/kernel/src/HardwareThreadScheduler.cc4
-rw-r--r--dev/kernel/src/KString.cc2
-rw-r--r--dev/kernel/src/Pmm.cc2
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);