From 66e4f909bd1a495d3f1c34d2e1b5cd71099ab1ae Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 26 Mar 2024 13:44:38 +0100 Subject: Kernel and System.Core: kernel related fixes and :boom: on User API. - UserHeap.cxx: Document code and fix issue in ke_free_heap_internal. - Scheduler: Rename ProcessManager to ProcessScheduler. - The System API has been reworked to improve it's design, such as no more C++ to improve it's portability. - Moved containers into it's own API. Signed-off-by: Amlal El Mahrouss --- Public/Developer/System.Core/Sources/CRT0.cxx | 14 +++++++ Public/Developer/System.Core/Sources/Heap.cxx | 45 ++-------------------- .../System.Core/Sources/LibEntrypoint.cxx | 14 ------- .../Developer/System.Core/Sources/New+Delete.cxx | 14 ------- 4 files changed, 18 insertions(+), 69 deletions(-) create mode 100644 Public/Developer/System.Core/Sources/CRT0.cxx delete mode 100644 Public/Developer/System.Core/Sources/LibEntrypoint.cxx (limited to 'Public/Developer/System.Core/Sources') diff --git a/Public/Developer/System.Core/Sources/CRT0.cxx b/Public/Developer/System.Core/Sources/CRT0.cxx new file mode 100644 index 00000000..a0235e68 --- /dev/null +++ b/Public/Developer/System.Core/Sources/CRT0.cxx @@ -0,0 +1,14 @@ +/** =========================================== + (C) Mahrouss Logic + ===========================================*/ + +#include + +/// @brief Inits the DLL. +/// @return if it was succesful or not. +CA_EXTERN_C DWordType __DllMain(VoidType) { + kApplicationObject = HcGetAppObject(); + CA_MUST_PASS(kApplicationObject); + + return 0; +} \ No newline at end of file diff --git a/Public/Developer/System.Core/Sources/Heap.cxx b/Public/Developer/System.Core/Sources/Heap.cxx index 370693cc..fcd80a7f 100644 --- a/Public/Developer/System.Core/Sources/Heap.cxx +++ b/Public/Developer/System.Core/Sources/Heap.cxx @@ -11,7 +11,7 @@ /// @param sz size of object. /// @param flags flags. /// @return -CA_EXTERN_C PtrVoidType HcAllocateProcessHeap(ObjectPtr refObj, QWordType sz, +CA_EXTERN_C PtrVoidType HcAllocateProcessHeap(ObjectRef refObj, QWordType sz, DWordType flags) { CA_MUST_PASS(sz); CA_MUST_PASS(flags); @@ -22,7 +22,7 @@ CA_EXTERN_C PtrVoidType HcAllocateProcessHeap(ObjectPtr refObj, QWordType sz, /// @brief Free pointer from the user's heap. /// @param refObj Process object. /// @param ptr the pointer to free. -CA_EXTERN_C VoidType HcFreeProcessHeap(ObjectPtr refObj, PtrVoidType ptr) { +CA_EXTERN_C VoidType HcFreeProcessHeap(ObjectRef refObj, PtrVoidType ptr) { CA_MUST_PASS(ptr); CA_UNREFERENCED_PARAMETER(refObj->Invoke(refObj, kProcessCallFreePtr, ptr)); } @@ -31,7 +31,7 @@ CA_EXTERN_C VoidType HcFreeProcessHeap(ObjectPtr refObj, PtrVoidType ptr) { /// @param refObj Process object. /// @param ptr the pointer to find. /// @return the size. -CA_EXTERN_C QWordType HcProcessHeapSize(ObjectPtr refObj, PtrVoidType ptr) { +CA_EXTERN_C QWordType HcProcessHeapSize(ObjectRef refObj, PtrVoidType ptr) { CA_MUST_PASS(ptr); return refObj->Invoke(refObj, kProcessCallSizePtr, ptr); } @@ -40,44 +40,7 @@ CA_EXTERN_C QWordType HcProcessHeapSize(ObjectPtr refObj, PtrVoidType ptr) { /// @param refObj Process object. /// @param ptr the pointer to check. /// @return if it exists -CA_EXTERN_C BooleanType HcProcessHeapExists(ObjectPtr refObj, PtrVoidType ptr) { +CA_EXTERN_C BooleanType HcProcessHeapExists(ObjectRef refObj, PtrVoidType ptr) { CA_MUST_PASS(ptr); return refObj->Invoke(refObj, kProcessCallCheckPtr, ptr); } - -using namespace System; - -/// @brief Shared instance of the heap. -/// @return -HeapInterface* HeapInterface::Shared() noexcept { - static HeapInterface* heap = nullptr; - - if (!heap) { - heap = new HeapInterface(); - } - - return heap; -} - -HeapInterface::HeapInterface() { - CA_MUST_PASS(HcProcessHeapExists(kApplicationObject, (PtrVoidType)this)); -} - -HeapInterface::~HeapInterface() { delete this; } - -void HeapInterface::Delete(HeapRef me) noexcept { - CA_MUST_PASS(me); - HcFreeProcessHeap(kApplicationObject, me); -} - -SizeType HeapInterface::Size(HeapRef me) noexcept { - CA_MUST_PASS(me); - return HcProcessHeapSize(kApplicationObject, me); -} - -HeapRef HeapInterface::New(const SizeType& sz, const DWordType flags) { - SizeType _sz = sz; - if (!_sz) ++_sz; - - return HcAllocateProcessHeap(kApplicationObject, _sz, flags); -} diff --git a/Public/Developer/System.Core/Sources/LibEntrypoint.cxx b/Public/Developer/System.Core/Sources/LibEntrypoint.cxx deleted file mode 100644 index b874ef55..00000000 --- a/Public/Developer/System.Core/Sources/LibEntrypoint.cxx +++ /dev/null @@ -1,14 +0,0 @@ -/** =========================================== - (C) Mahrouss Logic - ===========================================*/ - -#include - -/// @brief Inits the DLL. -/// @return if it was succesful or not. -DWordType __DllMain(VoidType) { - kApplicationObject = HcGetInstanceObject(); - CA_MUST_PASS(kApplicationObject); - - return 0; -} \ No newline at end of file diff --git a/Public/Developer/System.Core/Sources/New+Delete.cxx b/Public/Developer/System.Core/Sources/New+Delete.cxx index 98674a73..6e40aa06 100644 --- a/Public/Developer/System.Core/Sources/New+Delete.cxx +++ b/Public/Developer/System.Core/Sources/New+Delete.cxx @@ -5,20 +5,6 @@ ------------------------------------------- */ #include -#include - -#define kAllocationTypes 2 - -enum HcAllocationKind { - kStandardAllocation = 0xC, - kArrayAllocation = 0xD, -}; - -CA_EXTERN_C PtrVoidType HcAllocateProcessHeap(ObjectPtr refObj, QWordType sz, - DWordType flags); -CA_EXTERN_C BooleanType HcProcessHeapExists(ObjectPtr refObj, PtrVoidType ptr); -CA_EXTERN_C QWordType HcProcessHeapSize(ObjectPtr refObj, PtrVoidType ptr); -CA_EXTERN_C VoidType HcFreeProcessHeap(ObjectPtr refObj, PtrVoidType ptr); typedef SizeType size_t; -- cgit v1.2.3