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

Nate Begeman natebegeman at mac.com
Fri Jan 26 14:40:06 PST 2007



Changes in directory llvm/include/llvm/CodeGen:

MachOWriter.h updated: 1.16 -> 1.17
---
Log message:

Handle multiple functions, properly mangle symbols, and fix support for
scattered relocations.


---
Diffs of the changes:  (+16 -7)

 MachOWriter.h |   23 ++++++++++++++++-------
 1 files changed, 16 insertions(+), 7 deletions(-)


Index: llvm/include/llvm/CodeGen/MachOWriter.h
diff -u llvm/include/llvm/CodeGen/MachOWriter.h:1.16 llvm/include/llvm/CodeGen/MachOWriter.h:1.17
--- llvm/include/llvm/CodeGen/MachOWriter.h:1.16	Wed Jan 24 01:13:55 2007
+++ llvm/include/llvm/CodeGen/MachOWriter.h	Fri Jan 26 16:39:48 2007
@@ -307,16 +307,25 @@
       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() { 
-        return (r_symbolnum << 8) | (r_pcrel << 7) | ((r_length & 3) << 5) |
-               (r_extern << 4) | (r_type & 15);
+      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) : r_address(addr),
-        r_symbolnum(index), r_pcrel(pcrel), r_length(len), r_extern(ext),
-        r_type(type) {}
+                      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 
@@ -621,7 +630,7 @@
       return TM.getMachOWriterInfo()->GetJTRelocation(Offset, MBB);
     }
     virtual void GetTargetRelocation(MachineRelocation &MR, MachOSection &From,
-                                     MachOSection &To) = 0;
+                                     MachOSection &To, bool Scattered) = 0;
   };
 }
 






More information about the llvm-commits mailing list