Index: lld/trunk/ELF/Symbols.cpp =================================================================== --- lld/trunk/ELF/Symbols.cpp +++ lld/trunk/ELF/Symbols.cpp @@ -59,8 +59,12 @@ Addend = 0; } uintX_t VA = (SC->OutSec ? SC->OutSec->getVA() : 0) + SC->getOffset(Offset); - if (D.isTls() && !Config->Relocatable) + if (D.isTls() && !Config->Relocatable) { + if (!Out::TlsPhdr) + fatal(getFilename(D.File) + + " has a STT_TLS symbol but doesn't have a PT_TLS section"); return VA - Out::TlsPhdr->p_vaddr; + } return VA; } case SymbolBody::DefinedCommonKind: Index: lld/trunk/test/ELF/invalid/tls-symbol.s =================================================================== --- lld/trunk/test/ELF/invalid/tls-symbol.s +++ lld/trunk/test/ELF/invalid/tls-symbol.s @@ -0,0 +1,5 @@ +# REQUIRES: x86 + +## The test file contains a STT_TLS symbol but has no TLS section. +# RUN: not ld.lld %S/Inputs/tls-symbol.elf -o %t 2>&1 | FileCheck %s +# CHECK: has a STT_TLS symbol but doesn't have a PT_TLS section