Re: Bare-metal: how to specify the heap size in the linker script

Claudio Scordino <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <CAGWmfYoJaGSSaxe3_uiE_4tBU=uDS7phZR4n0yw936aqksd7Mg@mail.gmail.com>
Hi all,

thank you very much. A few comments inline.



> > -----Original Message-----
> > From: Tamar Christina
> > Sent: Wednesday, August 8, 2018 12:09
> > To: 'Nick Clifton' <[email protected]>; Claudio Scordino
> > <[email protected]>; [email protected]
> > Subject: RE: Bare-metal: how to specify the heap size in the linker
> script
> >
> > Hi Claudio,
> >
> > > -----Original Message-----
> > > From: [email protected] <[email protected]>
> > On
> > > Behalf Of Nick Clifton
> > > Sent: Wednesday, August 8, 2018 11:58
> > > To: Claudio Scordino <[email protected]>;
> > [email protected]
> > > Subject: Re: Bare-metal: how to specify the heap size in the linker
> > > script
> > >
> > > Hi Claudio,
> > >
> > > > However, this way there is no way of checking if the heap has
> > > > reached the
> > > maximum value (after which we get stack corruption).
> > >
> > > It sounds like you need to check the current heap top against the
> > > current stack pointer.  Take a look in
> > > newlib/libgloss/aarch64/syscalls.c
> > > at the implementation of the _sbrk() system call.  This uses a magic
> > > asm("sp") statement to get hold of the stack pointer...
> >
> > You didn't say if you're using semihosting or not
> >
> > If you're using semihosting you can specify the limits in the
> SYS_HEAPINFO
> > return values
> > https://developer.arm.com/docs/100863/latest/semihosting-
> > operations/sys_heapinfo-0x16
> >
> > if you're not, then what Nick suggests is the way to go in your _sbrk
> > implementation.
>

We are porting an RTOS (ERIKA Enterprise) on a bare-metal ARM core using
the Jailhouse hypervisor, and we'd like to link some C++ code using STL
stuff.
So, I'd say that we are NOT in the semihosting scenario.

From the link provided by Nick (thanks!) it seems that when using dynamic
allocation (e.g. malloc/new) newlib always checks if the heap is going to
overwrite the current stack.
However, it may happen that the stack then grows further and overwrites the
heap. Did I understood correctly ?

If so, in the linker script we have to reserve enough room for hosting the
maximum value that the sum (stack+heap) can assume, because there is no way
for imposing strong partitioning between these two areas.

Many thanks and best regards,

                    Claudio
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.