[ORC] Add NullResolver
[oota-llvm.git] / include / llvm / ExecutionEngine / Orc / OrcTargetSupport.h
1 //===-- OrcTargetSupport.h - Code to support specific targets  --*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // Target specific code for Orc, e.g. callback assembly.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef LLVM_EXECUTIONENGINE_ORC_ORCTARGETSUPPORT_H
15 #define LLVM_EXECUTIONENGINE_ORC_ORCTARGETSUPPORT_H
16
17 #include "IndirectionUtils.h"
18
19 namespace llvm {
20 namespace orc {
21
22 class OrcX86_64 {
23 public:
24   static const char *ResolverBlockName;
25
26   /// @brief Insert module-level inline callback asm into module M for the
27   /// symbols managed by JITResolveCallbackHandler J.
28   static void insertResolverBlock(Module &M,
29                                   JITCompileCallbackManagerBase &JCBM);
30
31   /// @brief Get a label name from the given index.
32   typedef std::function<std::string(unsigned)> LabelNameFtor;
33
34   /// @brief Insert the requested number of trampolines into the given module.
35   /// @param M Module to insert the call block into.
36   /// @param NumCalls Number of calls to create in the call block.
37   /// @param StartIndex Optional argument specifying the index suffix to start
38   ///                   with.
39   /// @return A functor that provides the symbol name for each entry in the call
40   ///         block.
41   ///
42   static LabelNameFtor insertCompileCallbackTrampolines(
43                                                     Module &M,
44                                                     TargetAddress TrampolineAddr,
45                                                     unsigned NumCalls,
46                                                     unsigned StartIndex = 0);
47
48 };
49
50 } // End namespace orc.
51 } // End namespace llvm.
52
53 #endif // LLVM_EXECUTIONENGINE_ORC_ORCTARGETSUPPORT_H