initcall: Improve debugging support

Add the ability to display the code offset of an initcall even after it
is relocated. This makes it much easier to relate initcalls back to the
U-Boot System.map file.

Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
This commit is contained in:
Simon Glass 2014-05-20 06:01:43 -06:00 committed by Minkyu Kang
parent a9cf6da925
commit 2f43f85460
2 changed files with 13 additions and 6 deletions

View File

@ -6,4 +6,4 @@
typedef int (*init_fnc_t)(void); typedef int (*init_fnc_t)(void);
int initcall_run_list(init_fnc_t init_sequence[]); int initcall_run_list(const init_fnc_t init_sequence[]);

View File

@ -7,15 +7,22 @@
#include <common.h> #include <common.h>
#include <initcall.h> #include <initcall.h>
int initcall_run_list(init_fnc_t init_sequence[]) DECLARE_GLOBAL_DATA_PTR;
int initcall_run_list(const init_fnc_t init_sequence[])
{ {
init_fnc_t *init_fnc_ptr; const init_fnc_t *init_fnc_ptr;
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
debug("initcall: %p\n", *init_fnc_ptr); unsigned long reloc_ofs = 0;
if (gd->flags & GD_FLG_RELOC)
reloc_ofs = gd->reloc_off;
debug("initcall: %p\n", (char *)*init_fnc_ptr - reloc_ofs);
if ((*init_fnc_ptr)()) { if ((*init_fnc_ptr)()) {
debug("initcall sequence %p failed at call %p\n", printf("initcall sequence %p failed at call %p\n",
init_sequence, *init_fnc_ptr); init_sequence,
(char *)*init_fnc_ptr - reloc_ofs);
return -1; return -1;
} }
} }