Index: lld/trunk/ELF/Target.cpp =================================================================== --- lld/trunk/ELF/Target.cpp +++ lld/trunk/ELF/Target.cpp @@ -760,7 +760,8 @@ template bool X86_64TargetInfo::isPicRel(uint32_t Type) const { - return Type != R_X86_64_PC32 && Type != R_X86_64_32; + return Type != R_X86_64_PC32 && Type != R_X86_64_32 && + Type != R_X86_64_TPOFF32; } template Index: lld/trunk/test/ELF/x86-64-reloc-tpoff32-fpic.s =================================================================== --- lld/trunk/test/ELF/x86-64-reloc-tpoff32-fpic.s +++ lld/trunk/test/ELF/x86-64-reloc-tpoff32-fpic.s @@ -0,0 +1,14 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o +# RUN: not ld.lld %t.o -shared -o %t.so 2>&1 | FileCheck %s + +# CHECK: relocation R_X86_64_TPOFF32 cannot be used against shared object; recompile with -fPIC +# CHECK: >>> defined in {{.*}}.o +# CHECK: >>> referenced by {{.*}}.o:(.tdata+0xC) + +.section ".tdata", "awT", @progbits +.globl var +var: + +movq %fs:0, %rax +leaq var@TPOFF(%rax),%rax