On 30.04.25 15:54, Simon Glass wrote:
Hi Heinrich,

On Wed, 30 Apr 2025 at 04:55, Heinrich Schuchardt
<heinrich.schucha...@canonical.com> wrote:

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")
Signed-off-by: Heinrich Schuchardt <heinrich.schucha...@canonical.com>
---
  boot/bootm_os.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/boot/bootm_os.c b/boot/bootm_os.c
index dc9d3e61fca..a3c7cb5332e 100644
--- a/boot/bootm_os.c
+++ b/boot/bootm_os.c
@@ -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,

In this case ep should be set to image_start as it is with many
methods. How come it isn't in this case?

As described above the entry point is encoded in the PE-COFF header.

What makes you think that a user would set it in an its file containing an EFI binary?

If it where set, it would point to an address after the load address and not to the start of the PE-COFF header.

The proper design would completely remove load and entry addresses in FIT images and use LMB for memory allocation.

Best regards

Heinrich

Reply via email to