mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-27 15:10:26 +09:00
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: b308d9fd18
("sandbox: Avoid using malloc() for system state")
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
0e35b937b9
commit
205b9f5100
@ -436,10 +436,13 @@ void sandbox_reset(void)
|
|||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
struct sandbox_state *state;
|
struct sandbox_state *state;
|
||||||
|
void * text_base;
|
||||||
gd_t data;
|
gd_t data;
|
||||||
int size;
|
int size;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
text_base = os_find_text_base();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy argv[] so that we can pass the arguments in the original
|
* Copy argv[] so that we can pass the arguments in the original
|
||||||
* sequence when resetting the sandbox.
|
* sequence when resetting the sandbox.
|
||||||
@ -452,7 +455,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
memset(&data, '\0', sizeof(data));
|
memset(&data, '\0', sizeof(data));
|
||||||
gd = &data;
|
gd = &data;
|
||||||
gd->arch.text_base = os_find_text_base();
|
gd->arch.text_base = text_base;
|
||||||
|
|
||||||
ret = state_init();
|
ret = state_init();
|
||||||
if (ret)
|
if (ret)
|
||||||
|
Loading…
Reference in New Issue
Block a user