[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
This commit is contained in:
Daniel Sanders 2014-11-01 15:52:31 +00:00
parent 6128ca928d
commit 5179f70b34

View 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;