summaryrefslogtreecommitdiffhomepage
path: root/Private/KernelKit
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-02 13:49:50 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-02 13:49:50 +0100
commite559cf01834340d0a4dfcb45f7bdf081e8994032 (patch)
treeb7d1aa03111f83c0b7b058dca2786a6bd234a7e3 /Private/KernelKit
parent05eca8d3061b60eac0a652a4b1e39269a9af79e8 (diff)
Kernel: Port toolchain to mingw (PE/COFF)
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/KernelKit')
-rw-r--r--Private/KernelKit/PEFCodeManager.hxx2
-rw-r--r--Private/KernelKit/ProcessManager.hpp5
-rw-r--r--Private/KernelKit/ThreadLocalStorage.hxx27
-rw-r--r--Private/KernelKit/ThreadLocalStorage.inl45
4 files changed, 41 insertions, 38 deletions
diff --git a/Private/KernelKit/PEFCodeManager.hxx b/Private/KernelKit/PEFCodeManager.hxx
index 3541d11b..775f299b 100644
--- a/Private/KernelKit/PEFCodeManager.hxx
+++ b/Private/KernelKit/PEFCodeManager.hxx
@@ -14,8 +14,6 @@
#include <NewKit/ErrorOr.hpp>
#include <NewKit/String.hpp>
-#include "NewKit/Defines.hpp"
-
namespace HCore {
///
/// \name PEFLoader
diff --git a/Private/KernelKit/ProcessManager.hpp b/Private/KernelKit/ProcessManager.hpp
index 5637dd6f..14c6eb28 100644
--- a/Private/KernelKit/ProcessManager.hpp
+++ b/Private/KernelKit/ProcessManager.hpp
@@ -7,7 +7,8 @@
* ========================================================
*/
-#pragma once
+#ifndef __PROCESS_MANAGER__
+#define __PROCESS_MANAGER__
#include <ArchKit/Arch.hpp>
#include <KernelKit/FileManager.hpp>
@@ -211,3 +212,5 @@ const Int32 &rt_get_exit_code() noexcept;
#include <KernelKit/ThreadLocalStorage.hxx>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#endif /* ifndef __PROCESS_MANAGER__ */
diff --git a/Private/KernelKit/ThreadLocalStorage.hxx b/Private/KernelKit/ThreadLocalStorage.hxx
index 910daf31..5db78ca3 100644
--- a/Private/KernelKit/ThreadLocalStorage.hxx
+++ b/Private/KernelKit/ThreadLocalStorage.hxx
@@ -18,24 +18,27 @@
#define kCookieMag1 'C'
#define kCookieMag2 'o'
-template <typename T> T *hcore_tls_new_ptr(void);
+template <typename T>
+T *hcore_tls_new_ptr(void);
-template <typename T> bool hcore_tls_delete_ptr(T *ptr);
+template <typename T>
+bool hcore_tls_delete_ptr(T *ptr);
-template <typename T, typename... Args> T *hcore_tls_new_class(Args &&...args);
+template <typename T, typename... Args>
+T *hcore_tls_new_class(Args &&...args);
typedef char rt_cookie_type[3];
/// @brief Thread Information Block for Local Storage.
/// Located in GS on AMD64, Virtual Address 0x10000 (64x0, 32x0, ARM64)
-struct ThreadInformationBlock final
-{
- HCore::Char Name[255]; // Module Name
- HCore::UIntPtr StartCode; // Start Address
- HCore::UIntPtr StartData; // Allocation Heap
- HCore::UIntPtr StartStack; // Stack Pointer.
- HCore::Int32 Arch; // Architecture and/or platform.
- rt_cookie_type Cookie; // Not shown in public header, this is the way we tell something went wrong.
+struct ThreadInformationBlock final {
+ HCore::Char Name[255]; // Module Name
+ HCore::UIntPtr StartCode; // Start Address
+ HCore::UIntPtr StartData; // Allocation Heap
+ HCore::UIntPtr StartStack; // Stack Pointer.
+ HCore::Int32 Arch; // Architecture and/or platform.
+ rt_cookie_type Cookie; // Not shown in public header, this is the way we tell
+ // something went wrong.
};
/// @brief TLS install TIB
@@ -44,7 +47,7 @@ extern void rt_install_tib(ThreadInformationBlock *pTib);
///! @brief Cookie Sanity check.
HCore::Boolean hcore_tls_check(ThreadInformationBlock *ptr);
-#include "ThreadLocalStorage.inl"
+#include <KernelKit/ThreadLocalStorage.inl>
// last rev 1/29/24
diff --git a/Private/KernelKit/ThreadLocalStorage.inl b/Private/KernelKit/ThreadLocalStorage.inl
index e73d8672..59d4c525 100644
--- a/Private/KernelKit/ThreadLocalStorage.inl
+++ b/Private/KernelKit/ThreadLocalStorage.inl
@@ -9,42 +9,41 @@
//! @brief Allocates a pointer from the process's tls.
+#ifndef __PROCESS_MANAGER__
+#include <KernelKit/ProcessManager.hpp>
+#endif
+
template <typename T>
-inline T* hcore_tls_new_ptr(void)
-{
- using namespace HCore;
+inline T* hcore_tls_new_ptr(void) {
+ using namespace HCore;
- auto ref_process = ProcessManager::Shared().Leak().GetCurrent();
+ auto ref_process = ProcessManager::Shared().Leak().GetCurrent();
- T* pointer = (T*)ref_process.Leak().New(sizeof(T));
- return pointer;
+ T* pointer = (T*)ref_process.Leak().New(sizeof(T));
+ return pointer;
}
//! @brief TLS delete implementation.
template <typename T>
-inline bool hcore_tls_delete_ptr(T* ptr)
-{
- if (!ptr)
- return false;
+inline bool hcore_tls_delete_ptr(T* ptr) {
+ if (!ptr) return false;
- using namespace HCore;
+ using namespace HCore;
- auto ref_process = ProcessManager::Shared().Leak().GetCurrent();
- ptr->~T();
+ auto ref_process = ProcessManager::Shared().Leak().GetCurrent();
+ ptr->~T();
- return ref_process.Leak().Delete(ptr, sizeof(T));
+ return ref_process.Leak().Delete(ptr, sizeof(T));
}
template <typename T, typename... Args>
-T* hcore_tls_new_class(Args&&... args)
-{
- T* ptr = hcore_tls_new_ptr<T>();
+T* hcore_tls_new_class(Args&&... args) {
+ T* ptr = hcore_tls_new_ptr<T>();
- if (ptr)
- {
- *ptr = T(HCore::forward(args)...);
- return ptr;
- }
+ if (ptr) {
+ *ptr = T(HCore::forward(args)...);
+ return ptr;
+ }
- return nullptr;
+ return nullptr;
}