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.

Regards,
SImon

Reply via email to