356 changes: 190 additions & 166 deletions llvm/include/llvm/ExecutionEngine/Orc/OrcABISupport.h

Large diffs are not rendered by default.

42 changes: 21 additions & 21 deletions llvm/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#define LLVM_EXECUTIONENGINE_ORC_ORCREMOTETARGETSERVER_H

#include "llvm/ExecutionEngine/JITSymbol.h"
#include "llvm/ExecutionEngine/Orc/IndirectionUtils.h"
#include "llvm/ExecutionEngine/Orc/OrcError.h"
#include "llvm/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h"
#include "llvm/Support/Debug.h"
Expand Down Expand Up @@ -262,19 +263,17 @@ class OrcRemoteTargetServer
return errorCodeToError(
orcError(OrcErrorCode::RemoteIndirectStubsOwnerDoesNotExist));

typename TargetT::IndirectStubsInfo IS;
if (auto Err =
TargetT::emitIndirectStubsBlock(IS, NumStubsRequired, nullptr))
return std::move(Err);
auto IS = LocalIndirectStubsInfo<TargetT>::create(
NumStubsRequired, sys::Process::getPageSizeEstimate());
if (!IS)
return IS.takeError();

JITTargetAddress StubsBase = static_cast<JITTargetAddress>(
reinterpret_cast<uintptr_t>(IS.getStub(0)));
JITTargetAddress PtrsBase = static_cast<JITTargetAddress>(
reinterpret_cast<uintptr_t>(IS.getPtr(0)));
uint32_t NumStubsEmitted = IS.getNumStubs();
JITTargetAddress StubsBase = pointerToJITTargetAddress(IS->getStub(0));
JITTargetAddress PtrsBase = pointerToJITTargetAddress(IS->getPtr(0));
uint32_t NumStubsEmitted = IS->getNumStubs();

auto &BlockList = StubOwnerItr->second;
BlockList.push_back(std::move(IS));
BlockList.push_back(std::move(*IS));

return std::make_tuple(StubsBase, PtrsBase, NumStubsEmitted);
}
Expand All @@ -287,8 +286,10 @@ class OrcRemoteTargetServer
if (EC)
return errorCodeToError(EC);

TargetT::writeResolverCode(static_cast<uint8_t *>(ResolverBlock.base()),
&reenter, this);
TargetT::writeResolverCode(static_cast<char *>(ResolverBlock.base()),
pointerToJITTargetAddress(ResolverBlock.base()),
pointerToJITTargetAddress(&reenter),
pointerToJITTargetAddress(this));

return errorCodeToError(sys::Memory::protectMappedMemory(
ResolverBlock.getMemoryBlock(),
Expand All @@ -308,20 +309,19 @@ class OrcRemoteTargetServer
(sys::Process::getPageSizeEstimate() - TargetT::PointerSize) /
TargetT::TrampolineSize;

uint8_t *TrampolineMem = static_cast<uint8_t *>(TrampolineBlock.base());
TargetT::writeTrampolines(TrampolineMem, ResolverBlock.base(),
NumTrampolines);
char *TrampolineMem = static_cast<char *>(TrampolineBlock.base());
TargetT::writeTrampolines(
TrampolineMem, pointerToJITTargetAddress(TrampolineMem),
pointerToJITTargetAddress(ResolverBlock.base()), NumTrampolines);

EC = sys::Memory::protectMappedMemory(TrampolineBlock.getMemoryBlock(),
sys::Memory::MF_READ |
sys::Memory::MF_EXEC);

TrampolineBlocks.push_back(std::move(TrampolineBlock));

auto TrampolineBaseAddr = static_cast<JITTargetAddress>(
reinterpret_cast<uintptr_t>(TrampolineMem));

return std::make_tuple(TrampolineBaseAddr, NumTrampolines);
return std::make_tuple(pointerToJITTargetAddress(TrampolineMem),
NumTrampolines);
}

Expected<JITTargetAddress> handleGetSymbolAddress(const std::string &Name) {
Expand All @@ -337,7 +337,7 @@ class OrcRemoteTargetServer
uint32_t PointerSize = TargetT::PointerSize;
uint32_t PageSize = sys::Process::getPageSizeEstimate();
uint32_t TrampolineSize = TargetT::TrampolineSize;
uint32_t IndirectStubSize = TargetT::IndirectStubsInfo::StubSize;
uint32_t IndirectStubSize = TargetT::StubSize;
LLVM_DEBUG(dbgs() << " Remote info:\n"
<< " triple = '" << ProcessTriple << "'\n"
<< " pointer size = " << PointerSize << "\n"
Expand Down Expand Up @@ -433,7 +433,7 @@ class OrcRemoteTargetServer
SymbolLookupFtor SymbolLookup;
EHFrameRegistrationFtor EHFramesRegister, EHFramesDeregister;
std::map<ResourceIdMgr::ResourceId, Allocator> Allocators;
using ISBlockOwnerList = std::vector<typename TargetT::IndirectStubsInfo>;
using ISBlockOwnerList = std::vector<LocalIndirectStubsInfo<TargetT>>;
std::map<ResourceIdMgr::ResourceId, ISBlockOwnerList> IndirectStubsOwners;
sys::OwningMemoryBlock ResolverBlock;
std::vector<sys::OwningMemoryBlock> TrampolineBlocks;
Expand Down
641 changes: 285 additions & 356 deletions llvm/lib/ExecutionEngine/Orc/OrcABISupport.cpp

Large diffs are not rendered by default.