diff mbox

[U-Boot] initcall: add explicit hint if initcall was relocated

Message ID 1419719757-6093-1-git-send-email-abrodkin@synopsys.com
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Alexey Brodkin Dec. 27, 2014, 10:35 p.m. UTC
Commit "initcall: Improve debugging support" makes sense and indeed
simplifies process of matching initcalls executed with static
disassembly.

Until you are debugging relocation functionality.

Existign output may make you think that at some point execution somehow
returned back to non-relocated area. And there're many reasons/problems
that may provoke this behavior.

In order to make things clear let's add explicit mention in case initall
was actually relocated like this:
--->---
initcall: 810015f8
Relocation Offset is: 0efcf000
Relocating to 8ffcf000, new gd at 8fdced3c, sp at 8fdced20
initcall: 810015b8
initcall: 8ffd093c
initcall: 8ffd0a14
initcall: 81001940 (relocated to 8ffd0940)
initcall: 81001958 (relocated to 8ffd0958)
--->---

Note "unexpected" jump from 0x8f... area to 0x81... area.
Without explanation this raises many questions: execution jumped in
relocated area right as expected and then for some reason returned back?

But I hope comment in brackets will save some time for those curious
developers who are careful enough to catch "unexpected jump to pre-reloc
area" or those unlucky ones who'll have to deal with relocation
debugging.

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Minkyu Kang <mk7.kang@samsung.com>
---
 lib/initcall.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Simon Glass Dec. 29, 2014, 9:16 p.m. UTC | #1
On 27 December 2014 at 15:35, Alexey Brodkin
<Alexey.Brodkin@synopsys.com> wrote:
>
> Commit "initcall: Improve debugging support" makes sense and indeed
> simplifies process of matching initcalls executed with static
> disassembly.
>
> Until you are debugging relocation functionality.
>
> Existign output may make you think that at some point execution somehow
> returned back to non-relocated area. And there're many reasons/problems
> that may provoke this behavior.
>
> In order to make things clear let's add explicit mention in case initall
> was actually relocated like this:
> --->---
> initcall: 810015f8
> Relocation Offset is: 0efcf000
> Relocating to 8ffcf000, new gd at 8fdced3c, sp at 8fdced20
> initcall: 810015b8
> initcall: 8ffd093c
> initcall: 8ffd0a14
> initcall: 81001940 (relocated to 8ffd0940)
> initcall: 81001958 (relocated to 8ffd0958)
> --->---
>
> Note "unexpected" jump from 0x8f... area to 0x81... area.
> Without explanation this raises many questions: execution jumped in
> relocated area right as expected and then for some reason returned back?
>
> But I hope comment in brackets will save some time for those curious
> developers who are careful enough to catch "unexpected jump to pre-reloc
> area" or those unlucky ones who'll have to deal with relocation
> debugging.
>
> Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Minkyu Kang <mk7.kang@samsung.com>
> ---
>  lib/initcall.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)

Acked-by: Simon Glass <sjg@chromium.org>
Tom Rini Dec. 30, 2014, 2:27 a.m. UTC | #2
On Sun, Dec 28, 2014 at 01:35:57AM +0300, Alexey Brodkin wrote:

> Commit "initcall: Improve debugging support" makes sense and indeed
> simplifies process of matching initcalls executed with static
> disassembly.
> 
> Until you are debugging relocation functionality.
> 
> Existign output may make you think that at some point execution somehow
> returned back to non-relocated area. And there're many reasons/problems
> that may provoke this behavior.
> 
> In order to make things clear let's add explicit mention in case initall
> was actually relocated like this:

Applied to u-boot/master, thanks!
diff mbox

Patch

diff --git a/lib/initcall.c b/lib/initcall.c
index 39f4b3f..7142744 100644
--- a/lib/initcall.c
+++ b/lib/initcall.c
@@ -19,7 +19,11 @@  int initcall_run_list(const init_fnc_t init_sequence[])
 
 		if (gd->flags & GD_FLG_RELOC)
 			reloc_ofs = gd->reloc_off;
-		debug("initcall: %p\n", (char *)*init_fnc_ptr - reloc_ofs);
+		debug("initcall: %p", (char *)*init_fnc_ptr - reloc_ofs);
+		if (gd->flags & GD_FLG_RELOC)
+			debug(" (relocated to %p)\n", (char *)*init_fnc_ptr);
+		else
+			debug("\n");
 		ret = (*init_fnc_ptr)();
 		if (ret) {
 			printf("initcall sequence %p failed at call %p (err=%d)\n",