From a0f82d57976648c5bfcf165b2e304d2a4c8fb0c7 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 19 Mar 2024 22:50:16 +0100 Subject: Kernel:Secret: Fix String class. Improve kernel APIs. --- Private/KernelKit/ProcessScheduler.hpp | 3 +- Private/KernelKit/ThreadLocalStorage.hxx | 4 +- Private/NewBoot/BootKit/BootKit.hxx | 4 ++ Private/NewBoot/Source/BootString.cxx | 61 ------------------------- Private/NewBoot/Source/HEL/AMD64/BootString.cxx | 61 +++++++++++++++++++++++++ Private/Source/String.cxx | 9 ++-- Private/Source/ThreadLocalStorage.cxx | 4 +- Private/Source/Utils.cxx | 17 ++++--- 8 files changed, 86 insertions(+), 77 deletions(-) delete mode 100644 Private/NewBoot/Source/BootString.cxx create mode 100644 Private/NewBoot/Source/HEL/AMD64/BootString.cxx (limited to 'Private') diff --git a/Private/KernelKit/ProcessScheduler.hpp b/Private/KernelKit/ProcessScheduler.hpp index ba453fbe..e3cbbe86 100644 --- a/Private/KernelKit/ProcessScheduler.hpp +++ b/Private/KernelKit/ProcessScheduler.hpp @@ -205,7 +205,8 @@ public: using ProcessPtr = Process *; -//! @brief Kernel scheduler.. +/// @brief Process manager class. +/// The main class which you call to schedule an app. class ProcessManager final { private: explicit ProcessManager() = default; diff --git a/Private/KernelKit/ThreadLocalStorage.hxx b/Private/KernelKit/ThreadLocalStorage.hxx index c6be2c2b..09017fc0 100644 --- a/Private/KernelKit/ThreadLocalStorage.hxx +++ b/Private/KernelKit/ThreadLocalStorage.hxx @@ -11,9 +11,9 @@ //! @brief TLS implementation in C++ -#define kCookieMag0 'h' +#define kCookieMag0 'H' #define kCookieMag1 'C' -#define kCookieMag2 'o' +#define kCookieMag2 'R' template T *tls_new_ptr(void); diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx index 93f5c6e2..31acff3f 100644 --- a/Private/NewBoot/BootKit/BootKit.hxx +++ b/Private/NewBoot/BootKit/BootKit.hxx @@ -154,6 +154,10 @@ inline UInt32 In32(UInt16 port) { return value; } +inline Void rt_hlt() { + asm volatile("hlt"); +} + #endif // __EFI_x86_64__ /***********************************************************************************/ diff --git a/Private/NewBoot/Source/BootString.cxx b/Private/NewBoot/Source/BootString.cxx deleted file mode 100644 index 9fbe1a11..00000000 --- a/Private/NewBoot/Source/BootString.cxx +++ /dev/null @@ -1,61 +0,0 @@ -/* ------------------------------------------- - - Copyright Mahrouss Logic - - File: String.cxx - Purpose: NewBoot string library - - Revision History: - - - -------------------------------------------- */ - -#include - -/// bugs 0 - -///////////////////////////////////////////////////////////////////////////////////////////////////////// - -HCore::SizeT BCopyMem(CharacterType *dest, CharacterType *src, - const HCore::SizeT len) { - if (!dest || !src) return 0; - - SizeT index = 0UL; - for (; index < len; ++index) { - dest[index] = src[index]; - } - - return index; -} - -HCore::SizeT BStrLen(const CharacterType *ptr) { - if (!ptr) return 0; - - HCore::SizeT cnt = 0; - - while (*ptr != (CharacterType)0) { - ++ptr; - ++cnt; - } - - return cnt; -} - -HCore::SizeT BSetMem(CharacterType *src, const CharacterType byte, - const HCore::SizeT len) { - if (!src) return 0; - - HCore::SizeT cnt = 0UL; - - while (*src != 0) { - if (cnt > len) break; - - *src = byte; - ++src; - - ++cnt; - } - - return cnt; -} diff --git a/Private/NewBoot/Source/HEL/AMD64/BootString.cxx b/Private/NewBoot/Source/HEL/AMD64/BootString.cxx new file mode 100644 index 00000000..9fbe1a11 --- /dev/null +++ b/Private/NewBoot/Source/HEL/AMD64/BootString.cxx @@ -0,0 +1,61 @@ +/* ------------------------------------------- + + Copyright Mahrouss Logic + + File: String.cxx + Purpose: NewBoot string library + + Revision History: + + + +------------------------------------------- */ + +#include + +/// bugs 0 + +///////////////////////////////////////////////////////////////////////////////////////////////////////// + +HCore::SizeT BCopyMem(CharacterType *dest, CharacterType *src, + const HCore::SizeT len) { + if (!dest || !src) return 0; + + SizeT index = 0UL; + for (; index < len; ++index) { + dest[index] = src[index]; + } + + return index; +} + +HCore::SizeT BStrLen(const CharacterType *ptr) { + if (!ptr) return 0; + + HCore::SizeT cnt = 0; + + while (*ptr != (CharacterType)0) { + ++ptr; + ++cnt; + } + + return cnt; +} + +HCore::SizeT BSetMem(CharacterType *src, const CharacterType byte, + const HCore::SizeT len) { + if (!src) return 0; + + HCore::SizeT cnt = 0UL; + + while (*src != 0) { + if (cnt > len) break; + + *src = byte; + ++src; + + ++cnt; + } + + return cnt; +} diff --git a/Private/Source/String.cxx b/Private/Source/String.cxx index 23955068..a27a3a37 100644 --- a/Private/Source/String.cxx +++ b/Private/Source/String.cxx @@ -60,8 +60,7 @@ ErrorOr StringBuilder::Construct(const Char *data) { StringView view(rt_string_len(data)); - rt_copy_memory(reinterpret_cast(const_cast(data)), - reinterpret_cast(view.Data()), view.Length()); + view += data; return ErrorOr(view); } @@ -165,16 +164,16 @@ const char *StringBuilder::Format(const char *fmt, const char *fmt2) { } static void string_append(char *lhs, char *rhs, int cur) { - if (lhs && rhs && cur < rt_string_len(lhs)) { + if (lhs && rhs) { SizeT sz_rhs = rt_string_len(rhs); + if (sz_rhs == 0) return; + rt_copy_memory(rhs, lhs + cur, sz_rhs); } } StringView &StringView::operator+=(const Char *rhs) { - if (rt_string_len(rhs) > rt_string_len(this->m_Data)) return *this; - string_append(this->m_Data, const_cast(rhs), this->m_Cur); this->m_Cur += rt_string_len(rhs); diff --git a/Private/Source/ThreadLocalStorage.cxx b/Private/Source/ThreadLocalStorage.cxx index 30a241ea..ab3b8383 100644 --- a/Private/Source/ThreadLocalStorage.cxx +++ b/Private/Source/ThreadLocalStorage.cxx @@ -21,14 +21,14 @@ using namespace HCore; /** * Check for cookie inside TIB. - * @param ptr + * @param tib the TIB to check. * @return if the cookie is enabled. */ Boolean tls_check_tib(ThreadInformationBlock* tib) { if (!tib) return false; - HCore::Encoder encoder; + Encoder encoder; const char* tibAsBytes = encoder.AsBytes(tib); kcout << "HCoreKrnl\\TLS: Checking for a valid cookie...\n"; diff --git a/Private/Source/Utils.cxx b/Private/Source/Utils.cxx index b9264e36..d1b146f8 100644 --- a/Private/Source/Utils.cxx +++ b/Private/Source/Utils.cxx @@ -5,6 +5,7 @@ ------------------------------------------- */ #include +#include namespace HCore { Int rt_string_cmp(const Char *src, const Char *cmp, Size size) { @@ -36,13 +37,17 @@ Size rt_string_len(const Char *str, SizeT _len) { return len; } -Size rt_string_len(const Char *str) { - if (*str == '\0') return 0; +Size rt_string_len(const Char *ptr) { + if (!ptr) return 0; - Size len{0}; - while (str[len] != '\0') ++len; + SizeT cnt = 0; - return len; + while (*ptr != (Char)0) { + ++ptr; + ++cnt; + } + + return cnt; } voidPtr rt_set_memory(voidPtr src, char value, Size len) { @@ -70,7 +75,7 @@ Int rt_move_memory(const voidPtr src, voidPtr dst, Size len) { dstChar[index] = srcChr[index]; srcChr[index] = 0; - index++; + ++index; } return 0; -- cgit v1.2.3