diff options
Diffstat (limited to 'tools/lli/ChildTarget/ChildTarget.cpp')
-rw-r--r-- | tools/lli/ChildTarget/ChildTarget.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/tools/lli/ChildTarget/ChildTarget.cpp b/tools/lli/ChildTarget/ChildTarget.cpp index 0b75e20f83e9a..f6d2413655eac 100644 --- a/tools/lli/ChildTarget/ChildTarget.cpp +++ b/tools/lli/ChildTarget/ChildTarget.cpp @@ -1,4 +1,4 @@ -#include "llvm/ExecutionEngine/Orc/OrcArchitectureSupport.h" +#include "llvm/ExecutionEngine/Orc/OrcABISupport.h" #include "llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h" #include "llvm/Support/Debug.h" #include "llvm/Support/DynamicLibrary.h" @@ -12,11 +12,13 @@ using namespace llvm::orc; using namespace llvm::sys; #ifdef __x86_64__ -typedef OrcX86_64 HostOrcArch; +typedef OrcX86_64_SysV HostOrcArch; #else -typedef OrcGenericArchitecture HostOrcArch; +typedef OrcGenericABI HostOrcArch; #endif +ExitOnError ExitOnErr; + int main(int argc, char *argv[]) { if (argc != 3) { @@ -24,6 +26,8 @@ int main(int argc, char *argv[]) { return 1; } + ExitOnErr.setBanner(std::string(argv[0]) + ":"); + int InFD; int OutFD; { @@ -41,24 +45,29 @@ int main(int argc, char *argv[]) { return RTDyldMemoryManager::getSymbolAddressInProcess(Name); }; + auto RegisterEHFrames = [](uint8_t *Addr, uint32_t Size) { + RTDyldMemoryManager::registerEHFramesInProcess(Addr, Size); + }; + + auto DeregisterEHFrames = [](uint8_t *Addr, uint32_t Size) { + RTDyldMemoryManager::deregisterEHFramesInProcess(Addr, Size); + }; + FDRPCChannel Channel(InFD, OutFD); typedef remote::OrcRemoteTargetServer<FDRPCChannel, HostOrcArch> JITServer; - JITServer Server(Channel, SymbolLookup); + JITServer Server(Channel, SymbolLookup, RegisterEHFrames, DeregisterEHFrames); while (1) { - JITServer::JITProcId Id = JITServer::InvalidId; - if (auto EC = Server.getNextProcId(Id)) { - errs() << "Error: " << EC.message() << "\n"; - return 1; - } + uint32_t RawId; + ExitOnErr(Server.startReceivingFunction(Channel, RawId)); + auto Id = static_cast<JITServer::JITFuncId>(RawId); switch (Id) { case JITServer::TerminateSessionId: + ExitOnErr(Server.handleTerminateSession()); return 0; default: - if (auto EC = Server.handleKnownProcedure(Id)) { - errs() << "Error: " << EC.message() << "\n"; - return 1; - } + ExitOnErr(Server.handleKnownFunction(Id)); + break; } } |