From fc063e8fec64b72ef06a5e4ec8835745e6548740 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 22 Oct 2015 18:32:06 +0000 Subject: Avoid storing a second copy of each string in StringTableBuilder. This was only use in the extremely uncommon case of @@@ symbols on ELF. llvm-svn: 251039 --- llvm/lib/MC/ELFObjectWriter.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'llvm/lib/MC/ELFObjectWriter.cpp') diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index f1acc1d75fb..5fdfcf9ef2d 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -33,6 +33,7 @@ #include "llvm/Support/ELF.h" #include "llvm/Support/Endian.h" #include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/StringSaver.h" #include using namespace llvm; @@ -106,6 +107,8 @@ class ELFObjectWriter : public MCObjectWriter { /// @name Symbol Table Data /// @{ + BumpPtrAllocator Alloc; + StringSaver VersionSymSaver{Alloc}; StringTableBuilder StrTabBuilder; /// @} @@ -847,13 +850,15 @@ void ELFObjectWriter::computeSymbolTable( Buf += Name.substr(0, Pos); unsigned Skip = MSD.SectionIndex == ELF::SHN_UNDEF ? 2 : 1; Buf += Name.substr(Pos + Skip); - Name = Buf; + Name = VersionSymSaver.save(Buf.c_str()); } } // Sections have their own string table - if (Symbol.getType() != ELF::STT_SECTION) - MSD.Name = StrTabBuilder.add(Name); + if (Symbol.getType() != ELF::STT_SECTION) { + MSD.Name = Name; + StrTabBuilder.add(Name); + } if (Local) LocalSymbolData.push_back(MSD); -- cgit v1.2.3