On 29.03.18 23:54, Heinrich Schuchardt wrote:
> Introduce functions to print information about loaded images.
> 
> If we want to analyze an exception in an EFI image we need the offset
> between the PC and the start of the loaded image.
> 
> With efi_print_image_info() we can print the necessary information for a
> single image, e.g.
> 
> UEFI image
> start 0x7fdb4000, size 0xa7b60
> pc offset 0x72ca
> /\snp.efi
> 
> efi_print_image_infos() provides output for all loaded images.

This is the only function we're actually calling. That means if you have
3 images loaded, things become quite unpleasant to read, with each image
spanning over 4 lines.

Can you please condense the image information down to a single line?
Something like this:

UEFI image "foo.efi" [0x70db4000:0x70e5b000]
UEFI image "snp.efi" [0x7fdb4000:0x7fe5bb60] pc=0x72ca
UEFI image "bar.efi" [0x7cdb4000:0x7ce50000]


Alex

> 
> Signed-off-by: Heinrich Schuchardt <xypron.g...@gmx.de>
> ---
>  include/efi_loader.h              |  4 ++++
>  lib/efi_loader/efi_image_loader.c | 45 
> +++++++++++++++++++++++++++++++++++++++
>  2 files changed, 49 insertions(+)
> 
> diff --git a/include/efi_loader.h b/include/efi_loader.h
> index 07730c3f39..5ed6ff04d8 100644
> --- a/include/efi_loader.h
> +++ b/include/efi_loader.h
> @@ -284,6 +284,10 @@ efi_status_t efi_setup_loaded_image(
>                       struct efi_device_path *file_path);
>  efi_status_t efi_load_image_from_path(struct efi_device_path *file_path,
>                                     void **buffer);
> +/* Print information about a loaded image */
> +efi_status_t efi_print_image_info(struct efi_loaded_image *image, void *pc);
> +/* Print information about all loaded images */
> +void efi_print_image_infos(void *pc);
>  
>  #ifdef CONFIG_EFI_LOADER_BOUNCE_BUFFER
>  extern void *efi_bounce_buffer;
> diff --git a/lib/efi_loader/efi_image_loader.c 
> b/lib/efi_loader/efi_image_loader.c
> index cac64ba9fe..9750da551a 100644
> --- a/lib/efi_loader/efi_image_loader.c
> +++ b/lib/efi_loader/efi_image_loader.c
> @@ -22,6 +22,51 @@ const efi_guid_t efi_simple_file_system_protocol_guid =
>               EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID;
>  const efi_guid_t efi_file_info_guid = EFI_FILE_INFO_GUID;
>  
> +/*
> + * Print information about a loaded image.
> + *
> + * If the program counter is located within the image the offset to the base
> + * address is shown.
> + *
> + * @image:   loaded image
> + * @pc:              program counter (use NULL to suppress offset output)
> + * @return:  status code
> + */
> +efi_status_t efi_print_image_info(struct efi_loaded_image *image, void *pc)
> +{
> +     if (!image)
> +             return EFI_INVALID_PARAMETER;
> +     printf("UEFI image\nstart 0x%p, size 0x%llx\n",
> +            image->image_base, image->image_size);
> +     if (pc && pc >= image->image_base &&
> +         pc < image->image_base + image->image_size)
> +             printf("pc offset 0x%zx\n", pc - image->image_base);
> +     if (image->file_path)
> +             printf("%pD\n", image->file_path);
> +     return EFI_SUCCESS;
> +}
> +
> +/*
> + * Print information about all loaded images.
> + *
> + * @pc:              program counter (use NULL to suppress offset output)
> + */
> +void efi_print_image_infos(void *pc)
> +{
> +     struct efi_object *efiobj;
> +     struct efi_handler *handler;
> +
> +     list_for_each_entry(efiobj, &efi_obj_list, link) {
> +             list_for_each_entry(handler, &efiobj->protocols, link) {
> +                     if (!guidcmp(handler->guid, &efi_guid_loaded_image)) {
> +                             printf("\n");
> +                             efi_print_image_info(
> +                                     handler->protocol_interface, pc);
> +                     }
> +             }
> +     }
> +}
> +
>  static efi_status_t efi_loader_relocate(const IMAGE_BASE_RELOCATION *rel,
>                       unsigned long rel_size, void *efi_reloc)
>  {
> 
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to