Message ID | 20171128020808.27854-1-peng.fan@nxp.com |
---|---|
State | Accepted |
Commit | 082693f4f02ad7a9de192e73feae34e28856b8e3 |
Delegated to: | Tom Rini |
Headers | show |
Series | [U-Boot] arm64 :show_regs: show the address before relocation | expand |
On 27 November 2017 at 19:08, Peng Fan <peng.fan@nxp.com> wrote: > After relocation, when error happends, it is hard to track > ELR and LR with asm file objdumped from elf file. > > So subtract the gd->reloc_off the reflect the compliation address. > > Signed-off-by: Peng Fan <peng.fan@nxp.com> > --- > arch/arm/lib/interrupts_64.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) Reviewed-by: Simon Glass <sjg@chromium.org>
On Tue, Nov 28, 2017 at 10:08:08AM +0800, Peng Fan wrote: > After relocation, when error happends, it is hard to track > ELR and LR with asm file objdumped from elf file. > > So subtract the gd->reloc_off the reflect the compliation address. > > Signed-off-by: Peng Fan <peng.fan@nxp.com> > Reviewed-by: Simon Glass <sjg@chromium.org> Applied to u-boot/master, thanks!
On Tue, Nov 28, 2017 at 10:08:08AM +0800, Peng Fan wrote: > After relocation, when error happends, it is hard to track > ELR and LR with asm file objdumped from elf file. > > So subtract the gd->reloc_off the reflect the compliation address. > > Signed-off-by: Peng Fan <peng.fan@nxp.com> > --- > arch/arm/lib/interrupts_64.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/lib/interrupts_64.c b/arch/arm/lib/interrupts_64.c > index 7c9cfce69f..cbcfeec2b0 100644 > --- a/arch/arm/lib/interrupts_64.c > +++ b/arch/arm/lib/interrupts_64.c > @@ -9,6 +9,7 @@ > #include <linux/compiler.h> > #include <efi_loader.h> > > +DECLARE_GLOBAL_DATA_PTR; > > int interrupt_init(void) > { > @@ -29,8 +30,13 @@ void show_regs(struct pt_regs *regs) > { > int i; > > - printf("ELR: %lx\n", regs->elr); > - printf("LR: %lx\n", regs->regs[30]); > + if (gd->flags & GD_FLG_RELOC) { > + printf("ELR: %lx\n", regs->elr - gd->reloc_off); > + printf("LR: %lx\n", regs->regs[30] - gd->reloc_off); > + } else { > + printf("ELR: %lx\n", regs->elr); > + printf("LR: %lx\n", regs->regs[30]); > + } > for (i = 0; i < 29; i += 2) > printf("x%-2d: %016lx x%-2d: %016lx\n", > i, regs->regs[i], i+1, regs->regs[i+1]); Hi, It is useful to show the relocated address, the kind of local mods I too have had for a while. But here you dropped the hw register values altogether, instead of displaying both, which I guess I am not the only one to not be happy about. Regards, Karl
Hi, On 22 January 2018 at 12:01, Karl Beldan <karl.beldan@gmail.com> wrote: > > On Tue, Nov 28, 2017 at 10:08:08AM +0800, Peng Fan wrote: > > After relocation, when error happends, it is hard to track > > ELR and LR with asm file objdumped from elf file. > > > > So subtract the gd->reloc_off the reflect the compliation address. > > > > Signed-off-by: Peng Fan <peng.fan@nxp.com> > > --- > > arch/arm/lib/interrupts_64.c | 10 ++++++++-- > > 1 file changed, 8 insertions(+), 2 deletions(-) > > > > diff --git a/arch/arm/lib/interrupts_64.c b/arch/arm/lib/interrupts_64.c > > index 7c9cfce69f..cbcfeec2b0 100644 > > --- a/arch/arm/lib/interrupts_64.c > > +++ b/arch/arm/lib/interrupts_64.c > > @@ -9,6 +9,7 @@ > > #include <linux/compiler.h> > > #include <efi_loader.h> > > > > +DECLARE_GLOBAL_DATA_PTR; > > > > int interrupt_init(void) > > { > > @@ -29,8 +30,13 @@ void show_regs(struct pt_regs *regs) > > { > > int i; > > > > - printf("ELR: %lx\n", regs->elr); > > - printf("LR: %lx\n", regs->regs[30]); > > + if (gd->flags & GD_FLG_RELOC) { > > + printf("ELR: %lx\n", regs->elr - gd->reloc_off); > > + printf("LR: %lx\n", regs->regs[30] - gd->reloc_off); > > + } else { > > + printf("ELR: %lx\n", regs->elr); > > + printf("LR: %lx\n", regs->regs[30]); > > + } > > for (i = 0; i < 29; i += 2) > > printf("x%-2d: %016lx x%-2d: %016lx\n", > > i, regs->regs[i], i+1, regs->regs[i+1]); > > Hi, > > It is useful to show the relocated address, the kind of local mods I too > have had for a while. > But here you dropped the hw register values altogether, instead of > displaying both, which I guess I am not the only one to not be happy > about. Yes I agree that we should have both. Do you think you could do a patch? Regards, Simon
On Sun, Feb 4, 2018 at 1:39 PM, Simon Glass <sjg@chromium.org> wrote: > Hi, > > On 22 January 2018 at 12:01, Karl Beldan <karl.beldan@gmail.com> wrote: >> >> On Tue, Nov 28, 2017 at 10:08:08AM +0800, Peng Fan wrote: >> > After relocation, when error happends, it is hard to track >> > ELR and LR with asm file objdumped from elf file. >> > >> > So subtract the gd->reloc_off the reflect the compliation address. >> > >> > Signed-off-by: Peng Fan <peng.fan@nxp.com> >> > --- >> > arch/arm/lib/interrupts_64.c | 10 ++++++++-- >> > 1 file changed, 8 insertions(+), 2 deletions(-) >> > >> > diff --git a/arch/arm/lib/interrupts_64.c b/arch/arm/lib/interrupts_64.c >> > index 7c9cfce69f..cbcfeec2b0 100644 >> > --- a/arch/arm/lib/interrupts_64.c >> > +++ b/arch/arm/lib/interrupts_64.c >> > @@ -9,6 +9,7 @@ >> > #include <linux/compiler.h> >> > #include <efi_loader.h> >> > >> > +DECLARE_GLOBAL_DATA_PTR; >> > >> > int interrupt_init(void) >> > { >> > @@ -29,8 +30,13 @@ void show_regs(struct pt_regs *regs) >> > { >> > int i; >> > >> > - printf("ELR: %lx\n", regs->elr); >> > - printf("LR: %lx\n", regs->regs[30]); >> > + if (gd->flags & GD_FLG_RELOC) { >> > + printf("ELR: %lx\n", regs->elr - gd->reloc_off); >> > + printf("LR: %lx\n", regs->regs[30] - gd->reloc_off); >> > + } else { >> > + printf("ELR: %lx\n", regs->elr); >> > + printf("LR: %lx\n", regs->regs[30]); >> > + } >> > for (i = 0; i < 29; i += 2) >> > printf("x%-2d: %016lx x%-2d: %016lx\n", >> > i, regs->regs[i], i+1, regs->regs[i+1]); >> >> Hi, >> >> It is useful to show the relocated address, the kind of local mods I too >> have had for a while. >> But here you dropped the hw register values altogether, instead of >> displaying both, which I guess I am not the only one to not be happy >> about. > > Yes I agree that we should have both. Do you think you could do a patch? > Hi, Peng did reply with a patch[1], I was bugged by the formatting but no follow-up ensued, so unclear whether it felt annoying on anybody's side. Anyways sure, if the thread stalls for a few more days, I'll make sure to send a patch. [1] https://marc.info/?l=u-boot&m=151674072412633&w=2 Regards, Karl
On Tue, Feb 06, 2018 at 12:40:39AM +0000, Karl Beldan wrote: > On Sun, Feb 4, 2018 at 1:39 PM, Simon Glass <sjg@chromium.org> wrote: > > Hi, > > > > On 22 January 2018 at 12:01, Karl Beldan <karl.beldan@gmail.com> wrote: > >> > >> On Tue, Nov 28, 2017 at 10:08:08AM +0800, Peng Fan wrote: > >> > After relocation, when error happends, it is hard to track > >> > ELR and LR with asm file objdumped from elf file. > >> > > >> > So subtract the gd->reloc_off the reflect the compliation address. > >> > > >> > Signed-off-by: Peng Fan <peng.fan@nxp.com> > >> > --- > >> > arch/arm/lib/interrupts_64.c | 10 ++++++++-- > >> > 1 file changed, 8 insertions(+), 2 deletions(-) > >> > > >> > diff --git a/arch/arm/lib/interrupts_64.c b/arch/arm/lib/interrupts_64.c > >> > index 7c9cfce69f..cbcfeec2b0 100644 > >> > --- a/arch/arm/lib/interrupts_64.c > >> > +++ b/arch/arm/lib/interrupts_64.c > >> > @@ -9,6 +9,7 @@ > >> > #include <linux/compiler.h> > >> > #include <efi_loader.h> > >> > > >> > +DECLARE_GLOBAL_DATA_PTR; > >> > > >> > int interrupt_init(void) > >> > { > >> > @@ -29,8 +30,13 @@ void show_regs(struct pt_regs *regs) > >> > { > >> > int i; > >> > > >> > - printf("ELR: %lx\n", regs->elr); > >> > - printf("LR: %lx\n", regs->regs[30]); > >> > + if (gd->flags & GD_FLG_RELOC) { > >> > + printf("ELR: %lx\n", regs->elr - gd->reloc_off); > >> > + printf("LR: %lx\n", regs->regs[30] - gd->reloc_off); > >> > + } else { > >> > + printf("ELR: %lx\n", regs->elr); > >> > + printf("LR: %lx\n", regs->regs[30]); > >> > + } > >> > for (i = 0; i < 29; i += 2) > >> > printf("x%-2d: %016lx x%-2d: %016lx\n", > >> > i, regs->regs[i], i+1, regs->regs[i+1]); > >> > >> Hi, > >> > >> It is useful to show the relocated address, the kind of local mods I too > >> have had for a while. > >> But here you dropped the hw register values altogether, instead of > >> displaying both, which I guess I am not the only one to not be happy > >> about. > > > > Yes I agree that we should have both. Do you think you could do a patch? > > Hi, > > Peng did reply with a patch[1], I was bugged by the formatting but no > follow-up ensued, so unclear whether it felt annoying on anybody's side. > Anyways sure, if the thread stalls for a few more days, I'll make sure > to send a patch. > > [1] https://marc.info/?l=u-boot&m=151674072412633&w=2 For the record, I took your objects as "Changes still Requested" to the patch and I think/hope in patchwork I marked it as such.
diff --git a/arch/arm/lib/interrupts_64.c b/arch/arm/lib/interrupts_64.c index 7c9cfce69f..cbcfeec2b0 100644 --- a/arch/arm/lib/interrupts_64.c +++ b/arch/arm/lib/interrupts_64.c @@ -9,6 +9,7 @@ #include <linux/compiler.h> #include <efi_loader.h> +DECLARE_GLOBAL_DATA_PTR; int interrupt_init(void) { @@ -29,8 +30,13 @@ void show_regs(struct pt_regs *regs) { int i; - printf("ELR: %lx\n", regs->elr); - printf("LR: %lx\n", regs->regs[30]); + if (gd->flags & GD_FLG_RELOC) { + printf("ELR: %lx\n", regs->elr - gd->reloc_off); + printf("LR: %lx\n", regs->regs[30] - gd->reloc_off); + } else { + printf("ELR: %lx\n", regs->elr); + printf("LR: %lx\n", regs->regs[30]); + } for (i = 0; i < 29; i += 2) printf("x%-2d: %016lx x%-2d: %016lx\n", i, regs->regs[i], i+1, regs->regs[i+1]);
After relocation, when error happends, it is hard to track ELR and LR with asm file objdumped from elf file. So subtract the gd->reloc_off the reflect the compliation address. Signed-off-by: Peng Fan <peng.fan@nxp.com> --- arch/arm/lib/interrupts_64.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)