[Bug target/85606] [8 regression] Assembly file generated for ARM Cortex-M0 should not specify `.arch armv6-m` at all or use `.arch armv6s-m`

rearnsha at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu May 10 13:20:00 GMT 2018


Richard Earnshaw <rearnsha at gcc dot gnu.org> changed:

           What    |Removed                     |Added
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2018-05-10
   Target Milestone|---                         |8.2
            Summary|Assembly file generated for |[8 regression] Assembly
                   |ARM Cortex-M0 should not    |file generated for ARM
                   |specify `.arch armv6-m` at  |Cortex-M0 should not
                   |all or use `.arch armv6s-m` |specify `.arch armv6-m` at
                   |                            |all or use `.arch armv6s-m`
     Ever confirmed|0                           |1

--- Comment #1 from Richard Earnshaw <rearnsha at gcc dot gnu.org> ---
This is the convergence of a number of niggly issues.

Initially Arm defined both ARMv6-M and ARMv6S-M.  The two differed only by
support for the SVC instruction in the latter.  Later, they dropped the name
ARMv6S-M but added support for SVC to ARMv6-M (in effect they made ARMv6-M
equivalent to ARMv6S-M).

To avoid massive churn on the assembler every time new CPU names are added, we
changed GCC-8 to not emit CPU names directly into the assembler files
(architecture names are much more stable and smaller in number); this makes it
far more likely that you won't have to update GAS each time a new CPU name is
added (a Good Thing TM).

Cortex-m0, cortex-m0plus and cortex-m1 are all ARMv6-M parts, but they are
really, in GCC/gas terminology ARMv6S-M parts.  Gas seems to treat these CPUs
as ARMv6S-M, but still distinguishes between v6-M and v6S-M, hence the failure

So I think the compiler should treat all these parts as ARMv6S-M going forward.
 That's a fairly simple change to arm-cpus.in.

I think GAS needs some changes as well, to make .arch armv6-m be treated in the
same way as armv6s-m, but that's a separate issue.

More information about the Gcc-bugs mailing list