Changes in directory llvm/lib/Target/X86:
X86AsmPrinter.cpp updated: 1.217 -> 1.218 --- Log message: A initialized global variable cannot be extern weak. However, if a global value's initializer is itself a external weak symbol, emit the weak reference. --- Diffs of the changes: (+6 -11) X86AsmPrinter.cpp | 17 ++++++----------- 1 files changed, 6 insertions(+), 11 deletions(-) Index: llvm/lib/Target/X86/X86AsmPrinter.cpp diff -u llvm/lib/Target/X86/X86AsmPrinter.cpp:1.217 llvm/lib/Target/X86/X86AsmPrinter.cpp:1.218 --- llvm/lib/Target/X86/X86AsmPrinter.cpp:1.217 Fri Dec 1 01:38:23 2006 +++ llvm/lib/Target/X86/X86AsmPrinter.cpp Fri Dec 1 03:10:28 2006 @@ -177,17 +177,6 @@ O << "\t\t" << TAI->getCommentString() << " " << I->getName() << "\n"; } else { switch (I->getLinkage()) { - case GlobalValue::ExternalWeakLinkage: - if (Subtarget->isTargetDarwin()) { - assert(0 && "External weak linkage for Darwin not implemented yet"); - } else if (Subtarget->isTargetCygwin()) { - // There is no external weak linkage on Mingw32 platform. - // Defaulting just to external - O << "\t.globl " << name << "\n"; - } else { - O << "\t.weak " << name << "\n"; - break; - } case GlobalValue::LinkOnceLinkage: case GlobalValue::WeakLinkage: if (Subtarget->isTargetDarwin()) { @@ -257,6 +246,12 @@ if (TAI->hasDotTypeDotSizeDirective()) O << "\t.size " << name << ", " << Size << "\n"; + // If the initializer is a extern weak symbol, remember to emit the weak + // reference! + if (const GlobalValue *GV = dyn_cast<GlobalValue>(C)) + if (GV->hasExternalWeakLinkage()) + ExtWeakSymbols.insert(Mang->getValueName(GV)); + EmitGlobalConstant(C); O << '\n'; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits