diff options
author | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2021-05-15 19:29:13 +0200 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2021-06-05 07:35:47 -0600 |
commit | 205b9f510035b835d48bae07ce8b968c3d6d75af (patch) | |
tree | e351f123d3f9f276cda963f51e921601ee14a482 /arch/sandbox | |
parent | 0e35b937b9c46f313a38aa7d4aba88be76d8abf7 (diff) | |
download | u-boot-205b9f510035b835d48bae07ce8b968c3d6d75af.tar.gz |
sandbox: correct determination of the text base
os_find_text_base() assumes that first line of /proc/self/maps holds
information about the text. Hence we must call the function before calling
os_malloc() which calls mmap(0x10000000,).
Failure to do so has led to incorrect values for pc_reloc when an
exception was reported
=> exception undefined
Illegal instruction
pc = 0x5628d82e9d3c, pc_reloc = 0x5628c82e9d3c
as well as incorrect output of the bdinfo command
=> bdinfo
relocaddr = 0x0000000007858000
reloc off = 0x0000000010000000
Fixes: b308d9fd18fa ("sandbox: Avoid using malloc() for system state")
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'arch/sandbox')
-rw-r--r-- | arch/sandbox/cpu/start.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c index 63ca514ebd..6bb94473f1 100644 --- a/arch/sandbox/cpu/start.c +++ b/arch/sandbox/cpu/start.c @@ -436,10 +436,13 @@ void sandbox_reset(void) int main(int argc, char *argv[]) { struct sandbox_state *state; + void * text_base; gd_t data; int size; int ret; + text_base = os_find_text_base(); + /* * Copy argv[] so that we can pass the arguments in the original * sequence when resetting the sandbox. @@ -452,7 +455,7 @@ int main(int argc, char *argv[]) memset(&data, '\0', sizeof(data)); gd = &data; - gd->arch.text_base = os_find_text_base(); + gd->arch.text_base = text_base; ret = state_init(); if (ret) |