summaryrefslogtreecommitdiffhomepage
path: root/Private/NewBoot
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-21 19:48:01 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-21 19:48:56 +0100
commit1b072a1dc14d67c9a64028d515f60c715544fcd4 (patch)
treea853dfac6fd35a0f66d23381245149eea25d7b2b /Private/NewBoot
parent5cc05e3f40267ff30c0191f7c53a62d9c791102b (diff)
Kernel: Got it up and running.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/NewBoot')
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx4
-rw-r--r--Private/NewBoot/Source/RuntimeMain.cxx17
2 files changed, 9 insertions, 12 deletions
diff --git a/Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx b/Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx
index 5a4a2445..e6c962b1 100644
--- a/Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx
+++ b/Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx
@@ -18,6 +18,8 @@
#include <BootKit/Platform.hxx>
#include <EFIKit/Api.hxx>
+#ifndef __BUNDLE_KERNEL__
+
extern "C" void rt_halt() { asm volatile("hlt"); }
extern "C" void rt_cli() { asm volatile("cli"); }
@@ -32,6 +34,8 @@ extern "C" void rt_std() { asm volatile("std"); }
extern "C" void ___chkstk_ms(void) {}
+#endif
+
namespace EFI {
Void Stop() noexcept {
while (true) {
diff --git a/Private/NewBoot/Source/RuntimeMain.cxx b/Private/NewBoot/Source/RuntimeMain.cxx
index 38eb0ea8..4dd0c437 100644
--- a/Private/NewBoot/Source/RuntimeMain.cxx
+++ b/Private/NewBoot/Source/RuntimeMain.cxx
@@ -18,7 +18,7 @@
#ifdef __x86_64__
#include <HALKit/AMD64/HalPageAlloc.hpp>
#else
-#error Unknown CPU.
+#error This CPU is unknown.
#endif // ifdef __x86_64__
#define kHeadersSz \
@@ -43,7 +43,7 @@ EFI_EXTERN_C EFI_API Int EfiMain(EfiHandlePtr ImageHandle,
const char strDate[] = __DATE__;
- writer.WriteString(L"HCoreLdr: Build date: ");
+ writer.WriteString(L"HCoreLdr: Build: ");
for (auto& ch : strDate) writer.WriteCharacter(ch);
@@ -64,7 +64,8 @@ EFI_EXTERN_C EFI_API Int EfiMain(EfiHandlePtr ImageHandle,
if (ptrHdr && ptrHdr->mMachine == EFI::Platform() &&
ptrHdr->mMagic == kPeMagic) {
- if (ptrHdr->mNumberOfSections > 1) {
+ /// sections must be at least 3.
+ if (ptrHdr->mNumberOfSections >= 3) {
ExecOptionalHeaderPtr optHdr = reinterpret_cast<ExecOptionalHeaderPtr>(
ptrHdr + sizeof(ExecHeader));
@@ -122,15 +123,7 @@ EFI_EXTERN_C EFI_API Int EfiMain(EfiHandlePtr ImageHandle,
SystemTable->FirmwareVendor,
handoverHdrPtr->f_FirmwareVendorLen);
- writer.WriteString(L"HCoreLdr: Leaving it to kernel...\r\n");
-
- EFI::ExitBootServices(MapKey, ImageHandle);
-
- HCore::HEL::HandoverProc proc =
- reinterpret_cast<HCore::HEL::HandoverProc>(
- optHdr->mAddressOfEntryPoint);
-
- proc(handoverHdrPtr);
+ writer.WriteString(L"HCoreLdr: Booting HCore...\r\n");
EFI::Stop();