[COFF] Improve relocation against discarded section error
Summary: 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. Reviewers: ruiu, pcc Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D54240 llvm-svn: 346427
This commit is contained in:
parent
c4f719feb0
commit
7a44fe956a
|
@ -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 @@ void SectionChunk::writeTo(uint8_t *Buf) const {
|
|||
// 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 @@ void SectionChunk::writeTo(uint8_t *Buf) const {
|
|||
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();
|
||||
|
|
|
@ -84,7 +84,7 @@ static Symbol *getSymbol(SectionChunk *SC, uint32_t Addr) {
|
|||
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;
|
||||
|
|
|
@ -123,6 +123,8 @@ private:
|
|||
|
||||
extern SymbolTable *Symtab;
|
||||
|
||||
std::string getSymbolLocations(ObjFile *File, uint32_t SymIndex);
|
||||
|
||||
} // namespace coff
|
||||
} // namespace lld
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue