Re: Make more macro checks ARMv8-M baseline proof
Christophe Lyon <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <CAKdteOYBhbr1YXdTiKo1zMKT1ELSZ0CvsMN786x1v7EshRb52A@mail.gmail.com> |
On Thu, 11 Apr 2019 at 15:35, Richard Earnshaw (lists) <[email protected]> wrote: > > On 10/04/2019 16:12, Christophe Lyon wrote: > > On Wed, 10 Apr 2019 at 15:22, Richard Earnshaw (lists) > > <[email protected]> wrote: > >> > >> On 10/04/2019 13:52, Christophe Lyon wrote: > >>> On Wed, 10 Apr 2019 at 14:38, Richard Earnshaw (lists) > >>> <[email protected]> wrote: > >>>> > >>>> 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 <[email protected]> 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 <[email protected]> > >>>>>> 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. > >>> > >>> Well, this is exactly the same change as the one applied by commit > >>> 69f4c4029183fb26d2fcae00790881620c1978a3 to libgloss/arm/trap.S. > >>> > >>> Do you mean both trap.S could/should be different, or that commit > >>> 69f4c4029183fb26d2fcae00790881620c1978a3 is wrong? > >>> > >>> Christophe > >>> > >> > >> I didn't review that patch :-( > >> > >> The effect of Thomas' patch was to remove this API on systems that built > >> newlib in Thumb1 mode for use on Armv4t through Armv6 (ie on systems > >> with both Thumb1 and ARM ISAs); that was probably unintentional. > >> > >> But in fact, I think even the original patch from Paul Brook was > >> probably not correct as the effect was to remove this API on A-profile > >> targets based solely on which ISA was selected for building the library. > >> > >> Does this all matter in reality? Probably not. Looking in more detail > >> I see the code in this function is to support the old APCS chunked stack > >> variant, which dates back to the Acorn days; GCC hasn't really supported > >> that since forever, and it certainly won't work in EABI environments. > >> > >> So a better patch would be to change this to > >> > >> #ifndef __ARM_EABI__ > >> > >> and to make the same change in libgloss. > >> > > > > Thanks for the clarification, I wouldn't have inferred the APCS part myself. > > > > Here are two patches: the 1st one contains the part you already approved, > > the 2nd one contains the __ARM_EABI__ change for both newlib and libgloss. > > > > (I split the change into two parts because now they are not strictly related) > > > > OK? > > > > Yes, both changes are fine. > > R. Thanks, pushed. > > > Thanks, > > > > Christophe > > > >> R. > >> > >> 0002-arm-Include-code-in-trap.S-for-APCS-only.patch > >> > >> From 390afa88e3d03ce4838f377978a9d7f2c9d468a7 Mon Sep 17 00:00:00 2001 > >> From: Christophe Lyon <[email protected]> > >> Date: Wed, 10 Apr 2019 15:04:13 +0000 > >> Subject: [PATCH 2/2] [arm] Include code in trap.S for APCS only. > >> > >> The code in trap.S is to support the old APCS chunked stack variant, > >> which dates back to the Acorn days, so put it under #ifndef > >> __ARM_EABI__. > >> > >> * libgloss/arm/trap.S: Use __ARM_EABI rather than PREFER_THUMB. > >> * newlib/libc/sys/arm/trap.S: Use __ARM_EABI rather than > >> __thumb2__. > >> --- > >> libgloss/arm/trap.S | 2 +- > >> newlib/libc/sys/arm/trap.S | 2 +- > >> 2 files changed, 2 insertions(+), 2 deletions(-) > >> > >> diff --git a/libgloss/arm/trap.S b/libgloss/arm/trap.S > >> index d854b57..845ad01 100644 > >> --- a/libgloss/arm/trap.S > >> +++ b/libgloss/arm/trap.S > >> @@ -1,6 +1,6 @@ > >> #include "arm.h" > >> /* Run-time exception support */ > >> -#ifndef PREFER_THUMB > >> +#ifndef __ARM_EABI__ > >> #include "swi.h" > >> > >> /* .text is used instead of .section .text so it works with arm-aout too. */ > >> diff --git a/newlib/libc/sys/arm/trap.S b/newlib/libc/sys/arm/trap.S > >> index 21b6937..681b3db 100644 > >> --- a/newlib/libc/sys/arm/trap.S > >> +++ b/newlib/libc/sys/arm/trap.S > >> @@ -1,5 +1,5 @@ > >> /* Run-time exception support */ > >> -#if !defined(__thumb2__) > >> +#ifndef __ARM_EABI__ > >> #include "swi.h" > >> > >> /* .text is used instead of .section .text so it works with arm-aout too. */ > >> > >> 0001-Make-more-macro-checks-ARMv8-M-baseline-proof.patch > >> > >> From 2c57cf3aa28614ba2529c1f45bc45fb971121535 Mon Sep 17 00:00:00 2001 > >> From: Christophe Lyon <[email protected]> > >> Date: Mon, 1 Apr 2019 17:30:53 +0000 > >> Subject: [PATCH 1/2] 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__. > >> --- > >> newlib/libc/sys/arm/crt0.S | 8 ++++---- > >> 1 file changed, 4 insertions(+), 4 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 > >