On 30.04.25 17:01, Simon Glass wrote:
Hi Heinrich,
On Wed, 30 Apr 2025 at 08:04, Heinrich Schuchardt
<heinrich.schucha...@canonical.com> wrote:
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.
You are missing the point entirely.
However the image calculates the entry point is up to that image. But
the correct entry point should be put into ->ep
We can't have some OS--booting functions using ->ep and some using ->os.load
So please dig in a little more and fix whatever is going wrong here
and ensure that ->ep is set correctly. If you need help, please ask.
The only information that the EFI sub-system cares about is the start of
the image. That information is in os.start_image.
Field ep is for the entry point and not for the start of the image and
EFI should never take it from the FIT meta-information.
This is why whatever value I put into the field entry of my handcrafted
its file is completely irrelevant.
Best regards
Heinrich