https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104671

            Bug ID: 104671
           Summary: -Wa,-m<cpu> no longer has any effect
           Product: gcc
           Version: 10.3.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: npiggin at gmail dot com
                CC: amodra at gcc dot gnu.org, bergner at gcc dot gnu.org,
                    dje at gcc dot gnu.org, meissner at gcc dot gnu.org, pc at 
us dot ibm.com,
                    segher at gcc dot gnu.org, wschmidt at gcc dot gnu.org
  Target Milestone: ---

Commit e154242724b084380e3221df7c08fcdbd8460674 ("Don't pass -many to the
assembler") also added a workaround emitting a ".machine" directive to the top
of each generated .s file corresponding to -mcpu= option, to work around buggy
build code which uses incorrect -Wa,-mcpu options:

  This patch also emits .machine assembler directives for ELF targets
  when functions are compiled for different cpus via attributes or
  pragmas.  That's necessary when the initial -m<cpu> option passed to
  the assembler doesn't enable the superset of all opcodes emitted, as
  seen by a failure of gcc.target/powerpc/clone2.c without .machine
  when building gcc for power8.

This also prevents passing a -m<cpu> to the assembler which is a strict
superset of the -mcpu= generated code.

This is a valid situation where .c code is built with a baseline architecture
compatibility plus dynamic support for newer instructions with inline asm. The
Linux kernel extensively uses this pattern.

Reply via email to