mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-03 01:12:59 +00:00
[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:
parent
6128ca928d
commit
5179f70b34
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user