[LLVMdev] [patch] print ".weak" directive

Chris Lattner sabre at nondot.org
Thu Dec 7 22:05:10 PST 2006


On Thu, 7 Dec 2006, [UTF-8] Rafael Esp?ndola wrote:
> The attached patch makes the ASM printer print the ".weak" directive
> when a weak symbol is added to a constant pool.
>
> I need something similar to it in order to bootstrap gcc on ARM.

--- lib/CodeGen/AsmPrinter.cpp  7 Dec 2006 01:30:31 -0000       1.120
+++ lib/CodeGen/AsmPrinter.cpp  7 Dec 2006 13:00:17 -0000
@@ -640,6 +640,13 @@
    printDataDirective(type);
    EmitConstantValueOnly(CV);
    O << "\n";
+  if (const GlobalValue *GV = dyn_cast<GlobalValue>(CV)) {
+    if (GV->hasWeakLinkage() || GV->hasExternalWeakLinkage()) {
+      O << TAI->getWeakRefDirective();
+      EmitConstantValueOnly(CV);
+      O << "\n";
+    }
+  }
  }

The approach looks good, but why do you need both 'hasWeak' and 
'hasExternalWeak' here?  It seems that this should only check the external 
weak case.

I think what we really want is for the asmprinter base-class to call a 
virtual method when it sees external weak uses.  This would allow the 
asmprinter implementation to add it to the set of things that a .weak 
directive needs to be emitted for.  That way we'd only get one .weak 
directive for a global, instead of one per use.

Thoughts?

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/



More information about the llvm-dev mailing list