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
DEBUG(dbgs() << "Processing FDE: Delta for text: " << DeltaForText
<< ", Delta for EH: " << DeltaForEH << "\n");
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;
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;
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 NewLocation = FDELocation - DeltaForText;
- *((TargetPtrT*)P) = NewLocation;
+ writeBytesUnaligned(NewLocation, P, sizeof(TargetPtrT));
+
P += sizeof(TargetPtrT);
// Skip the FDE address range
P += sizeof(TargetPtrT);
// Skip the FDE address range
uint8_t Augmentationsize = *P;
P += 1;
if (Augmentationsize != 0) {
uint8_t Augmentationsize = *P;
P += 1;
if (Augmentationsize != 0) {
- TargetPtrT LSDA = *((TargetPtrT *)P);
+ TargetPtrT LSDA = readBytesUnaligned(P, sizeof(TargetPtrT));
TargetPtrT NewLSDA = LSDA - DeltaForEH;
TargetPtrT NewLSDA = LSDA - DeltaForEH;
- *((TargetPtrT *)P) = NewLSDA;
+ writeBytesUnaligned(NewLSDA, P, sizeof(TargetPtrT));