From 1261a2ff99299946952013f284615a06afa3dc50 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Fri, 12 Nov 2010 19:26:04 +0000 Subject: [PATCH] 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 --- lib/MC/ELFObjectWriter.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) 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;