summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/X86/X86AsmPrinter.cpp
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2006-10-18 09:12:29 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2006-10-18 09:12:29 +0000
commit24b7ac303cadf1ec7bf0256403d1750496628c2c (patch)
tree2a5facd7c6728ef0364c8f535e7f04eaa9297726 /llvm/lib/Target/X86/X86AsmPrinter.cpp
parent7a312481a60e99a2199bcafc0d6d094d962dd45e (diff)
downloadbcm5719-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.cpp16
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.
OpenPOWER on IntegriCloud