summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/ELFObjectWriter.cpp
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2010-11-12 19:26:04 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2010-11-12 19:26:04 +0000
commitdcc7732f88589a934da2d9f6fb4f7b6be35df13b (patch)
tree320e0839d61f3924410ba6d4da81c24a86e1648a /llvm/lib/MC/ELFObjectWriter.cpp
parent984ff7d17e0cce946fa7dd997c296705c6f5de11 (diff)
downloadbcm5719-llvm-dcc7732f88589a934da2d9f6fb4f7b6be35df13b.tar.gz
bcm5719-llvm-dcc7732f88589a934da2d9f6fb4f7b6be35df13b.zip
MCELF: Copy the symbol name only if we're going to modify it.
llvm-svn: 118920
Diffstat (limited to 'llvm/lib/MC/ELFObjectWriter.cpp')
-rw-r--r--llvm/lib/MC/ELFObjectWriter.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index f8caee9882f..10600a5acda 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/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;
OpenPOWER on IntegriCloud