diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-12-01 18:41:41 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-12-01 18:41:41 +0100 |
| commit | f83e7bddcf24433adbfc9214e0f8f8139f8b6362 (patch) | |
| tree | 0447eddc2ebff291f96286847c238b4f907515b1 /dev/ZBAKit/src | |
| parent | c62790f8f773a2f10464d2b1e0e286f2b3156712 (diff) | |
FIX: Fixing ARM64 execution when booting from bootloader.
FIX: Now works both for ARM64 and AMD64 EFI backends.
TODO: The ACB backend needs to be done too.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/ZBAKit/src')
| -rw-r--r-- | dev/ZBAKit/src/HEL/ARM64/BootAPI.S | 12 | ||||
| -rw-r--r-- | dev/ZBAKit/src/HEL/ARM64/BootMain.cc | 14 |
2 files changed, 19 insertions, 7 deletions
diff --git a/dev/ZBAKit/src/HEL/ARM64/BootAPI.S b/dev/ZBAKit/src/HEL/ARM64/BootAPI.S new file mode 100644 index 00000000..9a53dfc9 --- /dev/null +++ b/dev/ZBAKit/src/HEL/ARM64/BootAPI.S @@ -0,0 +1,12 @@ +.global rt_jump_to_address + +.text + +/** + @brief this function setups a stack and then jumps to + a function */ +rt_jump_to_address: + mov x19, x0 + mov sp, x2 + br x19 + diff --git a/dev/ZBAKit/src/HEL/ARM64/BootMain.cc b/dev/ZBAKit/src/HEL/ARM64/BootMain.cc index 1d3d9150..99e321ee 100644 --- a/dev/ZBAKit/src/HEL/ARM64/BootMain.cc +++ b/dev/ZBAKit/src/HEL/ARM64/BootMain.cc @@ -9,12 +9,12 @@ #include <BootKit/Thread.h> #include <BootKit/BootKit.h> -#ifndef cExpectedWidth -#define cExpectedWidth 844 +#ifndef kExpectedWidth +#define kExpectedWidth 844 #endif -#ifndef cExpectedHeight -#define cExpectedHeight 390 +#ifndef kExpectedHeight +#define kExpectedHeight 390 #endif EXTERN EfiBootServices* BS; @@ -52,8 +52,8 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, writer.Write(infoPtr->VerticalResolution); writer.Write("\r"); - if (infoPtr->HorizontalResolution == cExpectedWidth && - infoPtr->VerticalResolution == cExpectedHeight) + if (infoPtr->HorizontalResolution == kExpectedWidth && + infoPtr->VerticalResolution == kExpectedHeight) { kGop->SetMode(kGop, i); break; @@ -69,7 +69,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, auto kernel_thread = Boot::BThread(reader_kernel.Blob()); if (kernel_thread.IsValid()) - kernel_thread.Start(nullptr); + kernel_thread.Start(nullptr, YES); } CANT_REACH(); |
