diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-18 00:19:48 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-18 00:19:48 +0200 |
| commit | ee1edba85ea13627871e1ed005931bd502b86ab8 (patch) | |
| tree | 8570cd210aaf11d8cd36aebf3b682e420a497bff /dev/boot | |
| parent | 6b7403efd291f80a06267817afee4c0a4c8da56c (diff) | |
| parent | 7bfa36c2215e13097bb5ddcb15d2a8a476102b55 (diff) | |
Merge pull request #23 from amlel-el-mahrouss/dev
dev, kernel: important patches.
Diffstat (limited to 'dev/boot')
| -rw-r--r-- | dev/boot/src/BootThread.cc | 21 | ||||
| -rw-r--r-- | dev/boot/src/HEL/AMD64/BootEFI.cc | 7 |
2 files changed, 25 insertions, 3 deletions
diff --git a/dev/boot/src/BootThread.cc b/dev/boot/src/BootThread.cc index f1866a76..484c242d 100644 --- a/dev/boot/src/BootThread.cc +++ b/dev/boot/src/BootThread.cc @@ -80,6 +80,12 @@ namespace Boot fStack = new UInt8[mib_cast(16)]; + if (!fStack) + { + writer.Write("BootZ: Unable to allocate stack.\r"); + return; + } + LDR_SECTION_HEADER_PTR sectPtr = (LDR_SECTION_HEADER_PTR)(((Char*)opt_header_ptr) + header_ptr->SizeOfOptionalHeader); constexpr auto sectionForCode = ".text"; @@ -168,6 +174,21 @@ namespace Boot { fHandover = handover; + if (!fStartAddress) + { + return kEfiFail; + } + + if (!fHandover) + { + return kEfiFail; + } + + BootTextWriter writer; + + writer.Write("BootZ: Starting: ").Write(fBlobName).Write("\r"); + writer.Write("BootZ: Handover address: ").Write((UIntPtr)fHandover).Write("\r"); + if (own_stack) { return rt_jump_to_address(fStartAddress, fHandover, &fStack[mib_cast(16) - 1]); diff --git a/dev/boot/src/HEL/AMD64/BootEFI.cc b/dev/boot/src/HEL/AMD64/BootEFI.cc index 2ee662f3..58f04491 100644 --- a/dev/boot/src/HEL/AMD64/BootEFI.cc +++ b/dev/boot/src/HEL/AMD64/BootEFI.cc @@ -226,8 +226,8 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, handover_hdr->f_Magic = kHandoverMagic; handover_hdr->f_Version = kHandoverVersion; - handover_hdr->f_EFIImageKey = map_key; - handover_hdr->f_EFIImage = image_handle; + handover_hdr->f_HardwareTables.f_ImageKey = map_key; + handover_hdr->f_HardwareTables.f_ImageHandle = image_handle; // Provide fimware vendor name. @@ -245,6 +245,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, /// access attributes (in order) /// EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS UInt32 attr = 0x00000001 | 0x00000002 | 0x00000004; + ST->RuntimeServices->SetVariable(L"/props/boot_path", kEfiGlobalNamespaceVarGUID, &attr, &kernel_path_sz, kernel_path); } @@ -281,7 +282,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, auto kernel_thread = Boot::BootThread(reader_kernel.Blob()); - kernel_thread.SetName("BootZ: Kernel"); + kernel_thread.SetName("BootZ: NeKernel"); handover_hdr->f_KernelImage = reader_kernel.Blob(); handover_hdr->f_KernelSz = reader_kernel.Size(); |
