mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-14 15:28:20 +00:00
Lift EmitAssignment into MCObjectStreamer which gets rid of at least three
duplicate implementations in format-specific streamers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169613 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -50,7 +50,6 @@ public:
|
|||||||
virtual void EmitLabel(MCSymbol *Symbol);
|
virtual void EmitLabel(MCSymbol *Symbol);
|
||||||
virtual void EmitAssemblerFlag(MCAssemblerFlag Flag);
|
virtual void EmitAssemblerFlag(MCAssemblerFlag Flag);
|
||||||
virtual void EmitThumbFunc(MCSymbol *Func);
|
virtual void EmitThumbFunc(MCSymbol *Func);
|
||||||
virtual void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value);
|
|
||||||
virtual void EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol);
|
virtual void EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol);
|
||||||
virtual void EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute);
|
virtual void EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute);
|
||||||
virtual void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue);
|
virtual void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue);
|
||||||
|
@@ -64,6 +64,7 @@ public:
|
|||||||
/// @{
|
/// @{
|
||||||
|
|
||||||
virtual void EmitLabel(MCSymbol *Symbol);
|
virtual void EmitLabel(MCSymbol *Symbol);
|
||||||
|
virtual void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value);
|
||||||
virtual void EmitValueImpl(const MCExpr *Value, unsigned Size,
|
virtual void EmitValueImpl(const MCExpr *Value, unsigned Size,
|
||||||
unsigned AddrSpace);
|
unsigned AddrSpace);
|
||||||
virtual void EmitULEB128Value(const MCExpr *Value);
|
virtual void EmitULEB128Value(const MCExpr *Value);
|
||||||
|
@@ -100,14 +100,6 @@ void MCELFStreamer::EmitAssemblerFlag(MCAssemblerFlag Flag) {
|
|||||||
llvm_unreachable("invalid assembler flag!");
|
llvm_unreachable("invalid assembler flag!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCELFStreamer::EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
|
|
||||||
// TODO: This is exactly the same as WinCOFFStreamer. Consider merging into
|
|
||||||
// MCObjectStreamer.
|
|
||||||
// FIXME: Lift context changes into super class.
|
|
||||||
getAssembler().getOrCreateSymbolData(*Symbol);
|
|
||||||
Symbol->setVariableValue(AddValueSymbols(Value));
|
|
||||||
}
|
|
||||||
|
|
||||||
void MCELFStreamer::ChangeSection(const MCSection *Section) {
|
void MCELFStreamer::ChangeSection(const MCSection *Section) {
|
||||||
const MCSymbol *Grp = static_cast<const MCSectionELF *>(Section)->getGroup();
|
const MCSymbol *Grp = static_cast<const MCSectionELF *>(Section)->getGroup();
|
||||||
if (Grp)
|
if (Grp)
|
||||||
|
@@ -48,7 +48,6 @@ public:
|
|||||||
virtual void EmitAssemblerFlag(MCAssemblerFlag Flag);
|
virtual void EmitAssemblerFlag(MCAssemblerFlag Flag);
|
||||||
virtual void EmitDataRegion(MCDataRegionType Kind);
|
virtual void EmitDataRegion(MCDataRegionType Kind);
|
||||||
virtual void EmitThumbFunc(MCSymbol *Func);
|
virtual void EmitThumbFunc(MCSymbol *Func);
|
||||||
virtual void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value);
|
|
||||||
virtual void EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute);
|
virtual void EmitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute);
|
||||||
virtual void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue);
|
virtual void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue);
|
||||||
virtual void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
virtual void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
|
||||||
@@ -200,14 +199,6 @@ void MCMachOStreamer::EmitThumbFunc(MCSymbol *Symbol) {
|
|||||||
SD.setFlags(SD.getFlags() | SF_ThumbFunc);
|
SD.setFlags(SD.getFlags() | SF_ThumbFunc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCMachOStreamer::EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
|
|
||||||
// TODO: This is exactly the same as WinCOFFStreamer. Consider merging into
|
|
||||||
// MCObjectStreamer.
|
|
||||||
// FIXME: Lift context changes into super class.
|
|
||||||
getAssembler().getOrCreateSymbolData(*Symbol);
|
|
||||||
Symbol->setVariableValue(AddValueSymbols(Value));
|
|
||||||
}
|
|
||||||
|
|
||||||
void MCMachOStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
|
void MCMachOStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
|
||||||
MCSymbolAttr Attribute) {
|
MCSymbolAttr Attribute) {
|
||||||
// Indirect symbols are handled differently, to match how 'as' handles
|
// Indirect symbols are handled differently, to match how 'as' handles
|
||||||
|
@@ -159,6 +159,11 @@ void MCObjectStreamer::ChangeSection(const MCSection *Section) {
|
|||||||
CurSectionData = &getAssembler().getOrCreateSectionData(*Section);
|
CurSectionData = &getAssembler().getOrCreateSectionData(*Section);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MCObjectStreamer::EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
|
||||||
|
getAssembler().getOrCreateSymbolData(*Symbol);
|
||||||
|
Symbol->setVariableValue(AddValueSymbols(Value));
|
||||||
|
}
|
||||||
|
|
||||||
void MCObjectStreamer::EmitInstruction(const MCInst &Inst) {
|
void MCObjectStreamer::EmitInstruction(const MCInst &Inst) {
|
||||||
// Scan for values.
|
// Scan for values.
|
||||||
for (unsigned i = Inst.getNumOperands(); i--; )
|
for (unsigned i = Inst.getNumOperands(); i--; )
|
||||||
|
@@ -37,7 +37,6 @@ public:
|
|||||||
|
|
||||||
virtual void InitSections();
|
virtual void InitSections();
|
||||||
virtual void EmitLabel(MCSymbol *Symbol);
|
virtual void EmitLabel(MCSymbol *Symbol);
|
||||||
virtual void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value);
|
|
||||||
virtual void EmitZerofill(const MCSection *Section, MCSymbol *Symbol = 0,
|
virtual void EmitZerofill(const MCSection *Section, MCSymbol *Symbol = 0,
|
||||||
uint64_t Size = 0, unsigned ByteAlignment = 0);
|
uint64_t Size = 0, unsigned ByteAlignment = 0);
|
||||||
virtual void EmitBytes(StringRef Data, unsigned AddrSpace);
|
virtual void EmitBytes(StringRef Data, unsigned AddrSpace);
|
||||||
@@ -135,14 +134,6 @@ void MCPureStreamer::EmitLabel(MCSymbol *Symbol) {
|
|||||||
SD.setOffset(F->getContents().size());
|
SD.setOffset(F->getContents().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCPureStreamer::EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
|
|
||||||
// TODO: This is exactly the same as WinCOFFStreamer. Consider merging into
|
|
||||||
// MCObjectStreamer.
|
|
||||||
// FIXME: Lift context changes into super class.
|
|
||||||
getAssembler().getOrCreateSymbolData(*Symbol);
|
|
||||||
Symbol->setVariableValue(AddValueSymbols(Value));
|
|
||||||
}
|
|
||||||
|
|
||||||
void MCPureStreamer::EmitZerofill(const MCSection *Section, MCSymbol *Symbol,
|
void MCPureStreamer::EmitZerofill(const MCSection *Section, MCSymbol *Symbol,
|
||||||
uint64_t Size, unsigned ByteAlignment) {
|
uint64_t Size, unsigned ByteAlignment) {
|
||||||
report_fatal_error("not yet implemented in pure streamer");
|
report_fatal_error("not yet implemented in pure streamer");
|
||||||
|
@@ -193,8 +193,6 @@ void WinCOFFStreamer::EmitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
|
|||||||
// don't really even do.
|
// don't really even do.
|
||||||
|
|
||||||
if (Value->getKind() != MCExpr::SymbolRef) {
|
if (Value->getKind() != MCExpr::SymbolRef) {
|
||||||
// TODO: This is exactly the same as MachOStreamer. Consider merging into
|
|
||||||
// MCObjectStreamer.
|
|
||||||
getAssembler().getOrCreateSymbolData(*Symbol);
|
getAssembler().getOrCreateSymbolData(*Symbol);
|
||||||
AddValueSymbols(Value);
|
AddValueSymbols(Value);
|
||||||
Symbol->setVariableValue(Value);
|
Symbol->setVariableValue(Value);
|
||||||
|
Reference in New Issue
Block a user