Index: lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp =================================================================== --- lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp +++ lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp @@ -216,17 +216,18 @@ 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 @@ 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;