diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-01-29 01:24:25 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-01-29 01:24:25 +0000 |
commit | e2c2461a6bf0b8ccbe7a2cf9021e16c3be51ca81 (patch) | |
tree | 91c63b1c3e9390215d045f142672d7c067071d42 /lld/ELF/Writer.cpp | |
parent | fa7ae77af40f4fdce6fb0527f3c5ca3e1fb68dea (diff) | |
download | bcm5719-llvm-e2c2461a6bf0b8ccbe7a2cf9021e16c3be51ca81.tar.gz bcm5719-llvm-e2c2461a6bf0b8ccbe7a2cf9021e16c3be51ca81.zip |
Merge identical strings.
This avoids the need to have reserve and addString in sync.
We avoid hashing the global symbols again. This means that we don't
merge a global symbol that has the same name as some other string, but
that doesn't seem very common. The string table size is the same in
clang an scylladb with or without hashing global symbols again.
llvm-svn: 259136
Diffstat (limited to 'lld/ELF/Writer.cpp')
-rw-r--r-- | lld/ELF/Writer.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 239f6a6433f..a27c9fc1b09 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -431,8 +431,9 @@ template <class ELFT> void Writer<ELFT>::copyLocalSymbols() { if (!Section->isLive()) continue; } - Out<ELFT>::SymTab->addLocalSymbol(SymName); - F->KeptLocalSyms.push_back(&Sym); + ++Out<ELFT>::SymTab->NumLocals; + F->KeptLocalSyms.push_back(std::make_pair( + &Sym, Out<ELFT>::SymTab->StrTabSec.addString(SymName))); } } } @@ -907,7 +908,7 @@ template <class ELFT> bool Writer<ELFT>::createSections() { } for (OutputSectionBase<ELFT> *Sec : OutputSections) - Out<ELFT>::ShStrTab->reserve(Sec->getName()); + Sec->setSHName(Out<ELFT>::ShStrTab->addString(Sec->getName())); // Finalizers fix each section's size. // .dynsym is finalized early since that may fill up .gnu.hash. |