From 362510890ff2e1838450bb6ab91ef4e465c1d3a8 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Thu, 7 Aug 2014 20:41:57 +0000 Subject: [PATCH] [MCJIT] Replace a c-style cast with reinterpret_cast + static_cast. C-style casts (and reinterpret_casts) result in implementation defined values when a pointer is cast to a larger integer type. On some platforms this was leading to bogus address computations in RuntimeDyldMachOAArch64. This should fix http://llvm.org/PR20501. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215143 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h b/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h index ced85f3e55a..ffdb53a6b18 100644 --- a/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h +++ b/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h @@ -362,9 +362,9 @@ private: assert(RE.Size == 2); SectionEntry &Section = Sections[RE.SectionID]; StubMap::const_iterator i = Stubs.find(Value); - uint8_t *Addr; + uintptr_t Addr; if (i != Stubs.end()) - Addr = Section.Address + i->second; + Addr = reinterpret_cast(Section.Address) + i->second; else { // FIXME: There must be a better way to do this then to check and fix the // alignment every time!!! @@ -385,11 +385,11 @@ private: else addRelocationForSection(GOTRE, Value.SectionID); Section.StubOffset = StubOffset + getMaxStubSize(); - Addr = (uint8_t *)StubAddress; + Addr = StubAddress; } RelocationEntry TargetRE(RE.SectionID, RE.Offset, RE.RelType, /*Addend=*/0, RE.IsPCRel, RE.Size); - resolveRelocation(TargetRE, (uint64_t)Addr); + resolveRelocation(TargetRE, static_cast(Addr)); } }; } -- 2.34.1