diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp --- a/lld/ELF/Relocations.cpp +++ b/lld/ELF/Relocations.cpp @@ -74,12 +74,12 @@ } static std::string getDefinedLocation(const Symbol &sym) { - std::string msg = "\n>>> defined in "; + const char msg[] = "\n>>> defined in "; if (sym.file) - msg += toString(sym.file); - else if (Optional loc = getLinkerScriptLocation(sym)) - msg += *loc; - return msg; + return msg + toString(sym.file); + if (Optional loc = getLinkerScriptLocation(sym)) + return msg + *loc; + return ""; } // Construct a message in the following format. diff --git a/lld/test/ELF/x86-64-gotpc-err.s b/lld/test/ELF/x86-64-gotpc-err.s --- a/lld/test/ELF/x86-64-gotpc-err.s +++ b/lld/test/ELF/x86-64-gotpc-err.s @@ -3,23 +3,24 @@ # RUN: llvm-mc -filetype=obj -triple=x86_64 %t/a.s -o %t/a.o # RUN: not ld.lld -T %t/lds %t/a.o -o /dev/null 2>&1 | FileCheck %s -# CHECK: error: {{.*}}:(.text+0x2): relocation R_X86_64_GOTPCRELX out of range: 2147483655 is not in [-2147483648, 2147483647]; references data -# CHECK: error: {{.*}}:(.text+0x9): relocation R_X86_64_REX_GOTPCRELX out of range: 2147483648 is not in [-2147483648, 2147483647]; references data +## Test diagnostics for GOTPCRELX overflows. In addition, test that there is no +## `>>> defined in` for linker synthesized __stop_* symbols (there is no +## associated file or linker script line number). + +# CHECK: error: {{.*}}:(.text+0x2): relocation R_X86_64_GOTPCRELX out of range: 2147483655 is not in [-2147483648, 2147483647]; references __stop_data +# CHECK-NEXT: error: {{.*}}:(.text+0x9): relocation R_X86_64_REX_GOTPCRELX out of range: 2147483648 is not in [-2147483648, 2147483647]; references __stop_data # CHECK-NOT: error: #--- a.s - movl data@GOTPCREL(%rip), %eax # out of range - movq data@GOTPCREL(%rip), %rax # out of range - movq data@GOTPCREL(%rip), %rax # in range + movl __stop_data@GOTPCREL(%rip), %eax # out of range + movq __stop_data@GOTPCREL(%rip), %rax # out of range + movq __stop_data@GOTPCREL(%rip), %rax # in range -.data +.section data,"aw",@progbits .space 13 -.globl data -data: - .long 0 #--- lds SECTIONS { .text 0x200000 : { *(.text) } - .data 0x80200000 : { *(.data) } + data 0x80200000 : { *(data) } }