mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-17 06:33:21 +00:00
MC: permit emitting a symbol value as section relative
This adds an optional parameter to the EmitSymbolValue method in MCStreamer to permit emitting a symbol value as a section relative value. This is to cover the use in MCDwarf which should not really know about how to emit a section relative value for a given target. This addresses post-review comments from Eric Christopher in SVN r213275. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213463 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f7a4b7a676
commit
ac1b5f177b
@ -572,7 +572,8 @@ public:
|
|||||||
|
|
||||||
/// EmitSymbolValue - Special case of EmitValue that avoids the client
|
/// EmitSymbolValue - Special case of EmitValue that avoids the client
|
||||||
/// having to pass in a MCExpr for MCSymbols.
|
/// having to pass in a MCExpr for MCSymbols.
|
||||||
void EmitSymbolValue(const MCSymbol *Sym, unsigned Size);
|
void EmitSymbolValue(const MCSymbol *Sym, unsigned Size,
|
||||||
|
bool IsSectionRelative = false);
|
||||||
|
|
||||||
/// EmitGPRel64Value - Emit the expression @p Value into the output as a
|
/// EmitGPRel64Value - Emit the expression @p Value into the output as a
|
||||||
/// gprel64 (64-bit GP relative) value.
|
/// gprel64 (64-bit GP relative) value.
|
||||||
|
@ -655,14 +655,14 @@ static void EmitGenDwarfInfo(MCStreamer *MCOS,
|
|||||||
// The 2 byte DWARF version.
|
// The 2 byte DWARF version.
|
||||||
MCOS->EmitIntValue(context.getDwarfVersion(), 2);
|
MCOS->EmitIntValue(context.getDwarfVersion(), 2);
|
||||||
|
|
||||||
|
const MCAsmInfo &AsmInfo = *context.getAsmInfo();
|
||||||
// The 4 byte offset to the debug abbrevs from the start of the .debug_abbrev,
|
// The 4 byte offset to the debug abbrevs from the start of the .debug_abbrev,
|
||||||
// it is at the start of that section so this is zero.
|
// it is at the start of that section so this is zero.
|
||||||
if (AbbrevSectionSymbol == nullptr)
|
if (AbbrevSectionSymbol == nullptr)
|
||||||
MCOS->EmitIntValue(0, 4);
|
MCOS->EmitIntValue(0, 4);
|
||||||
else if (context.getAsmInfo()->needsDwarfSectionOffsetDirective())
|
|
||||||
MCOS->EmitCOFFSecRel32(AbbrevSectionSymbol);
|
|
||||||
else
|
else
|
||||||
MCOS->EmitSymbolValue(AbbrevSectionSymbol, 4);
|
MCOS->EmitSymbolValue(AbbrevSectionSymbol, 4,
|
||||||
|
AsmInfo.needsDwarfSectionOffsetDirective());
|
||||||
|
|
||||||
const MCAsmInfo *asmInfo = context.getAsmInfo();
|
const MCAsmInfo *asmInfo = context.getAsmInfo();
|
||||||
int AddrSize = asmInfo->getPointerSize();
|
int AddrSize = asmInfo->getPointerSize();
|
||||||
|
@ -148,8 +148,15 @@ void MCStreamer::EmitValue(const MCExpr *Value, unsigned Size,
|
|||||||
EmitValueImpl(Value, Size, Loc);
|
EmitValueImpl(Value, Size, Loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCStreamer::EmitSymbolValue(const MCSymbol *Sym, unsigned Size) {
|
void MCStreamer::EmitSymbolValue(const MCSymbol *Sym, unsigned Size,
|
||||||
EmitValueImpl(MCSymbolRefExpr::Create(Sym, getContext()), Size);
|
bool IsSectionRelative) {
|
||||||
|
assert((!IsSectionRelative || Size == 4) &&
|
||||||
|
"SectionRelative value requires 4-bytes");
|
||||||
|
|
||||||
|
if (!IsSectionRelative)
|
||||||
|
EmitValueImpl(MCSymbolRefExpr::Create(Sym, getContext()), Size);
|
||||||
|
else
|
||||||
|
EmitCOFFSecRel32(Sym);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCStreamer::EmitGPRel64Value(const MCExpr *Value) {
|
void MCStreamer::EmitGPRel64Value(const MCExpr *Value) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user