From: Benjamin Kramer Date: Fri, 12 Nov 2010 19:26:04 +0000 (+0000) Subject: MCELF: Copy the symbol name only if we're going to modify it. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=1261a2ff99299946952013f284615a06afa3dc50;p=oota-llvm.git MCELF: Copy the symbol name only if we're going to modify it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118920 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index f8caee9882f..10600a5acda 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/lib/MC/ELFObjectWriter.cpp @@ -1016,21 +1016,20 @@ void ELFObjectWriterImpl::ComputeSymbolTable(MCAssembler &Asm, // The @@@ in symbol version is replaced with @ in undefined symbols and // @@ in defined ones. StringRef Name = Symbol.getName(); + SmallString<32> Buf; + size_t Pos = Name.find("@@@"); - std::string FinalName; if (Pos != StringRef::npos) { - StringRef Prefix = Name.substr(0, Pos); - unsigned n = MSD.SectionIndex == ELF::SHN_UNDEF ? 2 : 1; - StringRef Suffix = Name.substr(Pos + n); - FinalName = Prefix.str() + Suffix.str(); - } else { - FinalName = Name.str(); + Buf += Name.substr(0, Pos); + unsigned Skip = MSD.SectionIndex == ELF::SHN_UNDEF ? 2 : 1; + Buf += Name.substr(Pos + Skip); + Name = Buf; } - uint64_t &Entry = StringIndexMap[FinalName]; + uint64_t &Entry = StringIndexMap[Name]; if (!Entry) { Entry = StringTable.size(); - StringTable += FinalName; + StringTable += Name; StringTable += '\x00'; } MSD.StringIndex = Entry;