summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-08-06 07:05:10 +0200
committerAmlal EL Mahrouss <amlalelmahrouss@icloud.com>2024-08-06 07:05:10 +0200
commitbf63a6eeec618d4d3240943e54e8e4ce9f564405 (patch)
tree1d91396a2584c46e6d33c3e0677f64511b5a22ce
parenteb4f3414d2ca4ff518481afdd7b391f1c440fa9e (diff)
[WIP] Fixing DLL 0x08 and 0xD faults.
Signed-off-by: Amlal EL Mahrouss <amlalelmahrouss@icloud.com>
-rw-r--r--Kernel/HALKit/AMD64/HalDebugOutput.cxx9
-rw-r--r--Kernel/KernelKit/Heap.hxx4
-rw-r--r--Kernel/KernelKit/MP.hxx16
-rw-r--r--Kernel/Sources/Heap.cxx10
-rw-r--r--Kernel/Sources/KernelCheck.cxx4
-rw-r--r--Kernel/Sources/MP.cxx20
-rw-r--r--Kernel/Sources/ProcessScheduler.cxx18
7 files changed, 39 insertions, 42 deletions
diff --git a/Kernel/HALKit/AMD64/HalDebugOutput.cxx b/Kernel/HALKit/AMD64/HalDebugOutput.cxx
index 60c4cd6b..b80ab761 100644
--- a/Kernel/HALKit/AMD64/HalDebugOutput.cxx
+++ b/Kernel/HALKit/AMD64/HalDebugOutput.cxx
@@ -8,6 +8,7 @@
#include <KernelKit/DebugOutput.hxx>
#include <KernelKit/Framebuffer.hxx>
#include <NewKit/Utils.hxx>
+#include <NewKit/New.hxx>
namespace Kernel
{
@@ -137,12 +138,8 @@ namespace Kernel
TerminalDevice& TerminalDevice::The() noexcept
{
- static TerminalDevice* out = nullptr;
-
- if (!out)
- out = new TerminalDevice(Kernel::ke_io_write, Kernel::ke_io_read);
-
- return *out;
+ STATIC TerminalDevice out(Kernel::ke_io_write, Kernel::ke_io_read);
+ return out;
}
} // namespace Kernel
diff --git a/Kernel/KernelKit/Heap.hxx b/Kernel/KernelKit/Heap.hxx
index ee176f3b..c24cf1df 100644
--- a/Kernel/KernelKit/Heap.hxx
+++ b/Kernel/KernelKit/Heap.hxx
@@ -28,13 +28,13 @@ namespace Kernel
/// @brief Check if pointer is a valid kernel pointer.
/// @param allocatedPtr the pointer
/// @return if it exists.
- Boolean ke_is_valid_heap(VoidPtr allocatedPtr);
+ Boolean mm_is_valid_heap(VoidPtr allocatedPtr);
/// @brief allocate chunk of memory.
/// @param sz size of pointer
/// @param rw read write (true to enable it)
/// @param user is it accesible by user processes?
- /// @return the pointer
+ /// @return The newly allocated pointer.
voidPtr mm_new_ke_heap(const SizeT sz, const Bool rw, const Bool user);
/// @brief Protect the heap with a CRC value.
diff --git a/Kernel/KernelKit/MP.hxx b/Kernel/KernelKit/MP.hxx
index df34bed8..f7c3888a 100644
--- a/Kernel/KernelKit/MP.hxx
+++ b/Kernel/KernelKit/MP.hxx
@@ -19,7 +19,7 @@
namespace Kernel
{
class HardwareThread;
- class MPCoreScheduler;
+ class HardwareThreadScheduler;
using ThreadID = UInt32;
@@ -77,22 +77,22 @@ namespace Kernel
bool fBusy{false};
private:
- friend class MPCoreScheduler;
+ friend class HardwareThreadScheduler;
};
///
- /// \name MPCoreScheduler
+ /// \name HardwareThreadScheduler
/// \brief Class to manage the thread scheduling.
///
- class MPCoreScheduler final
+ class HardwareThreadScheduler final
{
private:
- explicit MPCoreScheduler();
+ explicit HardwareThreadScheduler();
public:
- ~MPCoreScheduler();
- NEWOS_COPY_DEFAULT(MPCoreScheduler);
+ ~HardwareThreadScheduler();
+ NEWOS_COPY_DEFAULT(HardwareThreadScheduler);
public:
bool Switch(HAL::StackFramePtr the);
@@ -106,7 +106,7 @@ namespace Kernel
public:
/// @brief Shared instance of the MP Manager.
/// @return the reference to the mp manager class.
- static Ref<MPCoreScheduler> The();
+ static Ref<HardwareThreadScheduler> The();
public:
/// @brief Returns the amount of threads present in the system.
diff --git a/Kernel/Sources/Heap.cxx b/Kernel/Sources/Heap.cxx
index 75285cf8..72c0b77c 100644
--- a/Kernel/Sources/Heap.cxx
+++ b/Kernel/Sources/Heap.cxx
@@ -30,11 +30,11 @@ namespace Kernel
/// | HIB | ADDRESS |
struct PACKED HEAP_INFORMATION_BLOCK final
{
- ///! @brief 32-bit value which contains the magic number of the executable.
+ ///! @brief 32-bit value which contains the magic number of the heap.
UInt32 fMagic;
- ///! @brief Boolean value which tells if the pointer is allocated.
+ ///! @brief Boolean value which tells if the heap is allocated.
Boolean fPresent;
- ///! @brief 32-bit CRC checksum
+ ///! @brief 32-bit CRC checksum.
UInt32 fCRC32;
/// @brief 64-bit pointer size.
SizeT fTargetPtrSize;
@@ -95,7 +95,7 @@ namespace Kernel
/// @param sz size of pointer
/// @param rw read write (true to enable it)
/// @param user is it accesible by user processes?
- /// @return the pointer
+ /// @return The newly allocated pointer.
VoidPtr mm_new_ke_heap(const SizeT sz, const bool rw, const bool user)
{
Detail::mm_alloc_init_timeout();
@@ -210,7 +210,7 @@ namespace Kernel
/// @brief Check if pointer is a valid kernel pointer.
/// @param heapPtr the pointer
/// @return if it exists.
- Boolean ke_is_valid_heap(VoidPtr heapPtr)
+ Boolean mm_is_valid_heap(VoidPtr heapPtr)
{
if (kHeapCount < 1)
return false;
diff --git a/Kernel/Sources/KernelCheck.cxx b/Kernel/Sources/KernelCheck.cxx
index 0fcc742f..cd8e8ef9 100644
--- a/Kernel/Sources/KernelCheck.cxx
+++ b/Kernel/Sources/KernelCheck.cxx
@@ -19,13 +19,13 @@
#define CopyMem(dst, src, sz) Kernel::rt_copy_memory((Kernel::VoidPtr)src, (Kernel::VoidPtr)dst, sz)
#define MoveMem(dst, src, sz) Kernel::rt_copy_memory((Kernel::VoidPtr)src, (Kernel::VoidPtr)dst, sz)
+#define cWebsiteMacro "https://zka-tech.nl/hulp"
+
#include <BootKit/Vendor/Qr.hxx>
/* Each error code is attributed with an ID, which will prompt a string onto the
* screen. Wait for debugger... */
-#define cWebsiteMacro "https://zka-tech.nl/hulp"
-
namespace Kernel
{
void ke_stop(const Kernel::Int& id)
diff --git a/Kernel/Sources/MP.cxx b/Kernel/Sources/MP.cxx
index 265f622c..f4b7db41 100644
--- a/Kernel/Sources/MP.cxx
+++ b/Kernel/Sources/MP.cxx
@@ -120,7 +120,7 @@ namespace Kernel
//! @brief Constructor and destructor
///! @brief Default constructor.
- MPCoreScheduler::MPCoreScheduler()
+ HardwareThreadScheduler::HardwareThreadScheduler()
{
StringView strCoreName(512);
strCoreName += "\\Class\\Smp\\MPClass";
@@ -132,17 +132,17 @@ namespace Kernel
}
///! @brief Default destructor.
- MPCoreScheduler::~MPCoreScheduler() = default;
+ HardwareThreadScheduler::~HardwareThreadScheduler() = default;
/// @brief Shared singleton function
- Ref<MPCoreScheduler> MPCoreScheduler::The()
+ Ref<HardwareThreadScheduler> HardwareThreadScheduler::The()
{
- static MPCoreScheduler manager;
+ static HardwareThreadScheduler manager;
return {manager};
}
/// @brief Get Stack Frame of Core
- HAL::StackFramePtr MPCoreScheduler::Leak() noexcept
+ HAL::StackFramePtr HardwareThreadScheduler::Leak() noexcept
{
if (fThreadList[fCurrentThread].Leak() &&
ProcessHelper::TheCurrentPID() ==
@@ -153,7 +153,7 @@ namespace Kernel
}
/// @brief Finds and switch to a free core.
- bool MPCoreScheduler::Switch(HAL::StackFramePtr stack)
+ bool HardwareThreadScheduler::Switch(HAL::StackFramePtr stack)
{
if (stack == nullptr)
return false;
@@ -203,7 +203,7 @@ namespace Kernel
* @param idx the index
* @return the reference to the hardware thread.
*/
- Ref<HardwareThread*> MPCoreScheduler::operator[](const SizeT& idx)
+ Ref<HardwareThread*> HardwareThreadScheduler::operator[](const SizeT& idx)
{
if (idx == 0)
{
@@ -233,7 +233,7 @@ namespace Kernel
* Check if thread pool isn't empty.
* @return
*/
- MPCoreScheduler::operator bool() noexcept
+ HardwareThreadScheduler::operator bool() noexcept
{
return !fThreadList.Empty();
}
@@ -242,14 +242,14 @@ namespace Kernel
* Reverse operator bool
* @return
*/
- bool MPCoreScheduler::operator!() noexcept
+ bool HardwareThreadScheduler::operator!() noexcept
{
return fThreadList.Empty();
}
/// @brief Returns the amount of core present.
/// @return the number of cores.
- SizeT MPCoreScheduler::Count() noexcept
+ SizeT HardwareThreadScheduler::Count() noexcept
{
return fThreadList.Count();
}
diff --git a/Kernel/Sources/ProcessScheduler.cxx b/Kernel/Sources/ProcessScheduler.cxx
index 7c839a74..cacdd060 100644
--- a/Kernel/Sources/ProcessScheduler.cxx
+++ b/Kernel/Sources/ProcessScheduler.cxx
@@ -395,29 +395,29 @@ namespace Kernel
if (!the_stack || new_pid < 0)
return false;
- for (SizeT index = 0UL; index < MPCoreScheduler::The().Leak().Count(); ++index)
+ for (SizeT index = 0UL; index < HardwareThreadScheduler::The().Leak().Count(); ++index)
{
- if (MPCoreScheduler::The().Leak()[index].Leak()->Kind() == kInvalidHart)
+ if (HardwareThreadScheduler::The().Leak()[index].Leak()->Kind() == kInvalidHart)
continue;
- if (MPCoreScheduler::The().Leak()[index].Leak()->StackFrame() == the_stack)
+ if (HardwareThreadScheduler::The().Leak()[index].Leak()->StackFrame() == the_stack)
{
- MPCoreScheduler::The().Leak()[index].Leak()->Busy(false);
+ HardwareThreadScheduler::The().Leak()[index].Leak()->Busy(false);
continue;
}
- if (MPCoreScheduler::The().Leak()[index].Leak()->IsBusy())
+ if (HardwareThreadScheduler::The().Leak()[index].Leak()->IsBusy())
continue;
- if (MPCoreScheduler::The().Leak()[index].Leak()->Kind() !=
+ if (HardwareThreadScheduler::The().Leak()[index].Leak()->Kind() !=
ThreadKind::kHartBoot &&
- MPCoreScheduler::The().Leak()[index].Leak()->Kind() !=
+ HardwareThreadScheduler::The().Leak()[index].Leak()->Kind() !=
ThreadKind::kHartSystemReserved)
{
- MPCoreScheduler::The().Leak()[index].Leak()->Busy(true);
+ HardwareThreadScheduler::The().Leak()[index].Leak()->Busy(true);
ProcessHelper::TheCurrentPID() = new_pid;
- return MPCoreScheduler::The().Leak()[index].Leak()->Switch(the_stack);
+ return HardwareThreadScheduler::The().Leak()[index].Leak()->Switch(the_stack);
}
}