Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 1
//===- EPCDebugObjectRegistrar.h - EPC-based debug registration -*- 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
// ExecutorProcessControl based registration of debug objects.
10
//
11
//===----------------------------------------------------------------------===//
12
 
13
#ifndef LLVM_EXECUTIONENGINE_ORC_EPCDEBUGOBJECTREGISTRAR_H
14
#define LLVM_EXECUTIONENGINE_ORC_EPCDEBUGOBJECTREGISTRAR_H
15
 
16
#include "llvm/ExecutionEngine/JITSymbol.h"
17
#include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"
18
#include "llvm/ExecutionEngine/Orc/Shared/WrapperFunctionUtils.h"
19
#include "llvm/Support/Error.h"
20
#include "llvm/Support/Memory.h"
21
 
22
#include <cstdint>
23
#include <memory>
24
#include <vector>
25
 
26
namespace llvm {
27
namespace orc {
28
 
29
class ExecutionSession;
30
 
31
/// Abstract interface for registering debug objects in the executor process.
32
class DebugObjectRegistrar {
33
public:
34
  virtual Error registerDebugObject(ExecutorAddrRange TargetMem) = 0;
35
  virtual ~DebugObjectRegistrar() = default;
36
};
37
 
38
/// Use ExecutorProcessControl to register debug objects locally or in a remote
39
/// executor process.
40
class EPCDebugObjectRegistrar : public DebugObjectRegistrar {
41
public:
42
  EPCDebugObjectRegistrar(ExecutionSession &ES, ExecutorAddr RegisterFn)
43
      : ES(ES), RegisterFn(RegisterFn) {}
44
 
45
  Error registerDebugObject(ExecutorAddrRange TargetMem) override;
46
 
47
private:
48
  ExecutionSession &ES;
49
  ExecutorAddr RegisterFn;
50
};
51
 
52
/// Create a ExecutorProcessControl-based DebugObjectRegistrar that emits debug
53
/// objects to the GDB JIT interface. This will use the EPC's lookupSymbols
54
/// method to find the registration/deregistration  funciton addresses by name.
55
///
56
/// If RegistrationFunctionsDylib is non-None then it will be searched to find
57
/// the registration functions. If it is None then the process dylib will be
58
/// loaded to find the registration functions.
59
Expected<std::unique_ptr<EPCDebugObjectRegistrar>> createJITLoaderGDBRegistrar(
60
    ExecutionSession &ES,
61
    std::optional<ExecutorAddr> RegistrationFunctionDylib = std::nullopt);
62
 
63
} // end namespace orc
64
} // end namespace llvm
65
 
66
#endif // LLVM_EXECUTIONENGINE_ORC_EPCDEBUGOBJECTREGISTRAR_H