Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ELF] Fix "TLS attribute mismatch" false positives for STT_NOTYPE und…
…efined symbols D13550 added the diagnostic to address/work around a crash. The rule was refined by D19836 (test/ELF/tls-archive.s) to exclude Lazy symbols. https://bugs.llvm.org/show_bug.cgi?id=45598 reported another case where the current logic has a false positive: Bitcode does not record undefined module-level inline assembly symbols (`IRSymtab.cpp:Builder::addSymbol`). Such an undefined symbol does not have the FB_tls bit and lld will not consider it STT_TLS. When the symbol is later replaced by a STT_TLS Defined, lld will error "TLS attribute mismatch". This patch fixes this false positive by allowing a STT_NOTYPE undefined symbol to be replaced by a STT_TLS. Considered alternative: Moving the diagnostics to scanRelocs() can improve the diagnostics (PR36049) but that requires a fair amount of refactoring. We will need more RelExpr members. It requires more thoughts whether it is worthwhile. See `test/ELF/tls-mismatch.s` for behavior differences. We will fail to diagnose a likely runtime bug (STT_NOTYPE non-TLS relocation referencing a TLS definition). This is probably acceptable because compiler generated code sets symbol types properly. Reviewed By: grimar, psmith Differential Revision: https://reviews.llvm.org/D78438
- Loading branch information