summaryrefslogtreecommitdiffhomepage
path: root/dev/boot
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-04-18 00:19:48 +0200
committerGitHub <noreply@github.com>2025-04-18 00:19:48 +0200
commitee1edba85ea13627871e1ed005931bd502b86ab8 (patch)
tree8570cd210aaf11d8cd36aebf3b682e420a497bff /dev/boot
parent6b7403efd291f80a06267817afee4c0a4c8da56c (diff)
parent7bfa36c2215e13097bb5ddcb15d2a8a476102b55 (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.cc21
-rw-r--r--dev/boot/src/HEL/AMD64/BootEFI.cc7
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();