bootm: pass kernel load address not entry point for IH_OS_EFI
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Wed, 30 Apr 2025 10:55:46 +0000 (12:55 +0200)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Thu, 1 May 2025 07:24:39 +0000 (09:24 +0200)
The EFI sub-system needs the load address and not the entry point
to boot the binary passed from the bootm command. The entry point
is derived from the PE-COFF header of the binary.

Fixes: ecc7fdaa9ef1 ("bootm: Add a bootm command for type IH_OS_EFI")
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
boot/bootm_os.c

index dc9d3e6..a3c7cb5 100644 (file)
@@ -498,11 +498,11 @@ static int do_bootm_efi(int flag, struct bootm_info *bmi)
        /* We expect to return */
        images->os.type = IH_TYPE_STANDALONE;
 
-       image_buf = map_sysmem(images->ep, images->os.image_len);
+       image_buf = map_sysmem(images->os.image_start, images->os.image_len);
 
        /* Run EFI image */
        printf("## Transferring control to EFI (at address %08lx) ...\n",
-              images->ep);
+              images->os.image_start);
        bootstage_mark(BOOTSTAGE_ID_RUN_OS);
 
        ret = efi_binary_run(image_buf, images->os.image_len,