Re: [PATCH] Semihosting ctr0 typo (adr/ldr)?

Richard Earnshaw via Newlib <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
On 17/02/2021 10:01, Corinna Vinschen wrote:
> On Feb 16 22:56, iNvEr7 via Newlib wrote:
>>
>> ---
>>  libgloss/arm/crt0.S        | 2 +-
>>  newlib/libc/sys/arm/crt0.S | 2 +-
>>  2 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/libgloss/arm/crt0.S b/libgloss/arm/crt0.S
>> index 8490bde2f..b8bbcee18 100644
>> --- a/libgloss/arm/crt0.S
>> +++ b/libgloss/arm/crt0.S
>> @@ -283,7 +283,7 @@
>>  #ifdef ARM_RDI_MONITOR
>>  	/*  Issue Angel SWI to read stack info.  */
>>  	movs	r0, #AngelSWI_Reason_HeapInfo
>> -	adr	r1, .LC0	/*  Point at ptr to 4 words to receive data.  */
>> +	ldr	r1, .LC0	/*  Point at ptr to 4 words to receive data.  */
>>  #ifdef THUMB_VXM
>>  	bkpt	AngelSWI
>>  #elif defined(__thumb2__)
>> diff --git a/newlib/libc/sys/arm/crt0.S b/newlib/libc/sys/arm/crt0.S
>> index 5e677a23c..3c5771229 100644
>> --- a/newlib/libc/sys/arm/crt0.S
>> +++ b/newlib/libc/sys/arm/crt0.S
>> @@ -270,7 +270,7 @@
>>  #ifdef ARM_RDI_MONITOR
>>  	/*  Issue Angel SWI to read stack info.  */
>>  	movs	r0, #AngelSWI_Reason_HeapInfo
>> -	adr	r1, .LC0	/*  Point at ptr to 4 words to receive data.  */
>> +	ldr	r1, .LC0	/*  Point at ptr to 4 words to receive data.  */
>>  #ifdef THUMB_VXM
>>  	bkpt	AngelSWI
>>  #elif defined(__thumb2__)
>> --
>> 2.29.2
> 
> I'm a bit suprised that this problem hasn't been noticed for the
> last 10 years.  I'm not familiar with the ARM stuff at all, so maybe
> somebody from ARM can chime in here?
> 
> 
> Thanks,
> Corinna
> 

No, I don't think that is right, but it took some digging to be sure.

The specification for the HeapInfo syscall is here:

https://developer.arm.com/documentation/100863/0300/Semihosting-operations/SYS-HEAPINFO--0x16-?lang=en

and it says that the parameter is the /address of a pointer/ to the
4-word block.  In other words, it is not the address of the block itself.

It's odd that it is defined this way, but I think the code is doing what
the specification says.  Certainly the comments in the code seem to
reflect this.

R.
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.