diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2006-10-19 13:30:40 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2006-10-19 13:30:40 +0000 |
commit | ea67b973c2308ab34aa4979cc75cc6b5e9e02c3d (patch) | |
tree | 2650e8e95f4a1f50618caff9f707c3bb51338829 /llvm/lib/Target/ARM | |
parent | ff62819e2fdd0d3c1e11c981edfaaab33ce12d7b (diff) | |
download | bcm5719-llvm-ea67b973c2308ab34aa4979cc75cc6b5e9e02c3d.tar.gz bcm5719-llvm-ea67b973c2308ab34aa4979cc75cc6b5e9e02c3d.zip |
print common symbols
llvm-svn: 31048
Diffstat (limited to 'llvm/lib/Target/ARM')
-rw-r--r-- | llvm/lib/Target/ARM/ARMAsmPrinter.cpp | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp index f67f39aa7d0..aa465cc24f8 100644 --- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp @@ -278,26 +278,42 @@ bool ARMAsmPrinter::doFinalization(Module &M) { unsigned Size = TD->getTypeSize(C->getType()); unsigned Align = TD->getTypeAlignment(C->getType()); - switch (I->getLinkage()) { - default: - assert(0 && "Unknown linkage type!"); - break; - case GlobalValue::ExternalLinkage: - O << "\t.globl " << name << "\n"; - break; - case GlobalValue::InternalLinkage: - break; - } + if (C->isNullValue() && + (I->hasLinkOnceLinkage() || I->hasInternalLinkage() || + I->hasWeakLinkage())) { + SwitchToDataSection(".data", I); + if (I->hasInternalLinkage()) + O << "\t.local " << name << "\n"; + + O << "\t.comm " << name << "," << TD->getTypeSize(C->getType()) + << "," << (unsigned)TD->getTypeAlignment(C->getType()); + O << "\t\t"; + O << TAI->getCommentString() << " "; + WriteAsOperand(O, I, true, true, &M); + O << "\n"; + } else { + switch (I->getLinkage()) { + default: + assert(0 && "Unknown linkage type!"); + break; + case GlobalValue::ExternalLinkage: + O << "\t.globl " << name << "\n"; + break; + case GlobalValue::InternalLinkage: + break; + } - assert (!C->isNullValue()); - SwitchToDataSection(".data", I); + assert (!C->isNullValue()); + SwitchToDataSection(".data", I); - EmitAlignment(Align, I); - O << "\t.type " << name << ", %object\n"; - O << "\t.size " << name << ", " << Size << "\n"; - O << name << ":\n"; - EmitGlobalConstant(C); + EmitAlignment(Align, I); + O << "\t.type " << name << ", %object\n"; + O << "\t.size " << name << ", " << Size << "\n"; + O << name << ":\n"; + EmitGlobalConstant(C); + } } + AsmPrinter::doFinalization(M); return false; // success } |