Hi Heinrich, On Sat, 15 May 2021 at 11:29, Heinrich Schuchardt <xypron.g...@gmx.de> wrote: > > 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(-) >
Reviewed-by: Simon Glass <s...@chromium.org> > 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; > I think you should have a comment about this needing to be first. > + 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 > Regards, Simon