diff options
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) { @@ -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 |
