Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/tools/lli/ChildTarget/ChildTarget.cpp
35292 views
1
//===----------- ChildTarget.cpp - Out-of-proc executor for lli -----------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// Simple out-of-process executor for lli.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#include "llvm/ExecutionEngine/Orc/TargetProcess/JITLoaderGDB.h"
14
#include "llvm/ExecutionEngine/Orc/TargetProcess/RegisterEHFrames.h"
15
#include "llvm/ExecutionEngine/Orc/TargetProcess/SimpleExecutorMemoryManager.h"
16
#include "llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h"
17
#include "llvm/Support/DynamicLibrary.h"
18
#include "llvm/Support/Error.h"
19
#include "llvm/Support/MathExtras.h"
20
#include "llvm/Support/raw_ostream.h"
21
#include <cstring>
22
#include <sstream>
23
24
using namespace llvm;
25
using namespace llvm::orc;
26
27
ExitOnError ExitOnErr;
28
29
int main(int argc, char *argv[]) {
30
#if LLVM_ENABLE_THREADS
31
32
if (argc != 3) {
33
errs() << "Usage: " << argv[0] << " <input fd> <output fd>\n";
34
return 1;
35
}
36
37
if (sys::DynamicLibrary::LoadLibraryPermanently(nullptr)) {
38
errs() << "Error loading program symbols.\n";
39
return 1;
40
}
41
42
ExitOnErr.setBanner(std::string(argv[0]) + ": ");
43
44
int InFD = 0;
45
int OutFD = 0;
46
{
47
std::istringstream InFDStream(argv[1]), OutFDStream(argv[2]);
48
InFDStream >> InFD;
49
OutFDStream >> OutFD;
50
}
51
52
auto Server =
53
ExitOnErr(SimpleRemoteEPCServer::Create<FDSimpleRemoteEPCTransport>(
54
[](SimpleRemoteEPCServer::Setup &S) -> Error {
55
S.setDispatcher(
56
std::make_unique<SimpleRemoteEPCServer::ThreadDispatcher>());
57
S.bootstrapSymbols() =
58
SimpleRemoteEPCServer::defaultBootstrapSymbols();
59
S.services().push_back(
60
std::make_unique<rt_bootstrap::SimpleExecutorMemoryManager>());
61
return Error::success();
62
},
63
InFD, OutFD));
64
65
ExitOnErr(Server->waitForDisconnect());
66
67
return 0;
68
69
#else
70
errs() << argv[0]
71
<< " error: this tool requires threads, but LLVM was "
72
"built with LLVM_ENABLE_THREADS=Off\n";
73
return 1;
74
#endif
75
}
76
77