mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
MCize tis, and make it keep CurrentFnSym up to date with CurrentFnName.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93598 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
516ab96de3
commit
551cdd56ce
@ -72,6 +72,7 @@ void X86AsmPrinter::emitFunctionHeader(const MachineFunction &MF) {
|
||||
X86COFFMachineModuleInfo &COFFMMI =
|
||||
MMI->getObjFileInfo<X86COFFMachineModuleInfo>();
|
||||
COFFMMI.DecorateCygMingName(CurrentFnName, F, *TM.getTargetData());
|
||||
CurrentFnSym = OutContext.GetOrCreateSymbol(StringRef(CurrentFnName));
|
||||
}
|
||||
|
||||
OutStreamer.SwitchSection(getObjFileLowering().SectionForGlobal(F, Mang, TM));
|
||||
@ -84,7 +85,9 @@ void X86AsmPrinter::emitFunctionHeader(const MachineFunction &MF) {
|
||||
break;
|
||||
case Function::DLLExportLinkage:
|
||||
case Function::ExternalLinkage:
|
||||
O << "\t.globl\t" << CurrentFnName << '\n';
|
||||
O << "\t.globl\t";
|
||||
CurrentFnSym->print(O, MAI);
|
||||
O << '\n';
|
||||
break;
|
||||
case Function::LinkerPrivateLinkage:
|
||||
case Function::LinkOnceAnyLinkage:
|
||||
@ -92,30 +95,41 @@ void X86AsmPrinter::emitFunctionHeader(const MachineFunction &MF) {
|
||||
case Function::WeakAnyLinkage:
|
||||
case Function::WeakODRLinkage:
|
||||
if (Subtarget->isTargetDarwin()) {
|
||||
O << "\t.globl\t" << CurrentFnName << '\n';
|
||||
O << MAI->getWeakDefDirective() << CurrentFnName << '\n';
|
||||
O << "\t.globl\t";
|
||||
CurrentFnSym->print(O, MAI);
|
||||
O << '\n';
|
||||
O << MAI->getWeakDefDirective();
|
||||
CurrentFnSym->print(O, MAI);
|
||||
O << '\n';
|
||||
} else if (Subtarget->isTargetCygMing()) {
|
||||
O << "\t.globl\t" << CurrentFnName << "\n"
|
||||
"\t.linkonce discard\n";
|
||||
O << "\t.globl\t";
|
||||
CurrentFnSym->print(O, MAI);
|
||||
O << "\n\t.linkonce discard\n";
|
||||
} else {
|
||||
O << "\t.weak\t" << CurrentFnName << '\n';
|
||||
O << "\t.weak\t";
|
||||
CurrentFnSym->print(O, MAI);
|
||||
O << '\n';
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
printVisibility(CurrentFnName, F->getVisibility());
|
||||
printVisibility(CurrentFnSym, F->getVisibility());
|
||||
|
||||
if (Subtarget->isTargetELF())
|
||||
O << "\t.type\t" << CurrentFnName << ",@function\n";
|
||||
else if (Subtarget->isTargetCygMing()) {
|
||||
O << "\t.def\t " << CurrentFnName
|
||||
<< ";\t.scl\t" <<
|
||||
if (Subtarget->isTargetELF()) {
|
||||
O << "\t.type\t";
|
||||
CurrentFnSym->print(O, MAI);
|
||||
O << ",@function\n";
|
||||
} else if (Subtarget->isTargetCygMing()) {
|
||||
O << "\t.def\t ";
|
||||
CurrentFnSym->print(O, MAI);
|
||||
O << ";\t.scl\t" <<
|
||||
(F->hasInternalLinkage() ? COFF::C_STAT : COFF::C_EXT)
|
||||
<< ";\t.type\t" << (COFF::DT_FCN << COFF::N_BTSHFT)
|
||||
<< ";\t.endef\n";
|
||||
}
|
||||
|
||||
O << CurrentFnName << ':';
|
||||
CurrentFnSym->print(O, MAI);
|
||||
O << ':';
|
||||
if (VerboseAsm) {
|
||||
O.PadToColumn(MAI->getCommentColumn());
|
||||
O << MAI->getCommentString() << ' ';
|
||||
@ -125,8 +139,11 @@ void X86AsmPrinter::emitFunctionHeader(const MachineFunction &MF) {
|
||||
|
||||
// Add some workaround for linkonce linkage on Cygwin\MinGW
|
||||
if (Subtarget->isTargetCygMing() &&
|
||||
(F->hasLinkOnceLinkage() || F->hasWeakLinkage()))
|
||||
O << "Lllvm$workaround$fake$stub$" << CurrentFnName << ":\n";
|
||||
(F->hasLinkOnceLinkage() || F->hasWeakLinkage())) {
|
||||
O << "Lllvm$workaround$fake$stub$";
|
||||
CurrentFnSym->print(O, MAI);
|
||||
O << ":\n";
|
||||
}
|
||||
}
|
||||
|
||||
/// runOnMachineFunction - This uses the printMachineInstruction()
|
||||
@ -183,8 +200,13 @@ bool X86AsmPrinter::runOnMachineFunction(MachineFunction &MF) {
|
||||
O << "\tnop\n";
|
||||
}
|
||||
|
||||
if (MAI->hasDotTypeDotSizeDirective())
|
||||
O << "\t.size\t" << CurrentFnName << ", .-" << CurrentFnName << '\n';
|
||||
if (MAI->hasDotTypeDotSizeDirective()) {
|
||||
O << "\t.size\t";
|
||||
CurrentFnSym->print(O, MAI);
|
||||
O << ", .-";
|
||||
CurrentFnSym->print(O, MAI);
|
||||
O << '\n';
|
||||
}
|
||||
|
||||
// Emit post-function debug information.
|
||||
if (MAI->doesSupportDebugInformation() || MAI->doesSupportExceptionHandling())
|
||||
|
Loading…
Reference in New Issue
Block a user