[llvm-commits] CVS: llvm/include/llvm/CodeGen/MachOWriter.h

Bill Wendling isanbard at gmail.com
Fri Feb 2 18:38:07 PST 2007



Changes in directory llvm/include/llvm/CodeGen:

MachOWriter.h updated: 1.18 -> 1.19
---
Log message:

Moved MachORelocation to its own header file. Have a call through the
TargetMachOInfo object to the GetTargetRelocation method. Pass into it
non-Mach-O-specific parameters.


---
Diffs of the changes:  (+14 -33)

 MachOWriter.h |   47 ++++++++++++++---------------------------------
 1 files changed, 14 insertions(+), 33 deletions(-)


Index: llvm/include/llvm/CodeGen/MachOWriter.h
diff -u llvm/include/llvm/CodeGen/MachOWriter.h:1.18 llvm/include/llvm/CodeGen/MachOWriter.h:1.19
--- llvm/include/llvm/CodeGen/MachOWriter.h:1.18	Mon Jan 29 15:20:42 2007
+++ llvm/include/llvm/CodeGen/MachOWriter.h	Fri Feb  2 20:37:51 2007
@@ -27,6 +27,7 @@
   class Mangler;
   class MachineCodeEmitter;
   class MachOCodeEmitter;
+  class OutputBuffer;
 
   /// MachOSym - This struct contains information about each symbol that is
   /// added to logical symbol table for the module.  This is eventually
@@ -298,37 +299,6 @@
           initprot(VM_PROT_ALL), nsects(0), flags(0) { }
     };
 
-    /// MachORelocation - This struct contains information about each relocation
-    /// that needs to be emitted to the file.
-    /// see <mach-o/reloc.h>
-    struct MachORelocation {
-      uint32_t r_address;   // offset in the section to what is being  relocated
-      uint32_t r_symbolnum; // symbol index if r_extern == 1 else section index
-      bool     r_pcrel;     // was relocated pc-relative already
-      uint8_t  r_length;    // length = 2 ^ r_length
-      bool     r_extern;    // 
-      uint8_t  r_type;      // if not 0, machine-specific relocation type.
-      bool     r_scattered; // 1 = scattered, 0 = non-scattered
-      int32_t  r_value;     // the value the item to be relocated is referring
-                            // to.
-      
-      uint32_t getPackedFields() {
-        if (r_scattered)
-          return (1 << 31) | (r_pcrel << 30) | ((r_length & 3) << 28) | 
-                 ((r_type & 15) << 24) | (r_address & 0x00FFFFFF);
-        else
-          return (r_symbolnum << 8) | (r_pcrel << 7) | ((r_length & 3) << 5) |
-                 (r_extern << 4) | (r_type & 15);
-      }
-      uint32_t getAddress() { return r_scattered ? r_value : r_address; }
-      
-      MachORelocation(uint32_t addr, uint32_t index, bool pcrel, uint8_t len,
-                      bool ext, uint8_t type, bool scattered = false, 
-                      int32_t value = 0) : 
-        r_address(addr), r_symbolnum(index), r_pcrel(pcrel), r_length(len),
-        r_extern(ext), r_type(type), r_scattered(scattered), r_value(value) {}
-    };
-
     /// MachOSection - This struct contains information about each section in a 
     /// particular segment that is emitted to the file.  This is eventually
     /// turned into the SectionCommand in the load command for a particlar
@@ -635,8 +605,19 @@
                                       MachineBasicBlock *MBB) const {
       return TM.getMachOWriterInfo()->GetJTRelocation(Offset, MBB);
     }
-    virtual void GetTargetRelocation(MachineRelocation &MR, MachOSection &From,
-                                     MachOSection &To, bool Scattered) = 0;
+
+    /// GetTargetRelocation - Returns the number of relocations.
+    unsigned GetTargetRelocation(MachineRelocation &MR,
+                                 unsigned FromIdx,
+                                 unsigned ToAddr,
+                                 unsigned ToIndex,
+                                 OutputBuffer &RelocOut,
+                                 OutputBuffer &SecOut,
+                                 bool Scattered) {
+      return TM.getMachOWriterInfo()->GetTargetRelocation(MR, FromIdx, ToAddr,
+                                                          ToIndex, RelocOut,
+                                                          SecOut, Scattered);
+    }
   };
 }
 






More information about the llvm-commits mailing list