[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