unsigned Size) const {
uintptr_t PtrSizedAddr = static_cast<uintptr_t>(SrcAddr);
assert(PtrSizedAddr == SrcAddr && "Linker memory pointer out-of-range.");
- uint64_t Result = 0;
uint8_t *Src = reinterpret_cast<uint8_t*>(PtrSizedAddr);
- uint8_t *Dst = reinterpret_cast<uint8_t*>(&Result);
-
- // If host and target endianness match use memcpy, otherwise copy in reverse
- // order.
- if (getRTDyld().IsTargetLittleEndian == sys::IsLittleEndianHost) {
- if (!sys::IsLittleEndianHost)
- Dst += sizeof(Result) - Size;
- memcpy(Dst, Src, Size);
- } else {
- Dst += Size - 1;
- for (unsigned i = 0; i < Size; ++i)
- *Dst-- = *Src++;
- }
- return Result;
+ return getRTDyld().readBytesUnaligned(Src, Size);
}
std::pair<uint64_t, std::string> RuntimeDyldCheckerImpl::getStubAddrFor(