From 5179f70b34af959847d6567e5764538a42782596 Mon Sep 17 00:00:00 2001 From: Daniel Sanders Date: Sat, 1 Nov 2014 15:52:31 +0000 Subject: [PATCH] [JIT] Fix some more missing endian conversions in RuntimeDyld 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 --- .../RuntimeDyld/RuntimeDyldMachO.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp index ddd828244a5..d3d6f5d2546 100644 --- a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp +++ b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp @@ -216,17 +216,18 @@ unsigned char *RuntimeDyldMachOCRTPBase::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::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; -- 2.34.1