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
19namespace llvm {
20namespace orc {
21
22class OrcX86_64 {
23public:
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
54