On Thu, 10 Jun 2021 at 11:26, Alex Bennée <alex.ben...@linaro.org> wrote: > > The previous numbers were a guess at best. While we could extract the > information from a loaded ELF file via -kernel we could still get > tripped up by self decompressing or relocating code. Besides sane > library code like newlib will fall back to known symbols to determine > of the location of the heap. We can still report the limits though as > we are reasonably confident that busting out of RAM would be a bad > thing for either stack or heap. > > Signed-off-by: Alex Bennée <alex.ben...@linaro.org> > Tested-by: Andrew Strauss <astraus...@gmail.com> > Reviewed-by: Andrew Strauss <astraus...@gmail.com> > Message-Id: <20210601090715.22330-1-alex.ben...@linaro.org> > > --- > v2 > - report some known information (limits) > - reword the commit message > --- > semihosting/arm-compat-semi.c | 12 ++++++++---- > 1 file changed, 8 insertions(+), 4 deletions(-) > > diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c > index 1c29146dcf..8873486e8c 100644 > --- a/semihosting/arm-compat-semi.c > +++ b/semihosting/arm-compat-semi.c > @@ -1202,10 +1202,14 @@ target_ulong do_common_semihosting(CPUState *cs) > retvals[3] = 0; /* Stack limit. */ > #else > limit = current_machine->ram_size; > - /* TODO: Make this use the limit of the loaded application. */ > - retvals[0] = rambase + limit / 2; > - retvals[1] = rambase + limit; > - retvals[2] = rambase + limit; /* Stack base */ > + /* > + * Reporting 0 indicates we couldn't calculate the real > + * values which should force most software to fall back to > + * using information it has. > + */ > + retvals[0] = 0; /* Heap Base */ > + retvals[1] = rambase + limit; /* Heap Limit */ > + retvals[2] = 0; /* Stack base */ > retvals[3] = rambase; /* Stack limit. */
The spec: https://github.com/ARM-software/abi-aa/blob/main/semihosting/semihosting.rst#sys-heapinfo-0x16 doesn't document that 'return 0 for "I don't know"' is valid, so if we're going to do it we ought to at least note that we're deviating from the spec here. -- PMM