From: Daniel Sanders Date: Sat, 1 Nov 2014 15:52:31 +0000 (+0000) Subject: [JIT] Fix some more missing endian conversions in RuntimeDyld X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=5179f70b34af959847d6567e5764538a42782596;hp=6128ca928de2c07590c8867566adfc161844e72a [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 --- 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;