summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-07-07 19:06:14 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-07-07 19:08:07 +0200
commitd218537836af849ada9b8ad6ef695e5340ee469b (patch)
tree9c250e0598b1814877dc6062d68a3ca941fc212e
parenteda81576c1241727085c2f62135cdf5dc118a1d0 (diff)
MHR-36: KernelDispatchCall.S: Add ARM64 support.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
-rw-r--r--DDK/KernelDispatchCall.S15
-rw-r--r--DDK/KernelStd.h2
-rw-r--r--Kernel/KernelKit/ThreadLocalStorage.hxx6
-rw-r--r--Kernel/KernelKit/ThreadLocalStorage.inl7
-rw-r--r--Kernel/NewKit/Defines.hpp6
5 files changed, 27 insertions, 9 deletions
diff --git a/DDK/KernelDispatchCall.S b/DDK/KernelDispatchCall.S
index 68423ab5..acdf3f13 100644
--- a/DDK/KernelDispatchCall.S
+++ b/DDK/KernelDispatchCall.S
@@ -1,3 +1,8 @@
+/**
+ lang: asm
+ compiler: gnu
+ */
+
.globl __kernelDispatchCall
.text
@@ -7,15 +12,25 @@
#ifdef __DDK_AMD64__
+/* args rcx, rdx, r8, r9 */
__kernelDispatchCall:
int $0x33
ret
#elif defined(__DDK_POWER64__)
+/* args r8, r9, r10, r11 */
__kernelDispatchCall:
/* There is no specific interrupt request id for a system call in POWER. */
sc
blr
+#elif defined(__DDK_ARM64__)
+
+/* args x0, x8, x9, x10, x11 is kept to tell that this is a kernel call */
+__kernelDispatchCall:
+ /* There is no specific interrupt request id for a system call in ARM64 as well. */
+ mov x11, #0x33
+ svc #0
+
#endif
diff --git a/DDK/KernelStd.h b/DDK/KernelStd.h
index e483d10b..0befc7f9 100644
--- a/DDK/KernelStd.h
+++ b/DDK/KernelStd.h
@@ -13,7 +13,7 @@
#define nil nullptr
#else
#define DK_EXTERN extern
-#define nil NULL
+#define nil ((void*)0)
#endif // defined(__cplusplus)
#include <stdint.h>
diff --git a/Kernel/KernelKit/ThreadLocalStorage.hxx b/Kernel/KernelKit/ThreadLocalStorage.hxx
index 50c53fa4..41313381 100644
--- a/Kernel/KernelKit/ThreadLocalStorage.hxx
+++ b/Kernel/KernelKit/ThreadLocalStorage.hxx
@@ -21,7 +21,7 @@
/// Located in GS on AMD64, other architectures have their own stuff. (64x0, 32x0, ARM64)
struct PACKED ThreadInformationBlock final
{
- Kernel::Char Cookie[kTLSCookieLen];
+ Kernel::Char Cookie[kTLSCookieLen]; // Process cookie.
Kernel::UIntPtr StartCode; // Start Address
Kernel::UIntPtr StartData; // Allocation Heap
Kernel::UIntPtr StartStack; // Stack Pointer.
@@ -39,7 +39,7 @@ T* tls_new_ptr(void);
///! @brief delete ptr syscall.
template <typename T>
-bool tls_delete_ptr(T* ptr);
+Kernel::Boolean tls_delete_ptr(T* ptr);
template <typename T, typename... Args>
T* tls_new_class(Args&&... args);
@@ -52,6 +52,6 @@ EXTERN_C Kernel::Void tls_check_syscall_impl(Kernel::VoidPtr TIB) noexcept;
#include <KernelKit/ThreadLocalStorage.inl>
-// last rev 1/29/24
+// last rev 7/7/24
#endif /* ifndef _KERNELKIT_TLS_HPP */
diff --git a/Kernel/KernelKit/ThreadLocalStorage.inl b/Kernel/KernelKit/ThreadLocalStorage.inl
index c6e61059..319e71b3 100644
--- a/Kernel/KernelKit/ThreadLocalStorage.inl
+++ b/Kernel/KernelKit/ThreadLocalStorage.inl
@@ -25,7 +25,7 @@ inline T* tls_new_ptr(void)
//! @brief TLS delete implementation.
template <typename T>
-inline bool tls_delete_ptr(T* ptr)
+inline Kernel::Bool tls_delete_ptr(T* ptr)
{
if (!ptr)
return false;
@@ -64,8 +64,11 @@ T* tls_new_class(Args&&... args)
/// @param ptr
/// @return
template <typename T>
-inline bool tls_delete_class(T* ptr)
+inline Kernel::Bool tls_delete_class(T* ptr)
{
+ if (!ptr)
+ return false;
+
ptr->~T();
return tls_delete_ptr(ptr);
}
diff --git a/Kernel/NewKit/Defines.hpp b/Kernel/NewKit/Defines.hpp
index f4d143c0..a96bf5a1 100644
--- a/Kernel/NewKit/Defines.hpp
+++ b/Kernel/NewKit/Defines.hpp
@@ -138,10 +138,10 @@ namespace Kernel
? (Kernel::Endian::kEndianBig) \
: (Kernel::Endian::kEndianLittle))
-#define Yes (true)
-#define No (false)
+#define Yes true
+#define No false
-#define VoidStar Kernel::voidPtr
+#define VoidStar Kernel::VoidPtr
#ifdef INIT
#undef INIT