summaryrefslogtreecommitdiff
path: root/tools/lli/ChildTarget/ChildTarget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lli/ChildTarget/ChildTarget.cpp')
-rw-r--r--tools/lli/ChildTarget/ChildTarget.cpp35
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;
}
}