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
This commit is contained in:
Benjamin Kramer 2010-11-12 19:26:04 +00:00
parent a0a6a47c02
commit 1261a2ff99

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;