[llvm-commits] [llvm] r95925 - in /llvm/trunk: include/llvm/MC/MCAssembler.h lib/MC/MCAssembler.cpp
Daniel Dunbar
daniel at zuster.org
Thu Feb 11 13:29:30 PST 2010
Author: ddunbar
Date: Thu Feb 11 15:29:29 2010
New Revision: 95925
URL: http://llvm.org/viewvc/llvm-project?rev=95925&view=rev
Log:
MC: Move MCSectionData::Fixup out to MCAsmFixup.
Modified:
llvm/trunk/include/llvm/MC/MCAssembler.h
llvm/trunk/lib/MC/MCAssembler.cpp
Modified: llvm/trunk/include/llvm/MC/MCAssembler.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAssembler.h?rev=95925&r1=95924&r2=95925&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCAssembler.h (original)
+++ llvm/trunk/include/llvm/MC/MCAssembler.h Thu Feb 11 15:29:29 2010
@@ -22,10 +22,39 @@
class MCAssembler;
class MCContext;
class MCExpr;
+class MCFragment;
class MCSection;
class MCSectionData;
class MCSymbol;
+/// MCAsmFixup - Represent a fixed size region of bytes inside some fragment
+/// which needs to be rewritten. This region will either be rewritten by the
+/// assembler or cause a relocation entry to be generated.
+struct MCAsmFixup {
+ /// Fragment - The fragment containing the fixup.
+ MCFragment *Fragment;
+
+ /// Offset - The offset inside the fragment which needs to be rewritten.
+ uint64_t Offset;
+
+ /// Value - The expression to eventually write into the fragment.
+ const MCExpr *Value;
+
+ /// Size - The fixup size.
+ unsigned Size;
+
+ /// FixedValue - The value to replace the fix up by.
+ //
+ // FIXME: This should not be here.
+ uint64_t FixedValue;
+
+public:
+ MCAsmFixup(MCFragment &_Fragment, uint64_t _Offset, const MCExpr &_Value,
+ unsigned _Size)
+ : Fragment(&_Fragment), Offset(_Offset), Value(&_Value), Size(_Size),
+ FixedValue(0) {}
+};
+
class MCFragment : public ilist_node<MCFragment> {
MCFragment(const MCFragment&); // DO NOT IMPLEMENT
void operator=(const MCFragment&); // DO NOT IMPLEMENT
@@ -284,41 +313,14 @@
void operator=(const MCSectionData&); // DO NOT IMPLEMENT
public:
- /// Fixup - Represent a fixed size region of bytes inside some fragment which
- /// needs to be rewritten. This region will either be rewritten by the
- /// assembler or cause a relocation entry to be generated.
- struct Fixup {
- /// Fragment - The fragment containing the fixup.
- MCFragment *Fragment;
-
- /// Offset - The offset inside the fragment which needs to be rewritten.
- uint64_t Offset;
-
- /// Value - The expression to eventually write into the fragment.
- const MCExpr *Value;
-
- /// Size - The fixup size.
- unsigned Size;
-
- /// FixedValue - The value to replace the fix up by.
- //
- // FIXME: This should not be here.
- uint64_t FixedValue;
-
- public:
- Fixup(MCFragment &_Fragment, uint64_t _Offset, const MCExpr &_Value,
- unsigned _Size)
- : Fragment(&_Fragment), Offset(_Offset), Value(&_Value), Size(_Size),
- FixedValue(0) {}
- };
typedef iplist<MCFragment> FragmentListType;
typedef FragmentListType::const_iterator const_iterator;
typedef FragmentListType::iterator iterator;
- typedef std::vector<Fixup>::const_iterator const_fixup_iterator;
- typedef std::vector<Fixup>::iterator fixup_iterator;
+ typedef std::vector<MCAsmFixup>::const_iterator const_fixup_iterator;
+ typedef std::vector<MCAsmFixup>::iterator fixup_iterator;
private:
iplist<MCFragment> Fragments;
@@ -347,7 +349,7 @@
mutable unsigned LastFixupLookup;
/// Fixups - The list of fixups in this section.
- std::vector<Fixup> Fixups;
+ std::vector<MCAsmFixup> Fixups;
/// HasInstructions - Whether this section has had instructions emitted into
/// it.
@@ -385,7 +387,7 @@
/// @name Fixup Access
/// @{
- std::vector<Fixup> &getFixups() {
+ std::vector<MCAsmFixup> &getFixups() {
return Fixups;
}
@@ -413,7 +415,8 @@
//
// FIXME: This isn't horribly slow in practice, but there are much nicer
// solutions to applying the fixups.
- const Fixup *LookupFixup(const MCFragment *Fragment, uint64_t Offset) const;
+ const MCAsmFixup *LookupFixup(const MCFragment *Fragment,
+ uint64_t Offset) const;
uint64_t getAddress() const {
assert(Address != ~UINT64_C(0) && "Address not set!");
Modified: llvm/trunk/lib/MC/MCAssembler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAssembler.cpp?rev=95925&r1=95924&r2=95925&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCAssembler.cpp (original)
+++ llvm/trunk/lib/MC/MCAssembler.cpp Thu Feb 11 15:29:29 2010
@@ -403,7 +403,7 @@
uint32_t Word1;
};
void ComputeScatteredRelocationInfo(MCAssembler &Asm,
- MCSectionData::Fixup &Fixup,
+ MCAsmFixup &Fixup,
const MCValue &Target,
DenseMap<const MCSymbol*,MCSymbolData*> &SymbolMap,
std::vector<MachRelocationEntry> &Relocs) {
@@ -454,7 +454,7 @@
}
void ComputeRelocationInfo(MCAssembler &Asm,
- MCSectionData::Fixup &Fixup,
+ MCAsmFixup &Fixup,
DenseMap<const MCSymbol*,MCSymbolData*> &SymbolMap,
std::vector<MachRelocationEntry> &Relocs) {
MCValue Target;
@@ -912,15 +912,15 @@
A->getSectionList().push_back(this);
}
-const MCSectionData::Fixup *
-MCSectionData::LookupFixup(const MCFragment *Fragment, uint64_t Offset) const {
+const MCAsmFixup *MCSectionData::LookupFixup(const MCFragment *Fragment,
+ uint64_t Offset) const {
// Use a one level cache to turn the common case of accessing the fixups in
// order into O(1) instead of O(N).
unsigned i = LastFixupLookup, Count = Fixups.size(), End = Fixups.size();
if (i >= End)
i = 0;
while (Count--) {
- const Fixup &F = Fixups[i];
+ const MCAsmFixup &F = Fixups[i];
if (F.Fragment == Fragment && F.Offset == Offset) {
LastFixupLookup = i;
return &F;
@@ -998,8 +998,7 @@
// Otherwise, add fixups for the values.
for (uint64_t i = 0, e = FF.getCount(); i != e; ++i) {
- MCSectionData::Fixup Fix(F, i * FF.getValueSize(),
- FF.getValue(),FF.getValueSize());
+ MCAsmFixup Fix(F, i*FF.getValueSize(), FF.getValue(),FF.getValueSize());
SD.getFixups().push_back(Fix);
}
break;
@@ -1107,7 +1106,7 @@
// Find the fixup.
//
// FIXME: Find a better way to write in the fixes.
- const MCSectionData::Fixup *Fixup =
+ const MCAsmFixup *Fixup =
F.getParent()->LookupFixup(&F, i * FF.getValueSize());
assert(Fixup && "Missing fixup for fill value!");
Value = Fixup->FixedValue;
More information about the llvm-commits
mailing list