diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-21 19:48:01 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-21 19:48:56 +0100 |
| commit | 1b072a1dc14d67c9a64028d515f60c715544fcd4 (patch) | |
| tree | a853dfac6fd35a0f66d23381245149eea25d7b2b /Private/NewBoot | |
| parent | 5cc05e3f40267ff30c0191f7c53a62d9c791102b (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.cxx | 4 | ||||
| -rw-r--r-- | Private/NewBoot/Source/RuntimeMain.cxx | 17 |
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(); |
