summaryrefslogtreecommitdiff
path: root/lib/MC/MCAssembler.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-12-17 02:45:59 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-12-17 02:45:59 +0000
commit5d2477cecf53bef911f57423a5cecb743d4286fa (patch)
tree8262c25e63814c02fe8c40041e68e9aaf49ce500 /lib/MC/MCAssembler.cpp
parentfeb7ba3d9abfa1eb89f6da93c51649baaa931ab8 (diff)
downloadllvm-5d2477cecf53bef911f57423a5cecb743d4286fa.tar.gz
llvm-5d2477cecf53bef911f57423a5cecb743d4286fa.tar.bz2
llvm-5d2477cecf53bef911f57423a5cecb743d4286fa.tar.xz
MC/Assembler: Strip out object writer arguments, now that it is always available
-- and remove FIXME asking for the same! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122032 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCAssembler.cpp')
-rw-r--r--lib/MC/MCAssembler.cpp85
1 files changed, 36 insertions, 49 deletions
diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp
index f91dc53c02..0a9783d885 100644
--- a/lib/MC/MCAssembler.cpp
+++ b/lib/MC/MCAssembler.cpp
@@ -210,8 +210,7 @@ const MCSymbolData *MCAssembler::getAtom(const MCSymbolData *SD) const {
return SD->getFragment()->getAtom();
}
-bool MCAssembler::EvaluateFixup(const MCObjectWriter &Writer,
- const MCAsmLayout &Layout,
+bool MCAssembler::EvaluateFixup(const MCAsmLayout &Layout,
const MCFixup &Fixup, const MCFragment *DF,
MCValue &Target, uint64_t &Value) const {
++stats::EvaluateFixup;
@@ -247,7 +246,7 @@ bool MCAssembler::EvaluateFixup(const MCObjectWriter &Writer,
}
if (IsResolved)
- IsResolved = Writer.IsFixupFullyResolved(*this, Target, IsPCRel, DF);
+ IsResolved = getWriter().IsFixupFullyResolved(*this, Target, IsPCRel, DF);
bool ShouldAlignPC = Backend.getFixupKindInfo(Fixup.getKind()).Flags &
MCFixupKindInfo::FKF_IsAlignedDownTo32Bits;
@@ -322,7 +321,8 @@ void MCAsmLayout::LayoutFragment(MCFragment *F) {
/// WriteFragmentData - Write the \arg F data to the output file.
static void WriteFragmentData(const MCAssembler &Asm, const MCAsmLayout &Layout,
- const MCFragment &F, MCObjectWriter *OW) {
+ const MCFragment &F) {
+ MCObjectWriter *OW = &Asm.getWriter();
uint64_t Start = OW->getStream().tell();
(void) Start;
@@ -428,8 +428,7 @@ static void WriteFragmentData(const MCAssembler &Asm, const MCAsmLayout &Layout,
}
void MCAssembler::WriteSectionData(const MCSectionData *SD,
- const MCAsmLayout &Layout,
- MCObjectWriter *OW) const {
+ const MCAsmLayout &Layout) const {
// Ignore virtual sections.
if (SD->getSection().isVirtualSection()) {
assert(Layout.getSectionFileSize(SD) == 0 && "Invalid size for section!");
@@ -469,29 +468,29 @@ void MCAssembler::WriteSectionData(const MCSectionData *SD,
return;
}
- uint64_t Start = OW->getStream().tell();
+ uint64_t Start = getWriter().getStream().tell();
(void) Start;
for (MCSectionData::const_iterator it = SD->begin(),
ie = SD->end(); it != ie; ++it)
- WriteFragmentData(*this, Layout, *it, OW);
+ WriteFragmentData(*this, Layout, *it);
- assert(OW->getStream().tell() - Start == Layout.getSectionAddressSize(SD));
+ assert(getWriter().getStream().tell() - Start ==
+ Layout.getSectionAddressSize(SD));
}
-uint64_t MCAssembler::HandleFixup(MCObjectWriter &Writer,
- const MCAsmLayout &Layout,
- MCFragment &F,
- const MCFixup &Fixup) {
+uint64_t MCAssembler::HandleFixup(const MCAsmLayout &Layout,
+ MCFragment &F,
+ const MCFixup &Fixup) {
// Evaluate the fixup.
MCValue Target;
uint64_t FixedValue;
- if (!EvaluateFixup(Writer, Layout, Fixup, &F, Target, FixedValue)) {
+ if (!EvaluateFixup(Layout, Fixup, &F, Target, FixedValue)) {
// The fixup was unresolved, we need a relocation. Inform the object
// writer of the relocation, and give it an opportunity to adjust the
// fixup value if need be.
- Writer.RecordRelocation(*this, Layout, &F, Fixup, Target, FixedValue);
+ getWriter().RecordRelocation(*this, Layout, &F, Fixup, Target, FixedValue);
}
return FixedValue;
}
@@ -527,7 +526,7 @@ void MCAssembler::Finish() {
}
// Layout until everything fits.
- while (LayoutOnce(Writer, Layout))
+ while (LayoutOnce(Layout))
continue;
DEBUG_WITH_TYPE("mc-dump", {
@@ -545,7 +544,7 @@ void MCAssembler::Finish() {
// Allow the object writer a chance to perform post-layout binding (for
// example, to set the index fields in the symbol data).
- Writer.ExecutePostLayoutBinding(*this, Layout);
+ getWriter().ExecutePostLayoutBinding(*this, Layout);
// Evaluate and apply the fixups, generating relocation entries as necessary.
for (MCAssembler::iterator it = begin(), ie = end(); it != ie; ++it) {
@@ -556,7 +555,7 @@ void MCAssembler::Finish() {
for (MCDataFragment::fixup_iterator it3 = DF->fixup_begin(),
ie3 = DF->fixup_end(); it3 != ie3; ++it3) {
MCFixup &Fixup = *it3;
- uint64_t FixedValue = HandleFixup(Writer, Layout, *DF, Fixup);
+ uint64_t FixedValue = HandleFixup(Layout, *DF, Fixup);
getBackend().ApplyFixup(Fixup, DF->getContents().data(),
DF->getContents().size(), FixedValue);
}
@@ -566,7 +565,7 @@ void MCAssembler::Finish() {
for (MCInstFragment::fixup_iterator it3 = IF->fixup_begin(),
ie3 = IF->fixup_end(); it3 != ie3; ++it3) {
MCFixup &Fixup = *it3;
- uint64_t FixedValue = HandleFixup(Writer, Layout, *IF, Fixup);
+ uint64_t FixedValue = HandleFixup(Layout, *IF, Fixup);
getBackend().ApplyFixup(Fixup, IF->getCode().data(),
IF->getCode().size(), FixedValue);
}
@@ -575,13 +574,12 @@ void MCAssembler::Finish() {
}
// Write the object file.
- Writer.WriteObject(*this, Layout);
+ getWriter().WriteObject(*this, Layout);
stats::ObjectBytes += OS.tell() - StartOffset;
}
-bool MCAssembler::FixupNeedsRelaxation(const MCObjectWriter &Writer,
- const MCFixup &Fixup,
+bool MCAssembler::FixupNeedsRelaxation(const MCFixup &Fixup,
const MCFragment *DF,
const MCAsmLayout &Layout) const {
if (getRelaxAll())
@@ -590,7 +588,7 @@ bool MCAssembler::FixupNeedsRelaxation(const MCObjectWriter &Writer,
// If we cannot resolve the fixup value, it requires relaxation.
MCValue Target;
uint64_t Value;
- if (!EvaluateFixup(Writer, Layout, Fixup, DF, Target, Value))
+ if (!EvaluateFixup(Layout, Fixup, DF, Target, Value))
return true;
// Otherwise, relax if the value is too big for a (signed) i8.
@@ -599,8 +597,7 @@ bool MCAssembler::FixupNeedsRelaxation(const MCObjectWriter &Writer,
return int64_t(Value) != int64_t(int8_t(Value));
}
-bool MCAssembler::FragmentNeedsRelaxation(const MCObjectWriter &Writer,
- const MCInstFragment *IF,
+bool MCAssembler::FragmentNeedsRelaxation(const MCInstFragment *IF,
const MCAsmLayout &Layout) const {
// If this inst doesn't ever need relaxation, ignore it. This occurs when we
// are intentionally pushing out inst fragments, or because we relaxed a
@@ -610,16 +607,15 @@ bool MCAssembler::FragmentNeedsRelaxation(const MCObjectWriter &Writer,
for (MCInstFragment::const_fixup_iterator it = IF->fixup_begin(),
ie = IF->fixup_end(); it != ie; ++it)
- if (FixupNeedsRelaxation(Writer, *it, IF, Layout))
+ if (FixupNeedsRelaxation(*it, IF, Layout))
return true;
return false;
}
-bool MCAssembler::RelaxInstruction(const MCObjectWriter &Writer,
- MCAsmLayout &Layout,
+bool MCAssembler::RelaxInstruction(MCAsmLayout &Layout,
MCInstFragment &IF) {
- if (!FragmentNeedsRelaxation(Writer, &IF, Layout))
+ if (!FragmentNeedsRelaxation(&IF, Layout))
return false;
++stats::RelaxedInstructions;
@@ -653,9 +649,7 @@ bool MCAssembler::RelaxInstruction(const MCObjectWriter &Writer,
return true;
}
-bool MCAssembler::RelaxOrg(const MCObjectWriter &Writer,
- MCAsmLayout &Layout,
- MCOrgFragment &OF) {
+bool MCAssembler::RelaxOrg(MCAsmLayout &Layout, MCOrgFragment &OF) {
int64_t TargetLocation;
if (!OF.getOffset().EvaluateAsAbsolute(TargetLocation, Layout))
report_fatal_error("expected assembly-time absolute expression");
@@ -672,9 +666,7 @@ bool MCAssembler::RelaxOrg(const MCObjectWriter &Writer,
return OldSize != OF.getSize();
}
-bool MCAssembler::RelaxLEB(const MCObjectWriter &Writer,
- MCAsmLayout &Layout,
- MCLEBFragment &LF) {
+bool MCAssembler::RelaxLEB(MCAsmLayout &Layout, MCLEBFragment &LF) {
int64_t Value = 0;
uint64_t OldSize = LF.getContents().size();
LF.getValue().EvaluateAsAbsolute(Value, Layout);
@@ -689,8 +681,7 @@ bool MCAssembler::RelaxLEB(const MCObjectWriter &Writer,
return OldSize != LF.getContents().size();
}
-bool MCAssembler::RelaxDwarfLineAddr(const MCObjectWriter &Writer,
- MCAsmLayout &Layout,
+bool MCAssembler::RelaxDwarfLineAddr(MCAsmLayout &Layout,
MCDwarfLineAddrFragment &DF) {
int64_t AddrDelta = 0;
uint64_t OldSize = DF.getContents().size();
@@ -705,8 +696,7 @@ bool MCAssembler::RelaxDwarfLineAddr(const MCObjectWriter &Writer,
return OldSize != Data.size();
}
-bool MCAssembler::RelaxAlignment(const MCObjectWriter &Writer,
- MCAsmLayout &Layout,
+bool MCAssembler::RelaxAlignment(MCAsmLayout &Layout,
MCAlignFragment &AF) {
unsigned Offset = Layout.getFragmentOffset(&AF);
unsigned Size = OffsetToAlignment(Offset, AF.getAlignment());
@@ -717,8 +707,7 @@ bool MCAssembler::RelaxAlignment(const MCObjectWriter &Writer,
return OldSize != Size;
}
-bool MCAssembler::LayoutOnce(const MCObjectWriter &Writer,
- MCAsmLayout &Layout) {
+bool MCAssembler::LayoutOnce(MCAsmLayout &Layout) {
++stats::RelaxationSteps;
// Scan for fragments that need relaxation.
@@ -735,22 +724,20 @@ bool MCAssembler::LayoutOnce(const MCObjectWriter &Writer,
default:
break;
case MCFragment::FT_Align:
- relaxedFrag = RelaxAlignment(Writer, Layout,
- *cast<MCAlignFragment>(it2));
+ relaxedFrag = RelaxAlignment(Layout, *cast<MCAlignFragment>(it2));
break;
case MCFragment::FT_Inst:
- relaxedFrag = RelaxInstruction(Writer, Layout,
- *cast<MCInstFragment>(it2));
+ relaxedFrag = RelaxInstruction(Layout, *cast<MCInstFragment>(it2));
break;
case MCFragment::FT_Org:
- relaxedFrag = RelaxOrg(Writer, Layout, *cast<MCOrgFragment>(it2));
+ relaxedFrag = RelaxOrg(Layout, *cast<MCOrgFragment>(it2));
break;
case MCFragment::FT_Dwarf:
- relaxedFrag = RelaxDwarfLineAddr(Writer, Layout,
- *cast<MCDwarfLineAddrFragment>(it2));
+ relaxedFrag = RelaxDwarfLineAddr(Layout,
+ *cast<MCDwarfLineAddrFragment>(it2));
break;
case MCFragment::FT_LEB:
- relaxedFrag = RelaxLEB(Writer, Layout, *cast<MCLEBFragment>(it2));
+ relaxedFrag = RelaxLEB(Layout, *cast<MCLEBFragment>(it2));
break;
}
// Update the layout, and remember that we relaxed.