mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 19:06:44 +00:00
[lld/COFF] Demangle symbol name in discarded section relocation error message (#119726)
This commit is contained in:
parent
f22cff7675
commit
d73ef9749e
@ -369,13 +369,14 @@ static void maybeReportRelocationToDiscarded(const SectionChunk *fromChunk,
|
||||
// Get the name of the symbol. If it's null, it was discarded early, so we
|
||||
// have to go back to the object file.
|
||||
ObjFile *file = fromChunk->file;
|
||||
StringRef name;
|
||||
std::string name;
|
||||
if (sym) {
|
||||
name = sym->getName();
|
||||
name = toString(file->ctx, *sym);
|
||||
} else {
|
||||
COFFSymbolRef coffSym =
|
||||
check(file->getCOFFObj()->getSymbol(rel.SymbolTableIndex));
|
||||
name = check(file->getCOFFObj()->getSymbolName(coffSym));
|
||||
name = maybeDemangleSymbol(
|
||||
file->ctx, check(file->getCOFFObj()->getSymbolName(coffSym)));
|
||||
}
|
||||
|
||||
std::vector<std::string> symbolLocations =
|
||||
|
@ -28,8 +28,8 @@ static_assert(sizeof(SymbolUnion) <= 48,
|
||||
"symbols should be optimized for memory usage");
|
||||
|
||||
// Returns a symbol name for an error message.
|
||||
static std::string maybeDemangleSymbol(const COFFLinkerContext &ctx,
|
||||
StringRef symName) {
|
||||
std::string maybeDemangleSymbol(const COFFLinkerContext &ctx,
|
||||
StringRef symName) {
|
||||
if (ctx.config.demangle) {
|
||||
std::string prefix;
|
||||
StringRef prefixless = symName;
|
||||
|
@ -533,6 +533,10 @@ std::string toString(const coff::COFFLinkerContext &ctx, coff::Symbol &b);
|
||||
std::string toCOFFString(const coff::COFFLinkerContext &ctx,
|
||||
const llvm::object::Archive::Symbol &b);
|
||||
|
||||
// Returns a symbol name for an error message.
|
||||
std::string maybeDemangleSymbol(const coff::COFFLinkerContext &ctx,
|
||||
StringRef symName);
|
||||
|
||||
} // namespace lld
|
||||
|
||||
#endif
|
||||
|
@ -8,10 +8,15 @@
|
||||
|
||||
# RUN: not lld-link -entry:main -nodefaultlib %t1.obj %t2.obj -out:%t.exe -opt:ref 2>&1 | FileCheck %s
|
||||
# RUN: not lld-link -entry:main -nodefaultlib %t1.obj %t2.obj -out:%t.exe -opt:noref 2>&1 | FileCheck %s
|
||||
# RUN: not lld-link -entry:main -nodefaultlib %t1.obj %t2.obj -out:%t.exe -demangle:no 2>&1 \
|
||||
# RUN: | FileCheck --check-prefix=NODEMANGLE %s
|
||||
|
||||
# CHECK: error: relocation against symbol in discarded section: assoc_global
|
||||
# CHECK: error: relocation against symbol in discarded section: int __cdecl assoc_global(void)
|
||||
# CHECK: >>> referenced by {{.*}}reloc-discarded{{.*}}.obj:(main)
|
||||
|
||||
# NODEMANGLE: error: relocation against symbol in discarded section: ?assoc_global@@YAHXZ
|
||||
# NODEMANGLE: >>> referenced by {{.*}}reloc-discarded{{.*}}.obj:(main)
|
||||
|
||||
.section .bss,"bw",discard,main_global
|
||||
.globl main_global
|
||||
.p2align 2
|
||||
@ -20,12 +25,12 @@ main_global:
|
||||
|
||||
.section .CRT$XCU,"dr",associative,main_global
|
||||
.p2align 3
|
||||
assoc_global:
|
||||
"?assoc_global@@YAHXZ":
|
||||
.quad main_global
|
||||
|
||||
.text
|
||||
.globl main
|
||||
main:
|
||||
movq assoc_global(%rip), %rax
|
||||
movq "?assoc_global@@YAHXZ"(%rip), %rax
|
||||
movl (%rax), %eax
|
||||
retq
|
||||
|
Loading…
x
Reference in New Issue
Block a user