[llvm-commits] CVS: llvm/lib/Target/X86/X86AsmPrinter.cpp

Evan Cheng evan.cheng at apple.com
Fri Dec 1 01:10:49 PST 2006



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';
     }






More information about the llvm-commits mailing list