summaryrefslogtreecommitdiffhomepage
path: root/NewKernel/KernelKit/ThreadLocalStorage.hxx
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-05-08 12:32:41 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-05-08 12:32:41 +0200
commit09dd11ddf800898c00ecb04a65fb5cd10fb481fa (patch)
treeeda0b4e23d6a71da7de3a78f0bb76ec3201dd2f9 /NewKernel/KernelKit/ThreadLocalStorage.hxx
parentca83108fd138cc0398f900e6a6c0a53ad51aee31 (diff)
MHR-23: :boom: changes, reworked project tree.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'NewKernel/KernelKit/ThreadLocalStorage.hxx')
-rw-r--r--NewKernel/KernelKit/ThreadLocalStorage.hxx53
1 files changed, 53 insertions, 0 deletions
diff --git a/NewKernel/KernelKit/ThreadLocalStorage.hxx b/NewKernel/KernelKit/ThreadLocalStorage.hxx
new file mode 100644
index 00000000..8072b867
--- /dev/null
+++ b/NewKernel/KernelKit/ThreadLocalStorage.hxx
@@ -0,0 +1,53 @@
+/* -------------------------------------------
+
+ Copyright Mahrouss Logic
+
+------------------------------------------- */
+
+#ifndef _KERNELKIT_TLS_HPP
+#define _KERNELKIT_TLS_HPP
+
+#include <NewKit/Defines.hpp>
+
+//! @brief TLS implementation in C++
+
+#define kCookieMag0 'H'
+#define kCookieMag1 'C'
+#define kCookieMag2 'R'
+
+template <typename T>
+T* tls_new_ptr(void);
+
+template <typename T>
+bool tls_delete_ptr(T* ptr);
+
+template <typename T, typename... Args>
+T* tls_new_class(Args&&... args);
+
+#define kTLSCookieLen 3
+
+/// @brief Thread Information Block for Local Storage.
+/// Located in GS on AMD64, Virtual Address 0x10000 (64x0, 32x0, ARM64)
+struct PACKED ThreadInformationBlock final
+{
+ NewOS::Char Cookie[kTLSCookieLen];
+ NewOS::UIntPtr StartCode; // Start Address
+ NewOS::UIntPtr StartData; // Allocation Heap
+ NewOS::UIntPtr StartStack; // Stack Pointer.
+ NewOS::Int32 ThreadID; // Thread execution ID.
+};
+
+/// @brief TLS install TIB and PIB.
+EXTERN_C void rt_install_tib(ThreadInformationBlock* TIB, NewOS::VoidPtr PIB);
+
+///! @brief Cookie Sanity check.
+NewOS::Boolean tls_check_tib(ThreadInformationBlock* Ptr);
+
+/// @brief TLS check system call
+EXTERN_C NewOS::Void tls_check_syscall_impl(NewOS::HAL::StackFramePtr StackPtr) noexcept;
+
+#include <KernelKit/ThreadLocalStorage.inl>
+
+// last rev 1/29/24
+
+#endif /* ifndef _KERNELKIT_TLS_HPP */