mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-12 07:37:34 +00:00
emit the .size directive for global variables on ELF through
mcstreamer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94416 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5c78034bc8
commit
99328add83
@ -129,6 +129,14 @@ namespace llvm {
|
||||
/// @param DescValue - The value to set into the n_desc field.
|
||||
virtual void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) = 0;
|
||||
|
||||
|
||||
/// EmitELFSize - Emit an ELF .size directive.
|
||||
///
|
||||
/// This corresponds to an assembler statement such as:
|
||||
/// .size symbol, expression
|
||||
///
|
||||
virtual void EmitELFSize(MCSymbol *Symbol, const MCExpr *Value) = 0;
|
||||
|
||||
/// EmitCommonSymbol - Emit a common symbol.
|
||||
///
|
||||
/// @param Symbol - The common symbol to emit.
|
||||
|
@ -275,7 +275,7 @@ void AsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) {
|
||||
EmitGlobalConstant(GV->getInitializer());
|
||||
|
||||
if (MAI->hasDotTypeDotSizeDirective())
|
||||
O << "\t.size\t" << *GVSym << ", " << Size << '\n';
|
||||
OutStreamer.EmitELFSize(GVSym, MCConstantExpr::Create(Size, OutContext));
|
||||
|
||||
OutStreamer.AddBlankLine();
|
||||
}
|
||||
|
@ -93,6 +93,7 @@ public:
|
||||
|
||||
virtual void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue);
|
||||
|
||||
virtual void EmitELFSize(MCSymbol *Symbol, const MCExpr *Value);
|
||||
virtual void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
||||
unsigned ByteAlignment);
|
||||
|
||||
@ -251,6 +252,11 @@ void MCAsmStreamer::EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) {
|
||||
EmitEOL();
|
||||
}
|
||||
|
||||
void MCAsmStreamer::EmitELFSize(MCSymbol *Symbol, const MCExpr *Value) {
|
||||
assert(MAI.hasDotTypeDotSizeDirective());
|
||||
OS << "\t.size\t" << *Symbol << ", " << *Value << '\n';
|
||||
}
|
||||
|
||||
void MCAsmStreamer::EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
||||
unsigned ByteAlignment) {
|
||||
OS << "\t.comm\t" << *Symbol << ',' << Size;
|
||||
|
@ -124,6 +124,9 @@ public:
|
||||
virtual void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue);
|
||||
virtual void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
||||
unsigned ByteAlignment);
|
||||
virtual void EmitELFSize(MCSymbol *Symbol, const MCExpr *Value) {
|
||||
assert(0 && "macho doesn't support this directive");
|
||||
}
|
||||
virtual void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size) {
|
||||
assert(0 && "macho doesn't support this directive");
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ namespace {
|
||||
virtual void EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute){}
|
||||
|
||||
virtual void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue) {}
|
||||
|
||||
virtual void EmitELFSize(MCSymbol *Symbol, const MCExpr *Value) {}
|
||||
virtual void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
||||
unsigned ByteAlignment) {}
|
||||
virtual void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size) {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user