Author: tstellar Date: Fri May 3 19:51:01 2019 New Revision: 359956 URL: http://llvm.org/viewvc/llvm-project?rev=359956&view=rev Log: Merging r357885:
------------------------------------------------------------------------ r357885 | ruiu | 2019-04-07 23:45:07 -0700 (Sun, 07 Apr 2019) | 13 lines Fix -emit-reloc against local symbols. Previously, we drop symbols starting with .L from the symbol table, so if there is a relocation that refers a .L symbol, it ended up referencing a null -- which happened to be interpreted as an absolute symbol. This patch copies all symbols including local ones if -emit-reloc is given. Fixes https://bugs.llvm.org/show_bug.cgi?id=41385 Differential Revision: https://reviews.llvm.org/D60306 ------------------------------------------------------------------------ Added: lld/branches/release_80/test/ELF/emit-relocs-mergeable2.s Modified: lld/branches/release_80/ELF/Writer.cpp Modified: lld/branches/release_80/ELF/Writer.cpp URL: http://llvm.org/viewvc/llvm-project/lld/branches/release_80/ELF/Writer.cpp?rev=359956&r1=359955&r2=359956&view=diff ============================================================================== --- lld/branches/release_80/ELF/Writer.cpp (original) +++ lld/branches/release_80/ELF/Writer.cpp Fri May 3 19:51:01 2019 @@ -547,6 +547,11 @@ static bool shouldKeepInSymtab(SectionBa if (Config->Discard == DiscardPolicy::None) return true; + // If -emit-reloc is given, all symbols including local ones need to be + // copied because they may be referenced by relocations. + if (Config->EmitRelocs) + return true; + // In ELF assembly .L symbols are normally discarded by the assembler. // If the assembler fails to do so, the linker discards them if // * --discard-locals is used. Added: lld/branches/release_80/test/ELF/emit-relocs-mergeable2.s URL: http://llvm.org/viewvc/llvm-project/lld/branches/release_80/test/ELF/emit-relocs-mergeable2.s?rev=359956&view=auto ============================================================================== --- lld/branches/release_80/test/ELF/emit-relocs-mergeable2.s (added) +++ lld/branches/release_80/test/ELF/emit-relocs-mergeable2.s Fri May 3 19:51:01 2019 @@ -0,0 +1,14 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o +# RUN: ld.lld --emit-relocs %t.o -o %t.exe +# RUN: llvm-readelf --relocations %t.exe | FileCheck %s + +# CHECK: 0000000000201004 000000010000000b R_X86_64_32S 0000000000200120 .Lfoo + 8 + +.globl _start +_start: + movq .Lfoo+8, %rax +.section .rodata.cst16,"aM",@progbits,16 +.Lfoo: + .quad 0 + .quad 0 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits