This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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' <nickc@redhat.com>; Claudio Scordino
> > <claudio@evidence.eu.com>; newlib@sourceware.org
> > Subject: RE: Bare-metal: how to specify the heap size in the linker
> script
> >
> > Hi Claudio,
> >
> > > -----Original Message-----
> > > From: newlib-owner@sourceware.org <newlib-owner@sourceware.org>
> > On
> > > Behalf Of Nick Clifton
> > > Sent: Wednesday, August 8, 2018 11:58
> > > To: Claudio Scordino <claudio@evidence.eu.com>;
> > newlib@sourceware.org
> > > 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]