}
void Init(StringRef GVName, Mangler *Mang) {
- // Already initialized.
- if (!Stub.empty()) return;
+ assert(!GVName.empty());
+ if (!Stub.empty()) return; // Already initialized.
+ // Get the names for the external symbol name.
SmallString<128> TmpStr;
- Mang->makeNameProper(TmpStr, GVName + "$stub", Mangler::Private);
+ Mang->getNameWithPrefix(TmpStr, GVName + "$stub", Mangler::Private);
Stub = TmpStr.str();
TmpStr.clear();
- Mang->makeNameProper(TmpStr, GVName + "$lazy_ptr", Mangler::Private);
+ Mang->getNameWithPrefix(TmpStr, GVName + "$lazy_ptr", Mangler::Private);
LazyPtr = TmpStr.str();
TmpStr.clear();
- Mang->makeNameProper(TmpStr, GVName + "$stub$tmp", Mangler::Private);
+ Mang->getNameWithPrefix(TmpStr, GVName + "$stub$tmp", Mangler::Private);
AnonSymbol = TmpStr.str();
}
};
}
if (MO.getType() == MachineOperand::MO_ExternalSymbol) {
SmallString<128> MangledName;
- Mang->makeNameProper(MangledName, MO.getSymbolName());
+ Mang->getNameWithPrefix(MangledName, MO.getSymbolName());
FnStubInfo &FnInfo = FnStubs[MangledName.str()];
FnInfo.Init(MO.getSymbolName(), Mang);
O << FnInfo.Stub;
if (GV->isWeakForLinker()) {
const char *Prefix = getCOFFSectionPrefixForUniqueGlobal(Kind);
SmallString<128> Name(Prefix, Prefix+strlen(Prefix));
- Mang->makeNameProper(Name, GV->getNameStr());
+ Mang->getNameWithPrefix(Name, GV->getName());
return getCOFFSection(Name.str(), false, Kind);
}
break;
}
case MachineOperand::MO_ExternalSymbol: {
- Mang->makeNameProper(TempNameStr, MO.getSymbolName());
+ const MCSymbol *SymToPrint;
if (MO.getTargetFlags() == X86II::MO_DARWIN_STUB) {
- TempNameStr += "$stub";
- MCSymbol *Sym = OutContext.GetOrCreateSymbol(TempNameStr.str());
+ Mang->getNameWithPrefix(TempNameStr,
+ StringRef(MO.getSymbolName())+"$stub");
+ const MCSymbol *Sym = OutContext.GetOrCreateSymbol(TempNameStr.str());
const MCSymbol *&StubSym =
MMI->getObjFileInfo<MachineModuleInfoMachO>().getFnStubEntry(Sym);
if (StubSym == 0) {
TempNameStr.erase(TempNameStr.end()-5, TempNameStr.end());
StubSym = OutContext.GetOrCreateSymbol(TempNameStr.str());
}
+ SymToPrint = StubSym;
+ } else {
+ Mang->getNameWithPrefix(TempNameStr, MO.getSymbolName());
+ SymToPrint = OutContext.GetOrCreateSymbol(TempNameStr.str());
}
// If the name begins with a dollar-sign, enclose it in parens. We do this
// to avoid having it look like an integer immediate to the assembler.
- if (TempNameStr[0] == '$')
- O << '(' << TempNameStr << ')';
- else
- O << TempNameStr;
+ if (SymToPrint->getName()[0] != '$')
+ SymToPrint->print(O, MAI);
+ else {
+ O << '(';
+ SymToPrint->print(O, MAI);
+ O << '(';
+ }
break;
}
}