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.