1//===------ OrcError.h - Reject symbol lookup requests ------*- C++ -*-===//
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// Define an error category, error codes, and helper utilities for Orc.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_EXECUTIONENGINE_ORC_SHARED_ORCERROR_H
14#define LLVM_EXECUTIONENGINE_ORC_SHARED_ORCERROR_H
15
16#include "llvm/Support/Error.h"
17#include "llvm/Support/raw_ostream.h"
18#include <string>
19#include <system_error>
20
21namespace llvm {
22namespace orc {
23
24enum class OrcErrorCode : int {
25 // RPC Errors
26 UnknownORCError = 1,
27 DuplicateDefinition,
28 JITSymbolNotFound,
29 RemoteAllocatorDoesNotExist,
30 RemoteAllocatorIdAlreadyInUse,
31 RemoteMProtectAddrUnrecognized,
32 RemoteIndirectStubsOwnerDoesNotExist,
33 RemoteIndirectStubsOwnerIdAlreadyInUse,
34 RPCConnectionClosed,
35 RPCCouldNotNegotiateFunction,
36 RPCResponseAbandoned,
37 UnexpectedRPCCall,
38 UnexpectedRPCResponse,
39 UnknownErrorCodeFromRemote,
40 UnknownResourceHandle,
41 MissingSymbolDefinitions,
42 UnexpectedSymbolDefinitions,
43};
44
45std::error_code orcError(OrcErrorCode ErrCode);
46
47class DuplicateDefinition : public ErrorInfo<DuplicateDefinition> {
48public:
49 static char ID;
50
51 DuplicateDefinition(std::string SymbolName);
52 std::error_code convertToErrorCode() const override;
53 void log(raw_ostream &OS) const override;
54 const std::string &getSymbolName() const;
55private:
56 std::string SymbolName;
57};
58
59class JITSymbolNotFound : public ErrorInfo<JITSymbolNotFound> {
60public:
61 static char ID;
62
63 JITSymbolNotFound(std::string SymbolName);
64 std::error_code convertToErrorCode() const override;
65 void log(raw_ostream &OS) const override;
66 const std::string &getSymbolName() const;
67private:
68 std::string SymbolName;
69};
70
71} // End namespace orc.
72} // End namespace llvm.
73
74#endif // LLVM_EXECUTIONENGINE_ORC_SHARED_ORCERROR_H
75