[PATCH] D19044: ELF: Do not create relative relocations for undefined symbols.
Peter Collingbourne via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 12 19:30:22 PDT 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL266161: ELF: Do not create relative relocations for undefined symbols. (authored by pcc).
Changed prior to commit:
http://reviews.llvm.org/D19044?vs=53506&id=53512#toc
Repository:
rL LLVM
http://reviews.llvm.org/D19044
Files:
lld/trunk/ELF/Writer.cpp
lld/trunk/test/ELF/pie-weak.s
Index: lld/trunk/test/ELF/pie-weak.s
===================================================================
--- lld/trunk/test/ELF/pie-weak.s
+++ lld/trunk/test/ELF/pie-weak.s
@@ -0,0 +1,16 @@
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+# RUN: ld.lld -pie %t.o -o %t
+# RUN: llvm-readobj -r %t | FileCheck --check-prefix=RELOCS %s
+# RUN: llvm-objdump -d %t | FileCheck --check-prefix=DISASM %s
+
+# RELOCS: Relocations [
+# RELOCS-NEXT: ]
+
+.weak foo
+
+.globl _start
+_start:
+# DISASM: _start:
+# DISASM-NEXT: 1000: 48 8b 05 69 10 00 00 movq 4201(%rip), %rax
+# ^ .got - (.text + 7)
+mov foo at gotpcrel(%rip), %rax
Index: lld/trunk/ELF/Writer.cpp
===================================================================
--- lld/trunk/ELF/Writer.cpp
+++ lld/trunk/ELF/Writer.cpp
@@ -573,6 +573,10 @@
DynType = Target->TlsGotRel;
else if (Preemptible)
DynType = Target->GotRel;
+ else if (Body.isUndefined())
+ // Weak undefined symbols evaluate to zero, so don't create
+ // relocations for them.
+ continue;
else
DynType = Target->RelativeRel;
AddDyn({DynType, Out<ELFT>::Got, Body.getGotOffset<ELFT>(),
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D19044.53512.patch
Type: text/x-patch
Size: 1269 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160413/28f12ff0/attachment.bin>
More information about the llvm-commits
mailing list