Anton, are you sure this is right? linkonce is probably != ".linkonce". Please check the semantics carefully, can you cite some docs on what ".linkonce" does?
Emitting LLVM linkonce symbols the same as LLVM weak symbols should always be safe. Thanks, -Chris On Oct 17, 2006, at 1:30 PM, Anton Korobeynikov wrote: > > > Changes in directory llvm/lib/Target/X86: > > X86ATTAsmPrinter.cpp updated: 1.67 -> 1.68 > X86AsmPrinter.cpp updated: 1.201 -> 1.202 > --- > Log message: > > Adding linkonce linkage codegeneration support for mingw32\cygwin > targets. > > > --- > Diffs of the changes: (+26 -1) > > X86ATTAsmPrinter.cpp | 14 +++++++++++++- > X86AsmPrinter.cpp | 13 +++++++++++++ > 2 files changed, 26 insertions(+), 1 deletion(-) > > > Index: llvm/lib/Target/X86/X86ATTAsmPrinter.cpp > diff -u llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.67 llvm/lib/ > Target/X86/X86ATTAsmPrinter.cpp:1.68 > --- llvm/lib/Target/X86/X86ATTAsmPrinter.cpp:1.67 Wed Oct 4 > 22:01:21 2006 > +++ llvm/lib/Target/X86/X86ATTAsmPrinter.cpp Tue Oct 17 15:29:49 2006 > @@ -89,13 +89,25 @@ > 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"; > + } 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. > > > Index: llvm/lib/Target/X86/X86AsmPrinter.cpp > diff -u llvm/lib/Target/X86/X86AsmPrinter.cpp:1.201 llvm/lib/Target/ > X86/X86AsmPrinter.cpp:1.202 > --- llvm/lib/Target/X86/X86AsmPrinter.cpp:1.201 Sat Oct 14 15:53:35 > 2006 > +++ llvm/lib/Target/X86/X86AsmPrinter.cpp Tue Oct 17 15:29:49 2006 > @@ -174,6 +174,19 @@ > } 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" > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits