[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