[Newlib][libgloss]ARM - semihosting use of __end__symbol in crt0.S

Senthil Kumar Selvaraj senthilkumar.selvaraj@microchip.com
Thu Jul 6 04:42:00 GMT 2017


Dave Nadler writes:

> Thanks Tamar - but, what is the heap base address _used_ for in semihosting?
>
IIRC, the sbrk system call implementation in libnosys uses it, not sure
about rdimon.

Regards
Senthil

> The heap storage is allocated starting during early start-up;
> so hopefully it is not trying to use this memory...
>
> Thanks!
> Best Regards, Dave
>
> On 7/5/2017 11:16 AM, Tamar Christina wrote:
>> Hi Dave,
>>
>> The use of __end__ relates to the semihosting call SYS_HEAPINFO.
>> Likely the link originally pointed tohttp://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471f/Bacbefaa.html.
>>
>> Basically at the startup r0 will contain the given 4 byte structure, where the first entry is the heap_base.
>> If this is 0 it means the system was unable to calculate it.
>> __end__ is then used as a fall back for this.
>> The reason __end__ is used instead of __bss_end___ has to do with the alignment requirements.
>>
>> The same question was asked on the bug-fix patch that introduced it:
>> http://newlib.sourceware.narkive.com/bcyUamAh/rfa-libgloss-arm-handle-zero-heap-base-from-semihosting
>>
>> I am not completely certain, but this seems to indicate that not all of semihosting is supported on systems with multiple stacks.
>>
>> Cheers,
>> Tamar
>> ________________________________________
>> From: Dave Nadler<drn@nadler.com>
>> Sent: Wednesday, July 5, 2017 2:32:18 PM
>> To: Tamar Christina;newlib@sourceware.org
>> Cc: nd
>> Subject: [Newlib][libgloss]ARM - semihosting use of __end__symbol in crt0.S
>>
>> Hi Tamar - Perhaps as you are working on ARM crt0 and semihosting, you
>> can help
>> with a question regarding crt0's use of the symbol __end__ for semihosting.
>> I read the code but I'm not expert at ARM assembly and do not understand
>> what __end__ is being used for, and the comments do not explain the
>> intent/purpose...
>>
>> I am concerned that there is an assumption within semihosting about
>> available memory or memory boundaries that may be incorrect in systems where
>> heap and stack are not contiguous, for example embedded systems with multiple
>> stacks.
>>
>> I asked the question on stack exchange but (surprise) didn't get any
>> useful response:
>> https://stackoverflow.com/questions/44853442/meaning-of-gnu-symbol-end-especially-arm-embedded
>>
>> Thanks in advance for any clarification,
>> Best Regards, Dave



More information about the Newlib mailing list