From 83d4a3734178d93c73395a002c5a07d487be4e06 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 3 Mar 2026 15:47:41 +0100 Subject: fix: BootThread.cpp: Fix regression. Signed-off-by: Amlal El Mahrouss --- src/boot/src/BootThread.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/boot') diff --git a/src/boot/src/BootThread.cpp b/src/boot/src/BootThread.cpp index d18026db..c0c72d8b 100644 --- a/src/boot/src/BootThread.cpp +++ b/src/boot/src/BootThread.cpp @@ -185,7 +185,29 @@ Int32 BootThread::Start(HEL::BootInfoHeader* handover, Bool own_stack) { writer.Write("BootZ: Starting: ").Write(fBlobName).Write("\r"); writer.Write("BootZ: Handover address: ").Write((UIntPtr) fHandover).Write("\r"); - return reinterpret_cast(fStartAddress)(fHandover); + if (own_stack) { + writer.Write("BootZ: Using it's own stack.\r"); + writer.Write("BootZ: Stack address: ").Write((UIntPtr) &fStack[kBootThreadSz - 1]).Write("\r"); + writer.Write("BootZ: Stack size: ").Write(kBootThreadSz).Write("\r"); + + fHandover->f_StackTop = &fStack[kBootThreadSz - 1]; + fHandover->f_StackSz = kBootThreadSz; + + auto ret = rt_jump_to_address(fStartAddress, fHandover, &fStack[kBootThreadSz - 1]); + + // we don't need the stack anymore. + + delete[] fStack; + fStack = nullptr; + + return ret; + } else { + writer.Write("BootZ: Using the bootloader's stack.\r"); + + return reinterpret_cast(fStartAddress)(fHandover); + } + + return kEfiFail; } const Char* BootThread::GetName() { -- cgit v1.2.3