[ELF] - Stop handling local symbols in a special way.
Previously we stored kept locals in a KeptLocalSyms arrays,
belonged to files.
Patch makes SymbolTableSection to store locals in Symbols member,
that already present and was used for globals.
SymbolTableSection already had NumLocals counter member, so change
itself is trivial.
That allows to simplify handling of -r,
Body::DynsymIndex is no more used as "symbol table index" for relocatable
output.
Change was suggested during review of D28773 and opens road for D28612.
Differential revision: https://reviews.llvm.org/D29021
llvm-svn: 292789
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index 7e49ce0..b17bc12 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -466,11 +466,7 @@
InputSectionBase<ELFT> *Sec = DR->Section;
if (!shouldKeepInSymtab<ELFT>(Sec, B->getName(), *B))
continue;
- ++In<ELFT>::SymTab->NumLocals;
- if (Config->Relocatable)
- B->DynsymIndex = In<ELFT>::SymTab->NumLocals;
- F->KeptLocalSyms.push_back(std::make_pair(
- DR, In<ELFT>::SymTab->StrTabSec.addString(B->getName())));
+ In<ELFT>::SymTab->addLocal(B);
}
}
}
@@ -1040,10 +1036,10 @@
if (!includeInSymtab<ELFT>(*Body))
continue;
if (In<ELFT>::SymTab)
- In<ELFT>::SymTab->addSymbol(Body);
+ In<ELFT>::SymTab->addGlobal(Body);
if (In<ELFT>::DynSymTab && S->includeInDynsym()) {
- In<ELFT>::DynSymTab->addSymbol(Body);
+ In<ELFT>::DynSymTab->addGlobal(Body);
if (auto *SS = dyn_cast<SharedSymbol<ELFT>>(Body))
if (SS->file()->isNeeded())
In<ELFT>::VerNeed->addSymbol(SS);