summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--BUG_LIST.TXT (renamed from Public/BUG_LIST.TXT)0
-rw-r--r--Private/ArchKit/SyscallImpl.hpp13
-rw-r--r--Private/EFIKit/Api.hxx4
-rw-r--r--Private/EFIKit/EFI.hxx2
-rw-r--r--Private/EFIKit/EPM.hxx2
-rw-r--r--Private/EFIKit/UEFI.hxx2
-rw-r--r--Private/HintKit/CompilerHint.hxx21
-rw-r--r--Private/KernelKit/FileManager.hpp2
-rw-r--r--Private/KernelKit/ThreadLocalStorage.hxx12
-rw-r--r--Private/NewBoot/BootKit/BootKit.hxx2
-rw-r--r--Private/NewBoot/BootKit/EPM.hxx2
-rw-r--r--Private/NewBoot/BootKit/Platform.hxx2
-rw-r--r--Private/NewBoot/Source/FileReader.cxx17
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/AMD64-AHCI.cxx2
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx2
-rw-r--r--Private/NewBoot/Source/RuntimeMain.cxx6
-rw-r--r--Private/NewKit/Defines.hpp6
-rw-r--r--Private/NewKit/RuntimeCheck.hpp2
-rw-r--r--Private/Source/PEFCodeManager.cxx2
-rw-r--r--Private/Source/SMPManager.cxx16
-rw-r--r--Private/Source/UserHeap.cxx54
-rw-r--r--ReadMe.md2
-rw-r--r--SPECIFICATION.TXT (renamed from Public/SPECIFICATION.TXT)0
-rw-r--r--TODO_LIST.TXT (renamed from Public/TODO_LIST.TXT)0
24 files changed, 92 insertions, 81 deletions
diff --git a/Public/BUG_LIST.TXT b/BUG_LIST.TXT
index 1fa4e00a..1fa4e00a 100644
--- a/Public/BUG_LIST.TXT
+++ b/BUG_LIST.TXT
diff --git a/Private/ArchKit/SyscallImpl.hpp b/Private/ArchKit/SyscallImpl.hpp
deleted file mode 100644
index 26acdd38..00000000
--- a/Private/ArchKit/SyscallImpl.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * ========================================================
- *
- * HCore
- * Copyright Mahrouss Logic, all rights reserved.
- *
- * ========================================================
- */
-
-#pragma once
-
-#include <ArchKit/ArchKit.hpp>
-
diff --git a/Private/EFIKit/Api.hxx b/Private/EFIKit/Api.hxx
index 0297ad96..7338235a 100644
--- a/Private/EFIKit/Api.hxx
+++ b/Private/EFIKit/Api.hxx
@@ -2,7 +2,7 @@
* ========================================================
*
* h-core
- * Copyright 2024, Mahrouss Logic, all rights reserved.
+ * Copyright, Mahrouss Logic, all rights reserved.
*
* ========================================================
*/
@@ -30,8 +30,6 @@ Bascially frees everything we have in the EFI side.
inline void ExitBootServices(UInt64 MapKey, EfiHandlePtr ImageHandle) noexcept {
if (!ST) return;
- ST->ConOut->OutputString(ST->ConOut, L"HCoreLdr: Exit BootServices...\r\n");
-
/// The MapKey may be invalid.
/// If so, then hang the computer.
if (ST->BootServices->ExitBootServices(ImageHandle, MapKey) != kEfiOk) {
diff --git a/Private/EFIKit/EFI.hxx b/Private/EFIKit/EFI.hxx
index 30899ca9..dfaf68eb 100644
--- a/Private/EFIKit/EFI.hxx
+++ b/Private/EFIKit/EFI.hxx
@@ -2,7 +2,7 @@
* ========================================================
*
* h-core
- * Copyright 2024, Mahrouss Logic, all rights reserved.
+ * Copyright, Mahrouss Logic, all rights reserved.
*
* ========================================================
*/
diff --git a/Private/EFIKit/EPM.hxx b/Private/EFIKit/EPM.hxx
index 8c8f724f..bd0e07ff 100644
--- a/Private/EFIKit/EPM.hxx
+++ b/Private/EFIKit/EPM.hxx
@@ -2,7 +2,7 @@
* ========================================================
*
* h-core
- * Copyright 2024, Mahrouss Logic, all rights reserved.
+ * Copyright, Mahrouss Logic, all rights reserved.
*
* ========================================================
*/
diff --git a/Private/EFIKit/UEFI.hxx b/Private/EFIKit/UEFI.hxx
index aeee81cb..de211a4a 100644
--- a/Private/EFIKit/UEFI.hxx
+++ b/Private/EFIKit/UEFI.hxx
@@ -2,7 +2,7 @@
* ========================================================
*
* h-core
- * Copyright 2024, Mahrouss Logic, all rights reserved.
+ * Copyright, Mahrouss Logic, all rights reserved.
*
* ========================================================
*/
diff --git a/Private/HintKit/CompilerHint.hxx b/Private/HintKit/CompilerHint.hxx
new file mode 100644
index 00000000..e74f349a
--- /dev/null
+++ b/Private/HintKit/CompilerHint.hxx
@@ -0,0 +1,21 @@
+/*
+ * ========================================================
+ *
+ * HintKit
+ * Copyright Mahrouss Logic, all rights reserved.
+ *
+ * ========================================================
+ */
+
+#ifndef __HINTKIT_COMPILER_HINT_HXX__
+#define __HINTKIT_COMPILER_HINT_HXX__
+
+#define _Input
+#define _Output
+
+#define _Optional
+
+#define _StrictCheckInput
+#define _StrictCheckOutput
+
+#endif // ifndef __HINTKIT_COMPILER_HINT_HXX__
diff --git a/Private/KernelKit/FileManager.hpp b/Private/KernelKit/FileManager.hpp
index 29c5e755..a191368e 100644
--- a/Private/KernelKit/FileManager.hpp
+++ b/Private/KernelKit/FileManager.hpp
@@ -185,7 +185,7 @@ class FileStream final {
return ErrorOr<Int64>(H_INVALID_DATA);
}
- VoidPtr ReadAll() noexcept {
+ VoidPtr Read() noexcept {
auto man = FSClass::GetMounted();
if (man) {
diff --git a/Private/KernelKit/ThreadLocalStorage.hxx b/Private/KernelKit/ThreadLocalStorage.hxx
index e7c55ee7..db04c054 100644
--- a/Private/KernelKit/ThreadLocalStorage.hxx
+++ b/Private/KernelKit/ThreadLocalStorage.hxx
@@ -29,14 +29,16 @@ T *hcore_tls_new_class(Args &&...args);
typedef HCore::Char rt_cookie_type[3];
+#define kTIBNameLen 256
+
/// @brief Thread Information Block for Local Storage.
/// Located in GS on AMD64, Virtual Address 0x10000 (64x0, 32x0, ARM64)
struct ThreadInformationBlock final {
- HCore::Char Name[kNameLen]; // Module Name
- HCore::UIntPtr StartCode; // Start Address
- HCore::UIntPtr StartData; // Allocation Heap
- HCore::UIntPtr StartStack; // Stack Pointer.
- HCore::Int32 Arch; // Architecture and/or platform.
+ HCore::Char Name[kTIBNameLen]; // 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.
};
diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx
index 2eaea9d1..0c747643 100644
--- a/Private/NewBoot/BootKit/BootKit.hxx
+++ b/Private/NewBoot/BootKit/BootKit.hxx
@@ -64,7 +64,7 @@ class BFileReader final {
explicit BFileReader(const CharacterType *path, EfiHandlePtr ImageHandle);
~BFileReader();
- Void ReadAll();
+ Void Read();
enum {
kOperationOkay,
diff --git a/Private/NewBoot/BootKit/EPM.hxx b/Private/NewBoot/BootKit/EPM.hxx
index 359eed1b..328906f2 100644
--- a/Private/NewBoot/BootKit/EPM.hxx
+++ b/Private/NewBoot/BootKit/EPM.hxx
@@ -2,7 +2,7 @@
* ========================================================
*
* h-core
- * Copyright 2024, Mahrouss Logic, all rights reserved.
+ * Copyright, Mahrouss Logic, all rights reserved.
*
* ========================================================
*/
diff --git a/Private/NewBoot/BootKit/Platform.hxx b/Private/NewBoot/BootKit/Platform.hxx
index 917678b9..346357cb 100644
--- a/Private/NewBoot/BootKit/Platform.hxx
+++ b/Private/NewBoot/BootKit/Platform.hxx
@@ -2,7 +2,7 @@
* ========================================================
*
* h-core
- * Copyright 2024, Mahrouss Logic, all rights reserved.
+ * Copyright, Mahrouss Logic, all rights reserved.
*
* ========================================================
*/
diff --git a/Private/NewBoot/Source/FileReader.cxx b/Private/NewBoot/Source/FileReader.cxx
index b26c4d78..5768cae0 100644
--- a/Private/NewBoot/Source/FileReader.cxx
+++ b/Private/NewBoot/Source/FileReader.cxx
@@ -19,11 +19,12 @@
/// BUGS: 0
////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-//
-// @brief BImageReader class
-//
-//
+///
+///
+/// @name BFileReader class
+/// @brief Reads the file as a blob.
+///
+///
////////////////////////////////////////////////////////////////////////////////////////////////////
/***
@@ -102,11 +103,7 @@ BFileReader::~BFileReader() {
@brief this reads all of the buffer.
@param ImageHandle used internally.
*/
-Void BFileReader::ReadAll() {
- mWriter.WriteString(L"HCoreLdr: ReadAll: ")
- .WriteString(mPath)
- .WriteString(L"\r\n");
-
+Void BFileReader::Read() {
/// Allocate Handover page.
if (mBlob == nullptr) {
diff --git a/Private/NewBoot/Source/HEL/AMD64/AMD64-AHCI.cxx b/Private/NewBoot/Source/HEL/AMD64/AMD64-AHCI.cxx
index 2363f8cb..357bd591 100644
--- a/Private/NewBoot/Source/HEL/AMD64/AMD64-AHCI.cxx
+++ b/Private/NewBoot/Source/HEL/AMD64/AMD64-AHCI.cxx
@@ -14,7 +14,7 @@
* @version 0.1
* @date 2024-02-02
*
- * @copyright Copyright (c) 2024 Mahrouss Logic
+ * @copyright Copyright (c) Mahrouss Logic
*
*/
diff --git a/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx b/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx
index 757c294d..5382fd30 100644
--- a/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx
+++ b/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx
@@ -14,7 +14,7 @@
* @version 0.1
* @date 2024-02-02
*
- * @copyright Copyright (c) 2024 Mahrouss Logic
+ * @copyright Copyright (c) Mahrouss Logic
*
*/
diff --git a/Private/NewBoot/Source/RuntimeMain.cxx b/Private/NewBoot/Source/RuntimeMain.cxx
index 40d9e819..a520b980 100644
--- a/Private/NewBoot/Source/RuntimeMain.cxx
+++ b/Private/NewBoot/Source/RuntimeMain.cxx
@@ -48,10 +48,14 @@ EFI_EXTERN_C EFI_API Int EfiMain(EfiHandlePtr ImageHandle,
.WriteString(SystemTable->FirmwareVendor)
.WriteString(L"\r\n");
+ writer.WriteString(L"HCoreLdr: Reading: ")
+ .WriteString(L"HCOREKRNL.EXE")
+ .WriteString(L"\r\n");
+
BFileReader img(L"HCOREKRNL.EXE", ImageHandle);
img.Size() = Detail::kBufferReadSz;
- img.ReadAll();
+ img.Read();
if (img.Error() == BFileReader::kOperationOkay) {
BlobType blob = (BlobType)img.Blob();
diff --git a/Private/NewKit/Defines.hpp b/Private/NewKit/Defines.hpp
index 3c07c1e4..9a766f5a 100644
--- a/Private/NewKit/Defines.hpp
+++ b/Private/NewKit/Defines.hpp
@@ -91,3 +91,9 @@ Args &&move(Args &&arg) {
#define No (false)
#define VoidStar HCore::voidPtr
+
+#ifdef INIT
+#undef INIT
+#endif // ifdef INIT
+
+#define INIT(OBJ, TYPE, ...) TYPE OBJ = TYPE(__VA_ARGS__)
diff --git a/Private/NewKit/RuntimeCheck.hpp b/Private/NewKit/RuntimeCheck.hpp
index 4a10d31c..7221b3ea 100644
--- a/Private/NewKit/RuntimeCheck.hpp
+++ b/Private/NewKit/RuntimeCheck.hpp
@@ -52,8 +52,6 @@ void ke_stop(const Int &id);
#undef TRY
#endif
-#define INIT(OBJ, TYPE, ...) TYPE OBJ = TYPE(__VA_ARGS__)
-
#define TRY(FN) \
if (!FN()) { \
MUST_PASS(false); \
diff --git a/Private/Source/PEFCodeManager.cxx b/Private/Source/PEFCodeManager.cxx
index e7e0d9a0..530667cf 100644
--- a/Private/Source/PEFCodeManager.cxx
+++ b/Private/Source/PEFCodeManager.cxx
@@ -48,7 +48,7 @@ PEFLoader::PEFLoader(const char *path) : fCachedBlob(nullptr), fBad(false) {
if (StringBuilder::Equals(file->MIME(), this->MIME())) {
fPath = StringBuilder::Construct(path).Leak();
- fCachedBlob = file->ReadAll();
+ fCachedBlob = file->Read();
PEFContainer *container = reinterpret_cast<PEFContainer *>(fCachedBlob);
diff --git a/Private/Source/SMPManager.cxx b/Private/Source/SMPManager.cxx
index 0b3e1550..3db349fe 100644
--- a/Private/Source/SMPManager.cxx
+++ b/Private/Source/SMPManager.cxx
@@ -11,19 +11,19 @@
#include <KernelKit/ProcessManager.hpp>
#include <KernelKit/SMPManager.hpp>
-/// BUGS: 0
+///! BUGS: 0
///! @brief This file handles multi processing in HCore.
///! @brief Multi processing is needed for multi-tasking operations.
namespace HCore {
-// A HardwareThread class takes care of it's owned hardware thread.
-// It has a stack for it's core.
+///! A HardwareThread class takes care of it's owned hardware thread.
+///! It has a stack for it's core.
-// @brief constructor
+///! @brief constructor
HardwareThread::HardwareThread() = default;
-// @brief destructor
+///! @brief destructor
HardwareThread::~HardwareThread() = default;
//! @brief returns the id
@@ -110,14 +110,14 @@ bool SMPManager::Switch(HAL::StackFrame* stack) {
continue;
// to avoid any null deref.
- if (!stack, m_ThreadList[idx].Leak().Leak().m_Stack) continue;
+ if (!m_ThreadList[idx].Leak().Leak().m_Stack) continue;
+ if (m_ThreadList[idx].Leak().Leak().m_Stack->Rsp == 0) continue;
+ if (m_ThreadList[idx].Leak().Leak().m_Stack->Rbp == 0) continue;
m_ThreadList[idx].Leak().Leak().Busy(true);
m_ThreadList[idx].Leak().Leak().m_ID = idx;
- m_ThreadList[idx].Leak().Leak().Busy(true);
-
/// I figured out this:
/// Allocate stack
/// Set APIC base to stack
diff --git a/Private/Source/UserHeap.cxx b/Private/Source/UserHeap.cxx
index 4690db9f..5b086111 100644
--- a/Private/Source/UserHeap.cxx
+++ b/Private/Source/UserHeap.cxx
@@ -45,12 +45,12 @@ Ref<Pmm> HeapManager::s_Pmm;
Boolean HeapManager::s_PoolsAreEnabled = true;
Array<Ref<PTEWrapper*>, kPoolMaxSz> HeapManager::s_Pool;
-STATIC voidPtr ke_find_unused_heap(Int flags);
-STATIC void ke_free_heap_internal(voidPtr vaddr);
-STATIC voidPtr ke_make_heap(voidPtr vaddr, Int flags);
-STATIC Boolean ke_check_and_free_heap(const SizeT& index, voidPtr ptr);
+STATIC VoidPtr ke_find_unused_heap(Int flags);
+STATIC void ke_free_heap_internal(VoidPtr vaddr);
+STATIC VoidPtr ke_make_heap(VoidPtr vaddr, Int flags);
+STATIC Boolean ke_check_and_free_heap(const SizeT& index, VoidPtr ptr);
-STATIC voidPtr ke_find_unused_heap(Int flags) {
+STATIC VoidPtr ke_find_unused_heap(Int flags) {
for (SizeT index = 0; index < kPoolMaxSz; ++index) {
if (HeapManager::The()[index] &&
!HeapManager::The()[index].Leak().Leak().Leak()->Present()) {
@@ -58,7 +58,7 @@ STATIC voidPtr ke_find_unused_heap(Int flags) {
HeapManager::The()[index].Leak().Leak(), true);
kcout << "[ke_find_unused_heap] Done, trying now to make a pool\r\n";
- return ke_make_heap((voidPtr)HeapManager::The()[index]
+ return ke_make_heap((VoidPtr)HeapManager::The()[index]
.Leak()
.Leak()
.Leak()
@@ -70,21 +70,21 @@ STATIC voidPtr ke_find_unused_heap(Int flags) {
return nullptr;
}
-STATIC voidPtr ke_make_heap(voidPtr virtualAddress, Int flags) {
+STATIC VoidPtr ke_make_heap(VoidPtr virtualAddress, Int flags) {
if (virtualAddress) {
- HeapHeader* pool_hdr = reinterpret_cast<HeapHeader*>(virtualAddress);
+ HeapHeader* poolHdr = reinterpret_cast<HeapHeader*>(virtualAddress);
- if (!pool_hdr->Free) {
- kcout << "[ke_make_heap] pool_hdr->Free, Pool already exists\n";
+ if (!poolHdr->Free) {
+ kcout << "[ke_make_heap] poolHdr->Free, Pool already exists\n";
return nullptr;
}
- pool_hdr->Flags = flags;
- pool_hdr->Magic = kPoolMag;
- pool_hdr->Free = false;
+ poolHdr->Flags = flags;
+ poolHdr->Magic = kPoolMag;
+ poolHdr->Free = false;
kcout << "[ke_make_heap] New allocation has been done.\n";
- return reinterpret_cast<voidPtr>(
+ return reinterpret_cast<VoidPtr>(
(reinterpret_cast<UIntPtr>(virtualAddress) + sizeof(HeapHeader)));
}
@@ -92,13 +92,13 @@ STATIC voidPtr ke_make_heap(voidPtr virtualAddress, Int flags) {
return nullptr;
}
-STATIC void ke_free_heap_internal(voidPtr virtualAddress) {
- HeapHeader* pool_hdr = reinterpret_cast<HeapHeader*>(
+STATIC void ke_free_heap_internal(VoidPtr virtualAddress) {
+ HeapHeader* poolHdr = reinterpret_cast<HeapHeader*>(
reinterpret_cast<UIntPtr>(virtualAddress) - sizeof(HeapHeader));
- if (pool_hdr->Magic == kPoolMag) {
- pool_hdr->Free = false;
- pool_hdr->Flags = 0;
+ if (poolHdr->Magic == kPoolMag) {
+ poolHdr->Free = false;
+ poolHdr->Flags = 0;
kcout << "[ke_free_heap_internal] Successfully marked header as free!\r\n";
}
@@ -111,11 +111,11 @@ STATIC void ke_free_heap_internal(voidPtr virtualAddress) {
* @param ptr The ptr to check.
* @return Boolean true if successful.
*/
-STATIC Boolean ke_check_and_free_heap(const SizeT& index, voidPtr ptr) {
+STATIC Boolean ke_check_and_free_heap(const SizeT& index, VoidPtr ptr) {
if (HeapManager::The()[index]) {
// ErrorOr<>::operator Boolean
- /// if address matches
- /// -> Free Pool.
+ /// if (address matches)
+ /// -> Free Pool.
if (HeapManager::The()[index].Leak().Leak().Leak()->VirtualAddress() ==
(UIntPtr)ptr) {
HeapManager::Leak().Leak().FreePage(
@@ -136,12 +136,12 @@ STATIC Boolean ke_check_and_free_heap(const SizeT& index, voidPtr ptr) {
/// @brief Creates a new pool pointer.
/// @param flags the flags attached to it.
/// @return a pool pointer with selected permissions.
-voidPtr ke_new_heap(Int32 flags) {
+VoidPtr ke_new_heap(Int32 flags) {
if (!HeapManager::IsEnabled()) return nullptr;
if (HeapManager::Count() > kPoolMaxSz) return nullptr;
- if (voidPtr ret = ke_find_unused_heap(flags)) return ret;
+ if (VoidPtr ret = ke_find_unused_heap(flags)) return ret;
// this wasn't set to true
auto ref_page = HeapManager::Leak().Leak().RequestPage(((flags & kPoolUser)),
@@ -154,11 +154,9 @@ voidPtr ke_new_heap(Int32 flags) {
++ref; // increment the number of addresses we have now.
- ref_page->NoExecute(true);
-
// finally make the pool address.
return ke_make_heap(
- reinterpret_cast<voidPtr>(ref_page.Leak()->VirtualAddress()), flags);
+ reinterpret_cast<VoidPtr>(ref_page.Leak()->VirtualAddress()), flags);
}
return nullptr;
@@ -167,7 +165,7 @@ voidPtr ke_new_heap(Int32 flags) {
/// @brief free a pool pointer.
/// @param ptr The pool pointer to free.
/// @return status code
-Int32 ke_free_heap(voidPtr ptr) {
+Int32 ke_free_heap(VoidPtr ptr) {
if (!HeapManager::IsEnabled()) return -1;
if (ptr) {
diff --git a/ReadMe.md b/ReadMe.md
index 2115dd94..3549c26e 100644
--- a/ReadMe.md
+++ b/ReadMe.md
@@ -22,4 +22,4 @@ make all
You'd also need The SDK and MinGW, to build and link the components. For Tools look at `Public/Tools`
-##### Copyright 2024, Mahrouss Logic, all rights reserved. \ No newline at end of file
+##### Copyright, Mahrouss Logic, all rights reserved.
diff --git a/Public/SPECIFICATION.TXT b/SPECIFICATION.TXT
index 6a129d9e..6a129d9e 100644
--- a/Public/SPECIFICATION.TXT
+++ b/SPECIFICATION.TXT
diff --git a/Public/TODO_LIST.TXT b/TODO_LIST.TXT
index d3a2eed2..d3a2eed2 100644
--- a/Public/TODO_LIST.TXT
+++ b/TODO_LIST.TXT