[PATCH] D54240: [COFF] Improve relocation against discarded section error
Reid Kleckner via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 7 16:50:41 PST 2018
rnk created this revision.
rnk added reviewers: ruiu, pcc.
Reuse the "referenced by" note diagnostic code that we already use for
undefined symbols. In my case, it turned this:
lld-link: error: relocation against symbol in discarded section: .text
lld-link: error: relocation against symbol in discarded section: .text
...
Into this:
lld-link: error: relocation against symbol in discarded section: .text
>>> referenced by libANGLE.lib(CompilerGL.obj):(.SCOVP$M)
>>> referenced by libANGLE.lib(CompilerGL.obj):(.SCOVP$M)
...
lld-link: error: relocation against symbol in discarded section: .text
>>> referenced by obj/third_party/angle/libGLESv2/entry_points_egl_ext.obj:(.SCOVP$M)
>>> referenced by obj/third_party/angle/libGLESv2/entry_points_egl_ext.obj:(.SCOVP$M)
...
I think the new output is more useful.
https://reviews.llvm.org/D54240
Files:
lld/COFF/Chunks.cpp
lld/COFF/SymbolTable.cpp
lld/COFF/SymbolTable.h
lld/test/COFF/reloc-discarded.s
Index: lld/test/COFF/reloc-discarded.s
===================================================================
--- lld/test/COFF/reloc-discarded.s
+++ lld/test/COFF/reloc-discarded.s
@@ -10,6 +10,7 @@
# RUN: not lld-link -entry:main -nodefaultlib %t1.obj %t2.obj -out:%t.exe -opt:noref 2>&1 | FileCheck %s
# CHECK: error: relocation against symbol in discarded section: assoc_global
+# CHECK: >>> referenced by {{.*}}reloc-discarded{{.*}}.obj:(main)
.section .bss,"bw",discard,main_global
.globl main_global
Index: lld/COFF/SymbolTable.h
===================================================================
--- lld/COFF/SymbolTable.h
+++ lld/COFF/SymbolTable.h
@@ -123,6 +123,8 @@
extern SymbolTable *Symtab;
+std::string getSymbolLocations(ObjFile *File, uint32_t SymIndex);
+
} // namespace coff
} // namespace lld
Index: lld/COFF/SymbolTable.cpp
===================================================================
--- lld/COFF/SymbolTable.cpp
+++ lld/COFF/SymbolTable.cpp
@@ -84,7 +84,7 @@
return Candidate;
}
-static std::string getSymbolLocations(ObjFile *File, uint32_t SymIndex) {
+std::string lld::coff::getSymbolLocations(ObjFile *File, uint32_t SymIndex) {
struct Location {
Symbol *Sym;
std::pair<StringRef, uint32_t> FileLine;
Index: lld/COFF/Chunks.cpp
===================================================================
--- lld/COFF/Chunks.cpp
+++ lld/COFF/Chunks.cpp
@@ -11,6 +11,7 @@
#include "InputFiles.h"
#include "Symbols.h"
#include "Writer.h"
+#include "SymbolTable.h"
#include "lld/Common/ErrorHandler.h"
#include "llvm/ADT/Twine.h"
#include "llvm/BinaryFormat/COFF.h"
@@ -356,7 +357,8 @@
// with relocations against discarded comdat sections. Such sections
// are left as is, with relocations untouched.
if (!Config->MinGW)
- error("relocation against symbol in discarded section: " + Name);
+ error("relocation against symbol in discarded section: " + Name +
+ getSymbolLocations(File, Rel.SymbolTableIndex));
continue;
}
// Get the output section of the symbol for this relocation. The output
@@ -374,7 +376,7 @@
if (isCodeView() || isDWARF())
continue;
error("relocation against symbol in discarded section: " +
- Sym->getName());
+ Sym->getName() + getSymbolLocations(File, Rel.SymbolTableIndex));
continue;
}
uint64_t S = Sym->getRVA();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D54240.173091.patch
Type: text/x-patch
Size: 2433 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181108/d744e445/attachment.bin>
More information about the llvm-commits
mailing list