1 //===-- RemoteJITUtils.h - Utilities for remote-JITing with LLI -*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // Utilities for remote-JITing with LLI.
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_TOOLS_LLI_REMOTEJITUTILS_H
15 #define LLVM_TOOLS_LLI_REMOTEJITUTILS_H
17 #include "llvm/ExecutionEngine/Orc/RawByteChannel.h"
18 #include "llvm/Support/Error.h"
21 #include <system_error>
23 #if !defined(_MSC_VER) && !defined(__MINGW32__)
29 /// RPC channel that reads from and writes from file descriptors.
30 class FDRPCChannel final : public llvm::orc::rpc::RawByteChannel {
32 FDRPCChannel(int InFD, int OutFD) : InFD(InFD), OutFD(OutFD) {}
34 llvm::Error readBytes(char *Dst, unsigned Size) override {
35 assert(Dst && "Attempt to read into null.");
36 ssize_t Completed = 0;
37 while (Completed < static_cast<ssize_t>(Size)) {
38 ssize_t Read = ::read(InFD, Dst + Completed, Size - Completed);
41 if (ErrNo == EAGAIN || ErrNo == EINTR)
44 return llvm::errorCodeToError(
45 std::error_code(errno, std::generic_category()));
49 return llvm::Error::success();
52 llvm::Error appendBytes(const char *Src, unsigned Size) override {
53 assert(Src && "Attempt to append from null.");
54 ssize_t Completed = 0;
55 while (Completed < static_cast<ssize_t>(Size)) {
56 ssize_t Written = ::write(OutFD, Src + Completed, Size - Completed);
59 if (ErrNo == EAGAIN || ErrNo == EINTR)
62 return llvm::errorCodeToError(
63 std::error_code(errno, std::generic_category()));
67 return llvm::Error::success();
70 llvm::Error send() override { return llvm::Error::success(); }
76 #endif // LLVM_TOOLS_LLI_REMOTEJITUTILS_H