public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: AKASHI Takahiro <takahiro.akashi@linaro.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/1] arm: print information about loaded UEFI images
Date: Thu, 11 Apr 2019 14:07:32 +0900	[thread overview]
Message-ID: <20190411050731.GB7158@linaro.org> (raw)
In-Reply-To: <6815f44b-e9dd-bafc-3542-098c3dbda8e2@gmx.de>

On Tue, Apr 09, 2019 at 06:02:05AM +0200, Heinrich Schuchardt wrote:
> On 4/9/19 3:31 AM, AKASHI Takahiro wrote:
> > On Thu, Apr 04, 2019 at 10:23:47PM +0200, Heinrich Schuchardt wrote:
> >> If an exception occurs in a UEFI loaded image we need the start address of
> >> the image to determine the relocation offset.
> >>
> >> This patch adds the necessary lines after the registers in the crash dump
> >> for armv8. A possible output would be:
> >>
> >> UEFI image [0x00000000bffe6000:0x00000000bffe631f] pc=0x138 '/\snp.efi'
> >>
> >> With the offset 0x138 we can now find the relevant instruction in the
> >
> > 'pc' is misleading, it is just an offset from the start address of
> > loaded image (reloc_base, in this case, 0xbffe6000). Why do we need this
> > field?
> 
> Yes, this is the position of the program counter (pc) where the failure
> occurred relative to the start of the image. As described above you need
> this offset to find the violating code in the objdump output of your EFI
> image.
> 
> You could of cause calculate the offset by hand from the other available
> information. As we already show addresses relative to gc->reloc_off it
> seems to be consistent to show the program counter relative to the
> loaded image address here.
> 
> If you have a better idea for a label than "pc" I am open to your
> suggestion but this would be a patch for efi_print_image_infos() and
> does not directly relate to the current patch.


crash at 0x138 in [0x00000000bffe6000:0x00000000bffe631f] '/\snp.efi'

or

crash at 0x00000000bffe6000+0x138 in '/\snp.efi'

Adding function name would be better, back trace of stack would be much better.

I know no way.

-Takahiro Akashi

> Best regards
> 
> Heinrich
> 
> >
> > -Takahiro Akashi
> >
> >> disassembled 'snp.efi' binary.
> >>
> >> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> >> ---
> >>  arch/arm/lib/interrupts_64.c | 13 +++++++++++++
> >>  1 file changed, 13 insertions(+)
> >>
> >> diff --git a/arch/arm/lib/interrupts_64.c b/arch/arm/lib/interrupts_64.c
> >> index 458319ab48..0bfdb8d93d 100644
> >> --- a/arch/arm/lib/interrupts_64.c
> >> +++ b/arch/arm/lib/interrupts_64.c
> >> @@ -25,6 +25,11 @@ int disable_interrupts(void)
> >>  	return 0;
> >>  }
> >>
> >> +static void show_efi_loaded_images(struct pt_regs *regs)
> >> +{
> >> +	efi_print_image_infos((void *)regs->elr);
> >> +}
> >> +
> >>  void show_regs(struct pt_regs *regs)
> >>  {
> >>  	int i;
> >> @@ -49,6 +54,7 @@ void do_bad_sync(struct pt_regs *pt_regs, unsigned int esr)
> >>  	efi_restore_gd();
> >>  	printf("Bad mode in \"Synchronous Abort\" handler, esr 0x%08x\n", esr);
> >>  	show_regs(pt_regs);
> >> +	show_efi_loaded_images(pt_regs);
> >>  	panic("Resetting CPU ...\n");
> >>  }
> >>
> >> @@ -60,6 +66,7 @@ void do_bad_irq(struct pt_regs *pt_regs, unsigned int esr)
> >>  	efi_restore_gd();
> >>  	printf("Bad mode in \"Irq\" handler, esr 0x%08x\n", esr);
> >>  	show_regs(pt_regs);
> >> +	show_efi_loaded_images(pt_regs);
> >>  	panic("Resetting CPU ...\n");
> >>  }
> >>
> >> @@ -71,6 +78,7 @@ void do_bad_fiq(struct pt_regs *pt_regs, unsigned int esr)
> >>  	efi_restore_gd();
> >>  	printf("Bad mode in \"Fiq\" handler, esr 0x%08x\n", esr);
> >>  	show_regs(pt_regs);
> >> +	show_efi_loaded_images(pt_regs);
> >>  	panic("Resetting CPU ...\n");
> >>  }
> >>
> >> @@ -82,6 +90,7 @@ void do_bad_error(struct pt_regs *pt_regs, unsigned int esr)
> >>  	efi_restore_gd();
> >>  	printf("Bad mode in \"Error\" handler, esr 0x%08x\n", esr);
> >>  	show_regs(pt_regs);
> >> +	show_efi_loaded_images(pt_regs);
> >>  	panic("Resetting CPU ...\n");
> >>  }
> >>
> >> @@ -93,6 +102,7 @@ void do_sync(struct pt_regs *pt_regs, unsigned int esr)
> >>  	efi_restore_gd();
> >>  	printf("\"Synchronous Abort\" handler, esr 0x%08x\n", esr);
> >>  	show_regs(pt_regs);
> >> +	show_efi_loaded_images(pt_regs);
> >>  	panic("Resetting CPU ...\n");
> >>  }
> >>
> >> @@ -104,6 +114,7 @@ void do_irq(struct pt_regs *pt_regs, unsigned int esr)
> >>  	efi_restore_gd();
> >>  	printf("\"Irq\" handler, esr 0x%08x\n", esr);
> >>  	show_regs(pt_regs);
> >> +	show_efi_loaded_images(pt_regs);
> >>  	panic("Resetting CPU ...\n");
> >>  }
> >>
> >> @@ -115,6 +126,7 @@ void do_fiq(struct pt_regs *pt_regs, unsigned int esr)
> >>  	efi_restore_gd();
> >>  	printf("\"Fiq\" handler, esr 0x%08x\n", esr);
> >>  	show_regs(pt_regs);
> >> +	show_efi_loaded_images(pt_regs);
> >>  	panic("Resetting CPU ...\n");
> >>  }
> >>
> >> @@ -129,5 +141,6 @@ void __weak do_error(struct pt_regs *pt_regs, unsigned int esr)
> >>  	efi_restore_gd();
> >>  	printf("\"Error\" handler, esr 0x%08x\n", esr);
> >>  	show_regs(pt_regs);
> >> +	show_efi_loaded_images(pt_regs);
> >>  	panic("Resetting CPU ...\n");
> >>  }
> >> --
> >> 2.20.1
> >>
> >
> 

      reply	other threads:[~2019-04-11  5:07 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-04 20:23 [U-Boot] [PATCH 1/1] arm: print information about loaded UEFI images Heinrich Schuchardt
2019-04-09  1:31 ` AKASHI Takahiro
2019-04-09  4:02   ` Heinrich Schuchardt
2019-04-11  5:07     ` AKASHI Takahiro [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190411050731.GB7158@linaro.org \
    --to=takahiro.akashi@linaro.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox