forked from OSchip/llvm-project
zap the ARM version of PrintGlobalVariable, which I missed.
llvm-svn: 93863
This commit is contained in:
parent
5204248f96
commit
00fa4b67e6
|
@ -159,7 +159,6 @@ namespace {
|
||||||
unsigned AsmVariant,
|
unsigned AsmVariant,
|
||||||
const char *ExtraCode);
|
const char *ExtraCode);
|
||||||
|
|
||||||
void PrintGlobalVariable(const GlobalVariable* GVar);
|
|
||||||
void printInstruction(const MachineInstr *MI); // autogenerated.
|
void printInstruction(const MachineInstr *MI); // autogenerated.
|
||||||
static const char *getRegisterName(unsigned RegNo);
|
static const char *getRegisterName(unsigned RegNo);
|
||||||
|
|
||||||
|
@ -1164,118 +1163,6 @@ void ARMAsmPrinter::EmitStartOfAsmFile(Module &M) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ARMAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
|
|
||||||
const TargetData *TD = TM.getTargetData();
|
|
||||||
|
|
||||||
MCSymbol *GVarSym = GetGlobalValueSymbol(GVar);
|
|
||||||
|
|
||||||
Constant *C = GVar->getInitializer();
|
|
||||||
const Type *Type = C->getType();
|
|
||||||
unsigned Size = TD->getTypeAllocSize(Type);
|
|
||||||
unsigned Align = TD->getPreferredAlignmentLog(GVar);
|
|
||||||
printVisibility(GVarSym, GVar->getVisibility());
|
|
||||||
|
|
||||||
if (MAI->hasDotTypeDotSizeDirective())
|
|
||||||
O << "\t.type " << *GVarSym << ",%object\n";
|
|
||||||
|
|
||||||
SectionKind GVKind = TargetLoweringObjectFile::getKindForGlobal(GVar, TM);
|
|
||||||
|
|
||||||
// Handle normal common symbols.
|
|
||||||
if (GVKind.isCommon()) {
|
|
||||||
if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it.
|
|
||||||
|
|
||||||
O << ".comm " << *GVarSym << ',' << Size;
|
|
||||||
if (MAI->getCOMMDirectiveTakesAlignment())
|
|
||||||
O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << Align) : Align);
|
|
||||||
|
|
||||||
if (VerboseAsm) {
|
|
||||||
O << "\t\t" << MAI->getCommentString() << " '";
|
|
||||||
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
|
|
||||||
O << '\'';
|
|
||||||
}
|
|
||||||
O << '\n';
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GVKind.isBSSLocal()) {
|
|
||||||
if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it.
|
|
||||||
|
|
||||||
if (const char *LCOMM = MAI->getLCOMMDirective()) {
|
|
||||||
O << LCOMM << *GVarSym << "," << Size;
|
|
||||||
if (MAI->getLCOMMDirectiveTakesAlignment())
|
|
||||||
O << ',' << Align;
|
|
||||||
} else {
|
|
||||||
O << "\t.local\t" << *GVarSym << '\n';
|
|
||||||
O << MAI->getCOMMDirective() << *GVarSym << "," << Size;
|
|
||||||
if (MAI->getCOMMDirectiveTakesAlignment())
|
|
||||||
O << "," << (MAI->getAlignmentIsInBytes() ? (1 << Align) : Align);
|
|
||||||
}
|
|
||||||
if (VerboseAsm) {
|
|
||||||
O.PadToColumn(MAI->getCommentColumn());
|
|
||||||
O << MAI->getCommentString() << ' ';
|
|
||||||
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
|
|
||||||
}
|
|
||||||
O << "\n";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const MCSection *TheSection =
|
|
||||||
getObjFileLowering().SectionForGlobal(GVar, GVKind, Mang, TM);
|
|
||||||
|
|
||||||
// Handle the zerofill directive on darwin, which is a special form of BSS
|
|
||||||
// emission.
|
|
||||||
if (GVKind.isBSSExtern() && MAI->hasMachoZeroFillDirective()) {
|
|
||||||
// .globl _foo
|
|
||||||
OutStreamer.EmitSymbolAttribute(GVarSym, MCStreamer::Global);
|
|
||||||
// .zerofill __DATA, __common, _foo, 400, 5
|
|
||||||
OutStreamer.EmitZerofill(TheSection, GVarSym, Size, 1 << Align);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
OutStreamer.SwitchSection(TheSection);
|
|
||||||
|
|
||||||
switch (GVar->getLinkage()) {
|
|
||||||
case GlobalValue::CommonLinkage:
|
|
||||||
case GlobalValue::LinkOnceAnyLinkage:
|
|
||||||
case GlobalValue::LinkOnceODRLinkage:
|
|
||||||
case GlobalValue::WeakAnyLinkage:
|
|
||||||
case GlobalValue::WeakODRLinkage:
|
|
||||||
case GlobalValue::LinkerPrivateLinkage:
|
|
||||||
if (Subtarget->isTargetDarwin()) {
|
|
||||||
O << "\t.globl " << *GVarSym
|
|
||||||
<< "\n\t.weak_definition " << *GVarSym << "\n";
|
|
||||||
} else {
|
|
||||||
O << "\t.weak " << *GVarSym << "\n";
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case GlobalValue::AppendingLinkage:
|
|
||||||
// FIXME: appending linkage variables should go into a section of
|
|
||||||
// their name or something. For now, just emit them as external.
|
|
||||||
case GlobalValue::ExternalLinkage:
|
|
||||||
O << "\t.globl " << *GVarSym << "\n";
|
|
||||||
break;
|
|
||||||
case GlobalValue::PrivateLinkage:
|
|
||||||
case GlobalValue::InternalLinkage:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
llvm_unreachable("Unknown linkage type!");
|
|
||||||
}
|
|
||||||
|
|
||||||
EmitAlignment(Align, GVar);
|
|
||||||
O << *GVarSym << ":";
|
|
||||||
if (VerboseAsm) {
|
|
||||||
O.PadToColumn(MAI->getCommentColumn());
|
|
||||||
O << MAI->getCommentString() << ' ';
|
|
||||||
WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
|
|
||||||
}
|
|
||||||
O << "\n";
|
|
||||||
if (MAI->hasDotTypeDotSizeDirective())
|
|
||||||
O << "\t.size " << *GVarSym << ", " << Size << "\n";
|
|
||||||
|
|
||||||
EmitGlobalConstant(C);
|
|
||||||
O << '\n';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ARMAsmPrinter::EmitEndOfAsmFile(Module &M) {
|
void ARMAsmPrinter::EmitEndOfAsmFile(Module &M) {
|
||||||
if (Subtarget->isTargetDarwin()) {
|
if (Subtarget->isTargetDarwin()) {
|
||||||
|
|
Loading…
Reference in New Issue