[JIT] Fix some more missing endian conversions in RuntimeDyld
authorDaniel Sanders <daniel.sanders@imgtec.com>
Sat, 1 Nov 2014 15:52:31 +0000 (15:52 +0000)
committerDaniel Sanders <daniel.sanders@imgtec.com>
Sat, 1 Nov 2014 15:52:31 +0000 (15:52 +0000)
Summary: This fixes MachO_i386_eh_frame.s on a big-endian Mips host.

Reviewers: lhames

Reviewed By: lhames

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D6019

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221047 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp

index ddd828244a53ad6bfa77c51907e83e9e49606c64..d3d6f5d2546e0166083627f656937166b36544b2 100644 (file)
@@ -216,17 +216,18 @@ unsigned char *RuntimeDyldMachOCRTPBase<Impl>::processFDE(unsigned char *P,
 
   DEBUG(dbgs() << "Processing FDE: Delta for text: " << DeltaForText
                << ", Delta for EH: " << DeltaForEH << "\n");
-  uint32_t Length = *((uint32_t *)P);
+  uint32_t Length = readBytesUnaligned(P, 4);
   P += 4;
   unsigned char *Ret = P + Length;
-  uint32_t Offset = *((uint32_t *)P);
+  uint32_t Offset = readBytesUnaligned(P, 4);
   if (Offset == 0) // is a CIE
     return Ret;
 
   P += 4;
-  TargetPtrT FDELocation = *((TargetPtrT*)P);
+  TargetPtrT FDELocation = readBytesUnaligned(P, sizeof(TargetPtrT));
   TargetPtrT NewLocation = FDELocation - DeltaForText;
-  *((TargetPtrT*)P) = NewLocation;
+  writeBytesUnaligned(NewLocation, P, sizeof(TargetPtrT));
+
   P += sizeof(TargetPtrT);
 
   // Skip the FDE address range
@@ -235,9 +236,9 @@ unsigned char *RuntimeDyldMachOCRTPBase<Impl>::processFDE(unsigned char *P,
   uint8_t Augmentationsize = *P;
   P += 1;
   if (Augmentationsize != 0) {
-    TargetPtrT LSDA = *((TargetPtrT *)P);
+    TargetPtrT LSDA = readBytesUnaligned(P, sizeof(TargetPtrT));
     TargetPtrT NewLSDA = LSDA - DeltaForEH;
-    *((TargetPtrT *)P) = NewLSDA;
+    writeBytesUnaligned(NewLSDA, P, sizeof(TargetPtrT));
   }
 
   return Ret;