[RuntimeDyld][AArch64] Make encode/decodeAddend more typesafe by using the relocation...
authorJuergen Ributzka <juergen@apple.com>
Tue, 29 Jul 2014 19:57:11 +0000 (19:57 +0000)
committerJuergen Ributzka <juergen@apple.com>
Tue, 29 Jul 2014 19:57:11 +0000 (19:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214204 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp
lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.h
lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h

index 009409a193646d4828b08b28caf4f04ae16e472f..920b999fa089cc26cdb6cecc1cbec6e268164f6a 100644 (file)
@@ -28,7 +28,7 @@ using namespace llvm::object;
 namespace llvm {
 
 int64_t RuntimeDyldMachO::decodeAddend(uint8_t *LocalAddress, unsigned NumBytes,
-                                       uint32_t RelType) const {
+                                       MachO::RelocationInfoType) const {
   int64_t Addend = 0;
   memcpy(&Addend, LocalAddress, NumBytes);
   return Addend;
index abc98944a82ac912dd32be395e3e20baecb75f99..7450f1141e1622469455c92d348d417197e57221 100644 (file)
@@ -54,7 +54,7 @@ protected:
 
   /// Extract the addend encoded in the instruction.
   int64_t decodeAddend(uint8_t *LocalAddress, unsigned NumBytes,
-                       uint32_t RelType) const;
+                       MachO::RelocationInfoType RelType) const;
 
   /// Construct a RelocationValueRef representing the relocation target.
   /// For Symbols in known sections, this will return a RelocationValueRef
@@ -138,7 +138,8 @@ protected:
     RI->getOffset(Offset);
     uint8_t *LocalAddress = Section.Address + Offset;
     unsigned NumBytes = 1 << Size;
-    uint32_t RelType = Obj.getAnyRelocationType(RelInfo);
+    MachO::RelocationInfoType RelType =
+      static_cast<MachO::RelocationInfoType>(Obj.getAnyRelocationType(RelInfo));
     int64_t Addend = impl().decodeAddend(LocalAddress, NumBytes, RelType);
 
     return RelocationEntry(SectionID, Offset, RelType, Addend, IsPCRel, Size);
index 11b6a1392c0277bad72d1b909a986d5487238b62..adc3adbba25b15a73e73108d3297e48aa020a5a9 100644 (file)
@@ -28,7 +28,7 @@ public:
 
   /// Extract the addend encoded in the instruction / memory location.
   int64_t decodeAddend(uint8_t *LocalAddress, unsigned NumBytes,
-                       uint32_t RelType) const {
+                       MachO::RelocationInfoType RelType) const {
     int64_t Addend = 0;
     // Verify that the relocation has the correct size and alignment.
     switch (RelType) {
@@ -120,7 +120,7 @@ public:
   }
 
   /// Extract the addend encoded in the instruction.
-  void encodeAddend(uint8_t *LocalAddress, uint32_t RelType,
+  void encodeAddend(uint8_t *LocalAddress, MachO::RelocationInfoType RelType,
                     int64_t Addend) const {
     // Verify that the relocation has the correct alignment.
     switch (RelType) {
@@ -285,8 +285,10 @@ public:
 
     const SectionEntry &Section = Sections[RE.SectionID];
     uint8_t *LocalAddress = Section.Address + RE.Offset;
+    MachO::RelocationInfoType RelType =
+      static_cast<MachO::RelocationInfoType>(RE.RelType);
 
-    switch (RE.RelType) {
+    switch (RelType) {
     default:
       llvm_unreachable("Invalid relocation type!");
     case MachO::ARM64_RELOC_UNSIGNED: {
@@ -304,7 +306,7 @@ public:
       // Check if branch is in range.
       uint64_t FinalAddress = Section.LoadAddress + RE.Offset;
       int64_t PCRelVal = Value - FinalAddress + RE.Addend;
-      encodeAddend(LocalAddress, RE.RelType, PCRelVal);
+      encodeAddend(LocalAddress, RelType, PCRelVal);
       break;
     }
     case MachO::ARM64_RELOC_GOT_LOAD_PAGE21:
@@ -314,7 +316,7 @@ public:
       uint64_t FinalAddress = Section.LoadAddress + RE.Offset;
       int64_t PCRelVal =
         ((Value + RE.Addend) & (-4096)) - (FinalAddress & (-4096));
-      encodeAddend(LocalAddress, RE.RelType, PCRelVal);
+      encodeAddend(LocalAddress, RelType, PCRelVal);
       break;
     }
     case MachO::ARM64_RELOC_GOT_LOAD_PAGEOFF12:
@@ -324,7 +326,7 @@ public:
       Value += RE.Addend;
       // Mask out the page address and only use the lower 12 bits.
       Value &= 0xFFF;
-      encodeAddend(LocalAddress, RE.RelType, Value);
+      encodeAddend(LocalAddress, RelType, Value);
       break;
     }
     case MachO::ARM64_RELOC_SUBTRACTOR: