File gcc10-amdgcn-llvm-as.patch of Package gcc10

varasm.c: Always output flags in merged .section for LLVM assembler compatibility [PR97827]

For compatibility with LLVM 11's 'mc' assembler, the flags have to be
repeated every time. See also LLVM Bug 48201 for this issue and for the patch causing the issue.

	PR target/97827
	* varasm.c (default_elf_asm_named_section): Always output all
	flags if SECTION_MERGE, even if already declared before.

diff --git a/gcc/varasm.c b/gcc/varasm.c
index ada99940f65..51a507393a8 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -6738,9 +6738,11 @@ default_elf_asm_named_section (const char *name, unsigned int flags,
   /* If we have already declared this section, we can use an
      abbreviated form to switch back to it -- unless this section is
      part of a COMDAT groups, in which case GAS requires the full
-     declaration every time.  */
+     declaration every time.  LLVM's MC linker requires that the
+     flags are identical, thus avoid the abbreviated form with MERGE.  */
-      && (flags & SECTION_DECLARED))
+      && (flags & SECTION_DECLARED)
+      && !(flags & SECTION_MERGE))
       fprintf (asm_out_file, "\t.section\t%s\n", name);
openSUSE Build Service is sponsored by