[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
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85606
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
reported.
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