Mercurial > hg > CbC > CbC_llvm
view llvm/tools/lli/ChildTarget/ChildTarget.cpp @ 181:df311c476dd5
CreateIdentifierInfo in ParseCbC (not yet worked)
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 31 May 2020 12:30:11 +0900 |
parents | 1d019706d866 |
children | 2e18cbf3894f |
line wrap: on
line source
#include "llvm/ExecutionEngine/Orc/OrcABISupport.h" #include "llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h" #include "llvm/Support/Debug.h" #include "llvm/Support/DynamicLibrary.h" #include "llvm/Support/Process.h" #include <sstream> #include "../RemoteJITUtils.h" using namespace llvm; using namespace llvm::orc; using namespace llvm::sys; #ifdef __x86_64__ typedef OrcX86_64_SysV HostOrcArch; #else typedef OrcGenericABI HostOrcArch; #endif ExitOnError ExitOnErr; int main(int argc, char *argv[]) { if (argc != 3) { errs() << "Usage: " << argv[0] << " <input fd> <output fd>\n"; return 1; } ExitOnErr.setBanner(std::string(argv[0]) + ":"); int InFD; int OutFD; { std::istringstream InFDStream(argv[1]), OutFDStream(argv[2]); InFDStream >> InFD; OutFDStream >> OutFD; } if (sys::DynamicLibrary::LoadLibraryPermanently(nullptr)) { errs() << "Error loading program symbols.\n"; return 1; } auto SymbolLookup = [](const std::string &Name) { 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); }; FDRawChannel Channel(InFD, OutFD); typedef remote::OrcRemoteTargetServer<FDRawChannel, HostOrcArch> JITServer; JITServer Server(Channel, SymbolLookup, RegisterEHFrames, DeregisterEHFrames); while (!Server.receivedTerminate()) ExitOnErr(Server.handleOne()); close(InFD); close(OutFD); return 0; }