diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp index 9f11d4c7ea71..8e0c4f9d07f4 100644 --- a/lld/ELF/SymbolTable.cpp +++ b/lld/ELF/SymbolTable.cpp @@ -137,7 +137,8 @@ DefinedRegular *SymbolTable::addAbsolute(StringRef Name, template DefinedRegular *SymbolTable::addIgnored(StringRef Name, uint8_t Visibility) { - if (!find(Name)) + SymbolBody *S = find(Name); + if (!S || !S->isUndefined()) return nullptr; return addAbsolute(Name, Visibility); } diff --git a/lld/test/ELF/defined-tls_get_addr.s b/lld/test/ELF/defined-tls_get_addr.s new file mode 100644 index 000000000000..509c293cca1d --- /dev/null +++ b/lld/test/ELF/defined-tls_get_addr.s @@ -0,0 +1,10 @@ +// RUN: llvm-mc %s -o %t.o -triple x86_64-pc-linux -filetype=obj +// RUN: ld.lld %t.o -o %t + +// Don't error if __tls_get_addr is defined. + +.global _start +.global __tls_get_addr +_start: +__tls_get_addr: +nop