1//===- llvm/CodeGen/MachineModuleInfoImpls.h --------------------*- 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// This file defines object-file format specific implementations of
10// MachineModuleInfoImpl.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
15#define LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
16
17#include "llvm/ADT/DenseMap.h"
18#include "llvm/ADT/SetVector.h"
19#include "llvm/CodeGen/MachineModuleInfo.h"
20#include <cassert>
21
22namespace llvm {
23
24class MCSymbol;
25
26/// MachineModuleInfoMachO - This is a MachineModuleInfoImpl implementation
27/// for MachO targets.
28class MachineModuleInfoMachO : public MachineModuleInfoImpl {
29 /// GVStubs - Darwin '$non_lazy_ptr' stubs. The key is something like
30 /// "Lfoo$non_lazy_ptr", the value is something like "_foo". The extra bit
31 /// is true if this GV is external.
32 DenseMap<MCSymbol *, StubValueTy> GVStubs;
33
34 /// ThreadLocalGVStubs - Darwin '$non_lazy_ptr' stubs. The key is something
35 /// like "Lfoo$non_lazy_ptr", the value is something like "_foo". The extra
36 /// bit is true if this GV is external.
37 DenseMap<MCSymbol *, StubValueTy> ThreadLocalGVStubs;
38
39 virtual void anchor(); // Out of line virtual method.
40
41public:
42 MachineModuleInfoMachO(const MachineModuleInfo &) {}
43
44 StubValueTy &getGVStubEntry(MCSymbol *Sym) {
45 assert(Sym && "Key cannot be null");
46 return GVStubs[Sym];
47 }
48
49 StubValueTy &getThreadLocalGVStubEntry(MCSymbol *Sym) {
50 assert(Sym && "Key cannot be null");
51 return ThreadLocalGVStubs[Sym];
52 }
53
54 /// Accessor methods to return the set of stubs in sorted order.
55 SymbolListTy GetGVStubList() { return getSortedStubs(GVStubs); }
56 SymbolListTy GetThreadLocalGVStubList() {
57 return getSortedStubs(ThreadLocalGVStubs);
58 }
59};
60
61/// MachineModuleInfoELF - This is a MachineModuleInfoImpl implementation
62/// for ELF targets.
63class MachineModuleInfoELF : public MachineModuleInfoImpl {
64 /// GVStubs - These stubs are used to materialize global addresses in PIC
65 /// mode.
66 DenseMap<MCSymbol *, StubValueTy> GVStubs;
67
68 virtual void anchor(); // Out of line virtual method.
69
70public:
71 MachineModuleInfoELF(const MachineModuleInfo &) {}
72
73 StubValueTy &getGVStubEntry(MCSymbol *Sym) {
74 assert(Sym && "Key cannot be null");
75 return GVStubs[Sym];
76 }
77
78 /// Accessor methods to return the set of stubs in sorted order.
79
80 SymbolListTy GetGVStubList() { return getSortedStubs(GVStubs); }
81};
82
83/// MachineModuleInfoCOFF - This is a MachineModuleInfoImpl implementation
84/// for COFF targets.
85class MachineModuleInfoCOFF : public MachineModuleInfoImpl {
86 /// GVStubs - These stubs are used to materialize global addresses in PIC
87 /// mode.
88 DenseMap<MCSymbol *, StubValueTy> GVStubs;
89
90 virtual void anchor(); // Out of line virtual method.
91
92public:
93 MachineModuleInfoCOFF(const MachineModuleInfo &) {}
94
95 StubValueTy &getGVStubEntry(MCSymbol *Sym) {
96 assert(Sym && "Key cannot be null");
97 return GVStubs[Sym];
98 }
99
100 /// Accessor methods to return the set of stubs in sorted order.
101
102 SymbolListTy GetGVStubList() { return getSortedStubs(GVStubs); }
103};
104
105/// MachineModuleInfoWasm - This is a MachineModuleInfoImpl implementation
106/// for Wasm targets.
107class MachineModuleInfoWasm : public MachineModuleInfoImpl {
108 virtual void anchor(); // Out of line virtual method.
109
110public:
111 MachineModuleInfoWasm(const MachineModuleInfo &) {}
112
113 SetVector<StringRef> MachineSymbolsUsed;
114};
115
116} // end namespace llvm
117
118#endif // LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
119

source code of llvm/include/llvm/CodeGen/MachineModuleInfoImpls.h