Index: ELF/InputSection.cpp =================================================================== --- ELF/InputSection.cpp +++ ELF/InputSection.cpp @@ -407,8 +407,12 @@ } uintX_t AddrLoc = this->OutSec->getVA() + Offset; - uint64_t SymVA = SignExtend64( - getSymVA(Type, Addend, AddrLoc, Sym, R_ABS)); + uint64_t SymVA; + if (Sym.isTls() && !Out::TlsPhdr) + SymVA = 0; + else + SymVA = SignExtend64( + getSymVA(Type, Addend, AddrLoc, Sym, R_ABS)); Target->relocateOne(BufLoc, Type, SymVA); } } Index: test/ELF/gc-debuginfo-tls.s =================================================================== --- /dev/null +++ test/ELF/gc-debuginfo-tls.s @@ -0,0 +1,28 @@ +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o +# RUN: ld.lld %t.o --gc-sections -shared -o %t1 +# RUN: ld.lld %t.o -shared -o %t2 +# RUN: llvm-readobj -symbols %t1 | FileCheck %s --check-prefix=GC +# RUN: llvm-readobj -symbols %t2 | FileCheck %s --check-prefix=NOGC + +# NOGC: Symbol { +# NOGC: Name: .tbss +# NOGC: Value: 0x1000 +# NOGC: Size: 0 +# NOGC: Binding: Local +# NOGC: Type: TLS +# NOGC: Other: 0 +# NOGC: Section: .tbss +# NOGC: } + +# GC-NOT: tbss + + .file 1 "patatino.cpp" + .globl main +main: + .loc 1 2 0 + .cfi_startproc + .cfi_endproc + .cfi_startproc + .cfi_endproc + .section .tbss,"awT",@nobits + .long 0