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.g...@gmx.de> --- This patch must be applied after [PATCH 1/1] sandbox: ensure that state->ram_buf is in low memory --- arch/sandbox/cpu/start.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c index 1388dba895..4000bcc4f1 100644 --- a/arch/sandbox/cpu/start.c +++ b/arch/sandbox/cpu/start.c @@ -435,10 +435,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(); + /* * This must be the first invocation of os_malloc() to have * state->ram_buf in the low 4 GiB. @@ -459,7 +462,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; state = state_get_current(); if (os_parse_args(state, argc, argv)) -- 2.30.2