Adding linkonce linkage codegeneration support for mingw32\cygwin
authorAnton Korobeynikov <asl@math.spbu.ru>
Tue, 17 Oct 2006 20:29:49 +0000 (20:29 +0000)
committerAnton Korobeynikov <asl@math.spbu.ru>
Tue, 17 Oct 2006 20:29:49 +0000 (20:29 +0000)
targets.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31011 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ATTAsmPrinter.cpp
lib/Target/X86/X86AsmPrinter.cpp

index eef95d935d1dde7dd011a7080767626394132579..bb6bb3dbc1334a2636597c2cbdfa0a00bba6a543 100755 (executable)
@@ -89,8 +89,20 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
     EmitAlignment(4, F);     // FIXME: This should be parameterized somewhere.
     O << "\t.globl\t" << CurrentFnName << "\n";    
     break;
-  case Function::WeakLinkage:
   case Function::LinkOnceLinkage:
+    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.linkonce discard\n";
+      O << "\t.globl " << CurrentFnName << "\n";
+    } else {
+      EmitAlignment(4, F);     // FIXME: This should be parameterized somewhere.
+      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";
index 829219dac5bc0d9b8c9fedf47c6599cacc3f1754..2a3a2aaed441a2dc4ea39be7f89b77b6ec3b29ef 100644 (file)
@@ -174,6 +174,19 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {
     } else {
       switch (I->getLinkage()) {
       case GlobalValue::LinkOnceLinkage:
+        if (Subtarget->isTargetDarwin()) {
+          O << "\t.globl " << name << "\n"
+            << "\t.weak_definition " << name << "\n";
+          SwitchToDataSection(".section __DATA,__const_coal,coalesced", I);
+        } else if (Subtarget->isTargetCygwin()) {
+          O << "\t.section\t.llvm.linkonce.d." << name << ",\"aw\"\n"
+            << "\t.globl " << name << "\n"
+            << "\t.linkonce same_size\n";
+        } else {
+          O << "\t.section\t.llvm.linkonce.d." << name << ",\"aw\",@progbits\n"
+            << "\t.weak " << name << "\n";
+        }
+        break;
       case GlobalValue::WeakLinkage:
         if (Subtarget->isTargetDarwin()) {
           O << "\t.globl " << name << "\n"