diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2006-10-18 09:12:29 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2006-10-18 09:12:29 +0000 |
commit | 24b7ac303cadf1ec7bf0256403d1750496628c2c (patch) | |
tree | 2a5facd7c6728ef0364c8f535e7f04eaa9297726 /llvm/lib/Target/X86/X86AsmPrinter.cpp | |
parent | 7a312481a60e99a2199bcafc0d6d094d962dd45e (diff) | |
download | bcm5719-llvm-24b7ac303cadf1ec7bf0256403d1750496628c2c.tar.gz bcm5719-llvm-24b7ac303cadf1ec7bf0256403d1750496628c2c.zip |
Fixed mingw\cygwin linkonce linkage once again.
Added workaround for linker bug with linkonce sections.
Changed sections prefix to allow linker merge them
(PE loader doesn't like too much long-named sections :) )
All of this unbreaks libstdc++ on mingw32 allowing (small)
programs to be compiled, linked and run.
llvm-svn: 31033
Diffstat (limited to 'llvm/lib/Target/X86/X86AsmPrinter.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86AsmPrinter.cpp | 16 |
1 files changed, 2 insertions, 14 deletions
diff --git a/llvm/lib/Target/X86/X86AsmPrinter.cpp b/llvm/lib/Target/X86/X86AsmPrinter.cpp index 2a3a2aaed44..bab80dbd443 100644 --- a/llvm/lib/Target/X86/X86AsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86AsmPrinter.cpp @@ -174,12 +174,13 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) { } else { switch (I->getLinkage()) { case GlobalValue::LinkOnceLinkage: + case GlobalValue::WeakLinkage: 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" + O << "\t.section\t.data$linkonce." << name << ",\"aw\"\n" << "\t.globl " << name << "\n" << "\t.linkonce same_size\n"; } else { @@ -187,19 +188,6 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) { << "\t.weak " << name << "\n"; } break; - case GlobalValue::WeakLinkage: - 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.weak " << name << "\n"; - } else { - O << "\t.section\t.llvm.linkonce.d." << name << ",\"aw\",@progbits\n" - << "\t.weak " << name << "\n"; - } - break; case GlobalValue::AppendingLinkage: // FIXME: appending linkage variables should go into a section of // their name or something. For now, just emit them as external. |