1 #include "llvm/ExecutionEngine/Orc/OrcArchitectureSupport.h"
2 #include "llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h"
3 #include "llvm/Support/Debug.h"
4 #include "llvm/Support/DynamicLibrary.h"
5 #include "llvm/Support/Process.h"
8 #include "../RemoteJITUtils.h"
11 using namespace llvm::orc;
12 using namespace llvm::sys;
15 typedef OrcX86_64 HostOrcArch;
17 typedef OrcGenericArchitecture HostOrcArch;
20 int main(int argc, char *argv[]) {
23 errs() << "Usage: " << argv[0] << " <input fd> <output fd>\n";
30 std::istringstream InFDStream(argv[1]), OutFDStream(argv[2]);
35 if (sys::DynamicLibrary::LoadLibraryPermanently(nullptr)) {
36 errs() << "Error loading program symbols.\n";
40 auto SymbolLookup = [](const std::string &Name) {
41 return RTDyldMemoryManager::getSymbolAddressInProcess(Name);
44 FDRPCChannel Channel(InFD, OutFD);
45 typedef remote::OrcRemoteTargetServer<FDRPCChannel, HostOrcArch> JITServer;
46 JITServer Server(Channel, SymbolLookup);
49 JITServer::JITProcId Id = JITServer::InvalidId;
50 if (auto EC = Server.getNextProcId(Id)) {
51 errs() << "Error: " << EC.message() << "\n";
55 case JITServer::TerminateSessionId:
58 if (auto EC = Server.handleKnownProcedure(Id)) {
59 errs() << "Error: " << EC.message() << "\n";