Index: lld/trunk/ELF/OutputSections.cpp =================================================================== --- lld/trunk/ELF/OutputSections.cpp +++ lld/trunk/ELF/OutputSections.cpp @@ -405,8 +405,10 @@ OutputSection *&Sec = Map[Key]; if (Sec) { if (getIncompatibleFlags(Sec->Flags) != getIncompatibleFlags(IS->Flags)) - error("Section has flags incompatible with others with the same name " + - toString(IS)); + error("incompatible section flags for " + Sec->Name + + "\n>>> " + toString(IS) + ": 0x" + utohexstr(IS->Flags) + + "\n>>> output section " + Sec->Name + ": 0x" + + utohexstr(Sec->Flags)); if (Sec->Type != IS->Type) { if (canMergeToProgbits(Sec->Type) && canMergeToProgbits(IS->Type)) Sec->Type = SHT_PROGBITS; Index: lld/trunk/test/ELF/incompatible-section-flags.s =================================================================== --- lld/trunk/test/ELF/incompatible-section-flags.s +++ lld/trunk/test/ELF/incompatible-section-flags.s @@ -1,8 +1,13 @@ // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o // RUN: not ld.lld -shared %t.o -o %t 2>&1 | FileCheck %s -// CHECK: error: Section has flags incompatible with others with the same name {{.*}}incompatible-section-flags.s.tmp.o:(.foo) -// CHECK: error: Section has flags incompatible with others with the same name {{.*}}incompatible-section-flags.s.tmp.o:(.bar) +// CHECK: error: incompatible section flags for .foo +// CHECK-NEXT: >>> {{.*}}incompatible-section-flags.s.tmp.o:(.foo): 0x3 +// CHECK-NEXT: >>> output section .foo: 0x403 + +// CHECK: error: incompatible section flags for .bar +// CHECK-NEXT: >>> {{.*}}incompatible-section-flags.s.tmp.o:(.bar): 0x403 +// CHECK-NEXT: >>> output section .bar: 0x3 .section .foo, "awT", @progbits, unique, 1 .quad 0