MCELF: Copy the symbol name only if we're going to modify it.

llvm-svn: 118920
This commit is contained in:
Benjamin Kramer 2010-11-12 19:26:04 +00:00
parent 8bb507dd6b
commit b4c0c4211e

View File

@ -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;