summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2017-04-25 16:00:44 +0000
committerRui Ueyama <ruiu@google.com>2017-04-25 16:00:44 +0000
commit577168ecdeadbb991dabf16d7879f31f73b9901d (patch)
treeba400d847371c560fb0e8e131301beb4ce89a21a
parent4800fc4363167ec57a8ae0e5be5de63c3028d4ab (diff)
downloadbcm5719-llvm-577168ecdeadbb991dabf16d7879f31f73b9901d.tar.gz
bcm5719-llvm-577168ecdeadbb991dabf16d7879f31f73b9901d.zip
[ELF] Improve error message for incompatible section flags
Previously we were not printing out the flags of the incompatible section which made it difficult to determine what the problem was. The error message format has been change to the following: error: incompatible section flags for .bar >>> /foo/bar/incompatible-section-flags.s.tmp.o:(.bar): 0x403 >>> output section .bar: 0x3 Patch by Alexander Richardson. Differential Revision: https://reviews.llvm.org/D32484 llvm-svn: 301319
-rw-r--r--lld/ELF/OutputSections.cpp6
-rw-r--r--lld/test/ELF/incompatible-section-flags.s9
2 files changed, 11 insertions, 4 deletions
diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp
index a40818d2d30..71fc00ac35e 100644
--- a/lld/ELF/OutputSections.cpp
+++ b/lld/ELF/OutputSections.cpp
@@ -405,8 +405,10 @@ void OutputSectionFactory::addInputSec(InputSectionBase *IS,
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;
diff --git a/lld/test/ELF/incompatible-section-flags.s b/lld/test/ELF/incompatible-section-flags.s
index efca31bb9a8..25d99945e00 100644
--- a/lld/test/ELF/incompatible-section-flags.s
+++ b/lld/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
OpenPOWER on IntegriCloud