diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp --- a/lld/ELF/Relocations.cpp +++ b/lld/ELF/Relocations.cpp @@ -99,8 +99,12 @@ int64_t min, uint64_t max) { ErrorPlace errPlace = getErrorPlace(loc); std::string hint; - if (rel.sym && !rel.sym->isSection()) - hint = "; references " + lld::toString(*rel.sym); + if (rel.sym) { + if (!rel.sym->isSection()) + hint = "; references " + lld::toString(*rel.sym); + else if (auto *d = dyn_cast(rel.sym)) + hint = ("; references " + d->section->name + "+" + Twine(d->value)).str(); + } if (!errPlace.srcLoc.empty()) hint += "\n>>> referenced by " + errPlace.srcLoc; if (rel.sym && !rel.sym->isSection()) diff --git a/lld/test/ELF/aarch64-movw-error.s b/lld/test/ELF/aarch64-movw-error.s --- a/lld/test/ELF/aarch64-movw-error.s +++ b/lld/test/ELF/aarch64-movw-error.s @@ -22,7 +22,7 @@ # CHECK: relocation R_AARCH64_MOVW_SABS_G2 out of range: -281479271677952 is not in [-281474976710656, 281474976710655] movn x0, #:abs_g2_s:zero-0x1000100000000 -# CHECK: relocation R_AARCH64_MOVW_PREL_G0 out of range: 65536 is not in [-65536, 65535] +# CHECK: relocation R_AARCH64_MOVW_PREL_G0 out of range: 65536 is not in [-65536, 65535]; references .text+0 movn x0, #:prel_g0:.+0x10000 # CHECK: relocation R_AARCH64_MOVW_PREL_G1 out of range: 4294967296 is not in [-4294967296, 4294967295] movn x0, #:prel_g1:.+0x100000000 diff --git a/lld/test/ELF/linkerscript/eh-frame-reloc-out-of-range.test b/lld/test/ELF/linkerscript/eh-frame-reloc-out-of-range.test --- a/lld/test/ELF/linkerscript/eh-frame-reloc-out-of-range.test +++ b/lld/test/ELF/linkerscript/eh-frame-reloc-out-of-range.test @@ -10,4 +10,4 @@ .text : { *(.text*) } : text } -# CHECK: error: {{.*}}:(.eh_frame+0x20): relocation R_X86_64_PC32 out of range: 64424443872 is not in [-2147483648, 2147483647] +# CHECK: error: {{.*}}:(.eh_frame+0x20): relocation R_X86_64_PC32 out of range: 64424443872 is not in [-2147483648, 2147483647]; references .text+0 diff --git a/lld/test/ELF/ppc64-reloc-pcrel34-overflow.s b/lld/test/ELF/ppc64-reloc-pcrel34-overflow.s --- a/lld/test/ELF/ppc64-reloc-pcrel34-overflow.s +++ b/lld/test/ELF/ppc64-reloc-pcrel34-overflow.s @@ -10,7 +10,7 @@ # RUN: llvm-mc -filetype=obj -triple=powerpc64 %s -o %t.o # RUN: not ld.lld -T %t.script %t.o -o /dev/null 2>&1 | FileCheck %s -# CHECK: relocation R_PPC64_PCREL34 out of range: 8589934592 is not in [-8589934592, 8589934591] +# CHECK: relocation R_PPC64_PCREL34 out of range: 8589934592 is not in [-8589934592, 8589934591]; references .data+0 plwa 3, glob_overflow@PCREL(0), 1 # CHECK-NOT: relocation diff --git a/lld/test/ELF/x86-64-reloc-range.s b/lld/test/ELF/x86-64-reloc-range.s --- a/lld/test/ELF/x86-64-reloc-range.s +++ b/lld/test/ELF/x86-64-reloc-range.s @@ -4,7 +4,7 @@ // RUN: ld.lld --noinhibit-exec -shared %t.o -o %t 2>&1 | FileCheck %s // RUN: ls %t -// CHECK: {{.*}}:(.text+0x3): relocation R_X86_64_PC32 out of range: 2147483648 is not in [-2147483648, 2147483647] +// CHECK: {{.*}}:(.text+0x3): relocation R_X86_64_PC32 out of range: 2147483648 is not in [-2147483648, 2147483647]; references .bss+0 // CHECK-NOT: relocation lea foo(%rip), %rax