diff options
author | Simon Glass | 2023-08-21 21:16:50 -0600 |
---|---|---|
committer | Tom Rini | 2023-08-31 13:16:54 -0400 |
commit | 7d2e23394ffbbc1d5b5f2479e0c52db52907cc40 (patch) | |
tree | c4861f03167ecdcf1abd112825ba2e59bb678509 /lib | |
parent | e7f59dea880ea25078273473c575794dac08dca2 (diff) |
initcall: Factor out reloc_off calculation
Move this into a function and do it once, not each time around the loop.
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/initcall.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/lib/initcall.c b/lib/initcall.c index eedb0fbf1d5..89a68b2444f 100644 --- a/lib/initcall.c +++ b/lib/initcall.c @@ -11,6 +11,20 @@ DECLARE_GLOBAL_DATA_PTR; +static ulong calc_reloc_ofs(void) +{ +#ifdef CONFIG_EFI_APP + return (ulong)image_base; +#endif + /* + * Sandbox is relocated by the OS, so symbols always appear at + * the relocated address. + */ + if (IS_ENABLED(CONFIG_SANDBOX) || (gd->flags & GD_FLG_RELOC)) + return gd->reloc_off; + + return 0; +} /* * To enable debugging. add #define DEBUG at the top of the including file. * @@ -18,21 +32,12 @@ DECLARE_GLOBAL_DATA_PTR; */ int initcall_run_list(const init_fnc_t init_sequence[]) { + ulong reloc_ofs = calc_reloc_ofs(); const init_fnc_t *init_fnc_ptr; for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { - unsigned long reloc_ofs = 0; int ret; - /* - * Sandbox is relocated by the OS, so symbols always appear at - * the relocated address. - */ - if (IS_ENABLED(CONFIG_SANDBOX) || (gd->flags & GD_FLG_RELOC)) - reloc_ofs = gd->reloc_off; -#ifdef CONFIG_EFI_APP - reloc_ofs = (unsigned long)image_base; -#endif if (reloc_ofs) debug("initcall: %p (relocated to %p)\n", (char *)*init_fnc_ptr - reloc_ofs, |