[llvm-commits] [llvm] r118920 - /llvm/trunk/lib/MC/ELFObjectWriter.cpp
Benjamin Kramer
benny.kra at googlemail.com
Fri Nov 12 11:26:04 PST 2010
Author: d0k
Date: Fri Nov 12 13:26:04 2010
New Revision: 118920
URL: http://llvm.org/viewvc/llvm-project?rev=118920&view=rev
Log:
MCELF: Copy the symbol name only if we're going to modify it.
Modified:
llvm/trunk/lib/MC/ELFObjectWriter.cpp
Modified: llvm/trunk/lib/MC/ELFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/ELFObjectWriter.cpp?rev=118920&r1=118919&r2=118920&view=diff
==============================================================================
--- llvm/trunk/lib/MC/ELFObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/ELFObjectWriter.cpp Fri Nov 12 13:26:04 2010
@@ -1016,21 +1016,20 @@
// 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;
More information about the llvm-commits
mailing list