llvm-mc: Emit .lcomm as .zerofill.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80343 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Dunbar 2009-08-28 05:48:46 +00:00
parent 2e15292659
commit e6cdbf2f92
7 changed files with 18 additions and 17 deletions

View File

@ -152,9 +152,8 @@ namespace llvm {
/// @param Symbol - The common symbol to emit.
/// @param Size - The size of the common symbol.
/// @param Pow2Alignment - The alignment of the common symbol if non-zero.
/// @param IsLocal - If true, then the symbol is to be a local common
virtual void EmitCommonSymbol(MCSymbol *Symbol, unsigned Size,
unsigned Pow2Alignment, bool IsLocal) = 0;
unsigned Pow2Alignment) = 0;
/// EmitZerofill - Emit a the zerofill section and possiblity a symbol, if
/// @param Symbol is non-NULL, for @param Size and with the @param

View File

@ -56,7 +56,7 @@ public:
virtual void EmitLocalSymbol(MCSymbol *Symbol, const MCValue &Value);
virtual void EmitCommonSymbol(MCSymbol *Symbol, unsigned Size,
unsigned Pow2Alignment, bool IsLocal);
unsigned Pow2Alignment);
virtual void EmitZerofill(const MCSection *Section, MCSymbol *Symbol = 0,
unsigned Size = 0, unsigned Pow2Alignment = 0);
@ -178,11 +178,8 @@ void MCAsmStreamer::EmitLocalSymbol(MCSymbol *Symbol, const MCValue &Value) {
}
void MCAsmStreamer::EmitCommonSymbol(MCSymbol *Symbol, unsigned Size,
unsigned Pow2Alignment, bool IsLocal) {
if (IsLocal)
OS << ".lcomm";
else
OS << ".comm";
unsigned Pow2Alignment) {
OS << ".comm";
OS << ' ' << Symbol << ',' << Size;
if (Pow2Alignment != 0)
OS << ',' << Pow2Alignment;

View File

@ -105,7 +105,7 @@ public:
virtual void EmitLocalSymbol(MCSymbol *Symbol, const MCValue &Value);
virtual void EmitCommonSymbol(MCSymbol *Symbol, unsigned Size,
unsigned Pow2Alignment, bool IsLocal);
unsigned Pow2Alignment);
virtual void EmitZerofill(const MCSection *Section, MCSymbol *Symbol = 0,
unsigned Size = 0, unsigned Pow2Alignment = 0);
@ -268,8 +268,7 @@ void MCMachOStreamer::EmitLocalSymbol(MCSymbol *Symbol, const MCValue &Value) {
}
void MCMachOStreamer::EmitCommonSymbol(MCSymbol *Symbol, unsigned Size,
unsigned Pow2Alignment,
bool IsLocal) {
unsigned Pow2Alignment) {
llvm_unreachable("FIXME: Not yet implemented!");
}

View File

@ -44,7 +44,7 @@ namespace {
virtual void EmitLocalSymbol(MCSymbol *Symbol, const MCValue &Value) {}
virtual void EmitCommonSymbol(MCSymbol *Symbol, unsigned Size,
unsigned Pow2Alignment, bool IsLocal) {}
unsigned Pow2Alignment) {}
virtual void EmitZerofill(const MCSection *Section, MCSymbol *Symbol = 0,
unsigned Size = 0, unsigned Pow2Alignment = 0) {}

View File

@ -1,9 +1,9 @@
# RUN: llvm-mc -triple i386-unknown-unknown %s | FileCheck %s
# CHECK: TEST0:
# CHECK: .lcomm a,7,4
# CHECK: .lcomm b,8
# CHECK: .lcomm c,0
# CHECK: .zerofill __DATA,__bss,a,7,4
# CHECK: .zerofill __DATA,__bss,b,8
# CHECK: .zerofill __DATA,__bss,c,0
TEST0:
.lcomm a, 8-1, 4
.lcomm b,8

View File

@ -44,7 +44,7 @@ foo:
// CHECK: .comm "a 6",1
.comm "a 6", 1
// CHECK: .lcomm "a 7",1
// CHECK: .zerofill __DATA,__bss,"a 7",1
.lcomm "a 7", 1
// CHECK: .lsym "a 8",1

View File

@ -1258,7 +1258,13 @@ bool AsmParser::ParseDirectiveComm(bool IsLocal) {
return Error(IDLoc, "invalid symbol redefinition");
// Create the Symbol as a common or local common with Size and Pow2Alignment
Out.EmitCommonSymbol(Sym, Size, Pow2Alignment, IsLocal);
if (IsLocal)
Out.EmitZerofill(getMachOSection("__DATA", "__bss",
MCSectionMachO::S_ZEROFILL, 0,
SectionKind()),
Sym, Size, Pow2Alignment);
else
Out.EmitCommonSymbol(Sym, Size, Pow2Alignment);
return false;
}