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