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
//===------ Mangling.h -- Name Mangling Utilities for ORC -------*- 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
// Name mangling utilities for ORC.
10
//
11
//===----------------------------------------------------------------------===//
12
 
13
#ifndef LLVM_EXECUTIONENGINE_ORC_MANGLING_H
14
#define LLVM_EXECUTIONENGINE_ORC_MANGLING_H
15
 
16
#include "llvm/ExecutionEngine/Orc/Core.h"
17
#include "llvm/ExecutionEngine/Orc/ThreadSafeModule.h"
18
#include "llvm/IR/Module.h"
19
#include "llvm/Support/MemoryBuffer.h"
20
 
21
namespace llvm {
22
namespace orc {
23
 
24
/// Mangles symbol names then uniques them in the context of an
25
/// ExecutionSession.
26
class MangleAndInterner {
27
public:
28
  MangleAndInterner(ExecutionSession &ES, const DataLayout &DL);
29
  SymbolStringPtr operator()(StringRef Name);
30
 
31
private:
32
  ExecutionSession &ES;
33
  const DataLayout &DL;
34
};
35
 
36
/// Maps IR global values to their linker symbol names / flags.
37
///
38
/// This utility can be used when adding new IR globals in the JIT.
39
class IRSymbolMapper {
40
public:
41
  struct ManglingOptions {
42
    bool EmulatedTLS = false;
43
  };
44
 
45
  using SymbolNameToDefinitionMap = std::map<SymbolStringPtr, GlobalValue *>;
46
 
47
  /// Add mangled symbols for the given GlobalValues to SymbolFlags.
48
  /// If a SymbolToDefinitionMap pointer is supplied then it will be populated
49
  /// with Name-to-GlobalValue* mappings. Note that this mapping is not
50
  /// necessarily one-to-one: thread-local GlobalValues, for example, may
51
  /// produce more than one symbol, in which case the map will contain duplicate
52
  /// values.
53
  static void add(ExecutionSession &ES, const ManglingOptions &MO,
54
                  ArrayRef<GlobalValue *> GVs, SymbolFlagsMap &SymbolFlags,
55
                  SymbolNameToDefinitionMap *SymbolToDefinition = nullptr);
56
};
57
 
58
} // End namespace orc
59
} // End namespace llvm
60
 
61
#endif // LLVM_EXECUTIONENGINE_ORC_MANGLING_H