From mboxrd@z Thu Jan 1 00:00:00 1970 From: Florian Fainelli Date: Sat, 9 Dec 2017 15:09:46 -0800 Subject: [U-Boot] [PATCH v3 15/18] efi_loader: output load options in helloworld In-Reply-To: <20171126130523.4993-16-xypron.glpk@gmx.de> References: <20171126130523.4993-1-xypron.glpk@gmx.de> <20171126130523.4993-16-xypron.glpk@gmx.de> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 11/26/2017 05:05 AM, Heinrich Schuchardt wrote: > We need to test if we pass a valid image handle when loading > and EFI application. This cannot be done in efi_selftest as > it is not loaded as an image. > > So let's enhance helloworld a bit. > > Reviewed-by: Simon Glass > Signed-off-by: Heinrich Schuchardt This particular patch/commit bbf75dd9345d0b1a7ec7a50016547eb7c759b7af ("efi_loader: output load options in helloworld") was bisected and causes the Lamobo_R1_defconfig build using the toolchain at [1] to fail with: /home/fainelli/work/toolchains/stbgcc-6.3-1.1/bin/arm-linux-ld.bfd: error: required section '.got' not found in the linker script /home/fainelli/work/toolchains/stbgcc-6.3-1.1/bin/arm-linux-ld.bfd: final link failed: Invalid operation scripts/Makefile.lib:409: recipe for target 'lib/efi_loader/helloworld_efi.so' failed make[2]: *** [lib/efi_loader/helloworld_efi.so] Error 1 rm lib/efi_loader/helloworld.o scripts/Makefile.build:425: recipe for target 'lib/efi_loader' failed make[1]: *** [lib/efi_loader] Error 2 [1]: https://github.com/Broadcom/stbgcc-6.3/releases/tag/stbgcc-6.3-1.1 > --- > v3 > no change > v2 > new patch > --- > lib/efi_loader/helloworld.c | 37 +++++++++++++++++++++++++++++++++++-- > 1 file changed, 35 insertions(+), 2 deletions(-) > > diff --git a/lib/efi_loader/helloworld.c b/lib/efi_loader/helloworld.c > index 77130a36dd..e59c24c788 100644 > --- a/lib/efi_loader/helloworld.c > +++ b/lib/efi_loader/helloworld.c > @@ -5,19 +5,52 @@ > * Written by Simon Glass > * > * SPDX-License-Identifier: GPL-2.0+ > + * > + * This program demonstrates calling a boottime service. > + * It writes a greeting and the load options to the console. > */ > > #include > #include > > +/* > + * Entry point of the EFI application. > + * > + * @handle handle of the loaded image > + * @systable system table > + * @return status code > + */ > efi_status_t EFIAPI efi_main(efi_handle_t handle, > struct efi_system_table *systable) > { > struct efi_simple_text_output_protocol *con_out = systable->con_out; > struct efi_boot_services *boottime = systable->boottime; > + struct efi_loaded_image *loaded_image; > + const efi_guid_t loaded_image_guid = LOADED_IMAGE_GUID; > + efi_status_t ret; > > con_out->output_string(con_out, L"Hello, world!\n"); > - boottime->exit(handle, 0, 0, NULL); > > - return EFI_SUCCESS; > + /* Get the loaded image protocol */ > + ret = boottime->handle_protocol(handle, &loaded_image_guid, > + (void **)&loaded_image); > + if (ret != EFI_SUCCESS) { > + con_out->output_string(con_out, > + L"Cannot open loaded image protocol\n"); > + goto out; > + } > + /* Output the load options */ > + con_out->output_string(con_out, L"Load options: "); > + if (loaded_image->load_options_size && loaded_image->load_options) > + con_out->output_string(con_out, > + (u16 *)loaded_image->load_options); > + else > + con_out->output_string(con_out, L""); > + con_out->output_string(con_out, L"\n"); > + > +out: > + boottime->exit(handle, ret, 0, NULL); > + > + /* We should never arrive here */ > + return ret; > } > -- Florian