summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/X86/X86ATTAsmPrinter.cpp')
-rwxr-xr-xllvm/lib/Target/X86/X86ATTAsmPrinter.cpp20
1 files changed, 7 insertions, 13 deletions
diff --git a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
index bb6bb3dbc13..dc2ecca7cb4 100755
--- a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
+++ b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
@@ -40,7 +40,7 @@ std::string X86ATTAsmPrinter::getSectionForFunction(const Function &F) const {
if (Subtarget->isTargetDarwin()) {
return ".section __TEXT,__textcoal_nt,coalesced,pure_instructions";
} else if (Subtarget->isTargetCygwin()) {
- return "\t.section\t.llvm.linkonce.t." + CurrentFnName + ",\"ax\"\n";
+ return "\t.section\t.text$linkonce." + CurrentFnName + ",\"ax\"\n";
} else {
return "\t.section\t.llvm.linkonce.t." + CurrentFnName +
",\"ax\",@progbits\n";
@@ -90,6 +90,7 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
O << "\t.globl\t" << CurrentFnName << "\n";
break;
case Function::LinkOnceLinkage:
+ case Function::WeakLinkage:
if (Subtarget->isTargetDarwin()) {
O << "\t.globl\t" << CurrentFnName << "\n";
O << "\t.weak_definition\t" << CurrentFnName << "\n";
@@ -102,20 +103,13 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
O << "\t.weak " << CurrentFnName << "\n";
}
break;
- case Function::WeakLinkage:
- if (Subtarget->isTargetDarwin()) {
- O << "\t.globl\t" << CurrentFnName << "\n";
- O << "\t.weak_definition\t" << CurrentFnName << "\n";
- } else if (Subtarget->isTargetCygwin()) {
- EmitAlignment(4, F); // FIXME: This should be parameterized somewhere.
- O << "\t.weak " << CurrentFnName << "\n";
- } else {
- EmitAlignment(4, F); // FIXME: This should be parameterized somewhere.
- O << "\t.weak " << CurrentFnName << "\n";
- }
- break;
}
O << CurrentFnName << ":\n";
+ // Add some workaround for linkonce linkage on Cygwin\MinGW
+ if (Subtarget->isTargetCygwin() &&
+ (F->getLinkage() == Function::LinkOnceLinkage ||
+ F->getLinkage() == Function::WeakLinkage))
+ O << "_llvm$workaround$fake$stub_" << CurrentFnName << ":\n";
if (Subtarget->isTargetDarwin()) {
// Emit pre-function debug information.
OpenPOWER on IntegriCloud