Make more macro checks ARMv8-M baseline proof

Richard Earnshaw (lists) Richard.Earnshaw@arm.com
Wed Apr 10 12:38:00 GMT 2019


On 01/04/2019 18:33, Christophe Lyon wrote:
> I forgot that the suitable format in this project is via git
> format-patch, so here is the same patch in that format.
> 
> Christophe
> 
> On Mon, 1 Apr 2019 at 16:42, Christophe Lyon <christophe.lyon@linaro.org> wrote:
>>
>> Hi,
>>
>> After Thomas' patch
>> (https://sourceware.org/ml/newlib/2016/msg00017.html), it seems that
>> some changes committed to libgloss are missing in newlib.
>> I noticed the problem when building a toolchain where GCC is
>> configured --with-cpu=cortex-m{0,23}.
>>
>> This small patch brings the necessary changes from libgloss to newlib.
>> With this, the GCC toolchain build completes.
>>
>> OK?
>>
>> Thanks,
>>
>> Christophe
>>
>> 0001-Make-more-macro-checks-ARMv8-M-baseline-proof.patch
>>
>> From 1ea9c597edbece03bce084afe33b45f1ee9ff67f Mon Sep 17 00:00:00 2001
>> From: Christophe Lyon <christophe.lyon@linaro.org>
>> Date: Mon, 1 Apr 2019 17:30:53 +0000
>> Subject: [PATCH 1/1] Make more macro checks ARMv8-M baseline proof.
>>
>> Commit 69f4c4029183fb26d2fcae00790881620c1978a3 improved most
>> macro checks to be ARMv8-M baseline proof, but missed a few
>> occurrences which otherwise fail to build when using a CPU setting
>> such as cortex-m0 or cortex-m23. This patch brings the same
>> changes as the ones that were committed to libgloss at that time.
>>
>> 	newlib:
>> 	* libc/sys/arm/crt0.S: Use THUMB1_ONLY rather than
>> 	__ARM_ARCH_6M__.
>> 	* libc/sys/arm/trap.S: Use PREFER_THUMB rather than __thumb2__.
>> ---
>>  newlib/libc/sys/arm/crt0.S | 8 ++++----
>>  newlib/libc/sys/arm/trap.S | 3 ++-
>>  2 files changed, 6 insertions(+), 5 deletions(-)
>>
>> diff --git a/newlib/libc/sys/arm/crt0.S b/newlib/libc/sys/arm/crt0.S
>> index 64d4259..8c9f7be 100644
>> --- a/newlib/libc/sys/arm/crt0.S
>> +++ b/newlib/libc/sys/arm/crt0.S
>> @@ -85,7 +85,7 @@
>>  
>>  	/*  Stack limit is at end of data.  */
>>  	/*  Allow slop for stack overflow handling and small frames.  */
>> -#ifdef __ARM_ARCH_6M__
>> +#ifdef THUMB1_ONLY
>>  	ldr	r0, .LC2
>>  	adds	r0, #128
>>  	adds	r0, #128
>> @@ -137,7 +137,7 @@
>>  	beq	.LC27
>>  
>>  	/*  Allow slop for stack overflow handling and small frames.  */
>> -#ifdef __ARM_ARCH_6M__
>> +#ifdef THUMB1_ONLY
>>  	adds	r2, #128
>>  	adds	r2, #128
>>  	mov	sl, r2
>> @@ -164,7 +164,7 @@
>>  #ifdef __thumb2__
>>  	it	eq
>>  #endif	
>> -#ifdef __ARM_ARCH_6M__
>> +#ifdef THUMB1_ONLY
>>  	bne	.LC28
>>  	ldr	r3, .LC0
>>  .LC28:
>> @@ -219,7 +219,7 @@
>>  	   this default 64k is enough for the program being executed.
>>  	   However, it ensures that this simple crt0 world will not
>>  	   immediately cause an overflow event:  */
>> -#ifdef __ARM_ARCH_6M__
>> +#ifdef THUMB1_ONLY
>>  	movs	r2, #64
>>  	lsls	r2, r2, #10
>>  	subs	r2, r3, r2

The above are all OK.

>> diff --git a/newlib/libc/sys/arm/trap.S b/newlib/libc/sys/arm/trap.S
>> index 21b6937..d854b57 100644
>> --- a/newlib/libc/sys/arm/trap.S
>> +++ b/newlib/libc/sys/arm/trap.S
>> @@ -1,5 +1,6 @@
>> +#include "arm.h"
>>          /* Run-time exception support */
>> -#if !defined(__thumb2__)
>> +#ifndef PREFER_THUMB
>>  #include "swi.h"
>>  
>>  /* .text is used instead of .section .text so it works with arm-aout too.  */

I'm not sure I understand this hunk.  PREFER_THUMB is no the same as
__thumb2__, so I think this needs more clarification.  Why would it be
right to omit the contents of this file entirely?  what provides this
API if this doesn't?

I'm not sure I like the PREFER_THUMB macro anyway: preference is not the
same as 'must be' or 'can only be'; so this is all somewhat confusing.



More information about the Newlib mailing list