From cf3b04dab91fec6b336a1a8ee56e5f26dc14e12f Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Fri, 1 Apr 2016 23:36:56 +0000 Subject: [PATCH] Don't create a PLT when we optimize out the plt use. llvm-svn: 265202 --- lld/ELF/Writer.cpp | 2 +- lld/test/ELF/tls-opt-no-plt.s | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 lld/test/ELF/tls-opt-no-plt.s diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 8585287be6d5..81c7bd360014 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -302,7 +302,7 @@ static unsigned handleTlsRelocation(uint32_t Type, SymbolBody &Body, return 1; } if (!Body.isPreemptible()) - return 1; + return 2; if (!Body.isInGot()) { Out::Got->addEntry(Body); Out::RelaDyn->addReloc( diff --git a/lld/test/ELF/tls-opt-no-plt.s b/lld/test/ELF/tls-opt-no-plt.s new file mode 100644 index 000000000000..c0ec9ab35bf4 --- /dev/null +++ b/lld/test/ELF/tls-opt-no-plt.s @@ -0,0 +1,24 @@ +// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o +// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/tls-opt-gdie.s -o %t2.o +// RUN: ld.lld %t2.o -o %t2.so -shared +// RUN: ld.lld %t.o %t2.so -o %t.exe +// RUN: llvm-readobj -s %t.exe | FileCheck %s + +// CHECK-NOT: .plt + + .global _start +_start: + data16 + leaq foo@TLSGD(%rip), %rdi + data16 + data16 + rex64 + callq __tls_get_addr@PLT + + + .type foo,@object + .section .tdata,"awT",@progbits + .globl foo + .align 8 +foo: + .long 42