LLVM 20.0.0git
MachineModuleInfoImpls.h
Go to the documentation of this file.
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"
20#include <cassert>
21
22namespace llvm {
23
24class MCSymbol;
25
26/// MachineModuleInfoMachO - This is a MachineModuleInfoImpl implementation
27/// for MachO targets.
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.
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 /// Darwin '$auth_ptr' stubs. The key is the stub symbol, like
40 /// "Lfoo$auth_ptr$ib$12". The value is the MCExpr representing that
41 /// signed pointer, something like "_foo@AUTH(ib, 12)".
43
44 virtual void anchor(); // Out of line virtual method.
45
46public:
48
50 assert(Sym && "Key cannot be null");
51 return GVStubs[Sym];
52 }
53
55 assert(Sym && "Key cannot be null");
56 return ThreadLocalGVStubs[Sym];
57 }
58
60 assert(Sym && "Key cannot be null");
61 return AuthPtrStubs[Sym];
62 }
63
64 /// Accessor methods to return the set of stubs in sorted order.
67 return getSortedStubs(ThreadLocalGVStubs);
68 }
69
71 return getSortedExprStubs(AuthPtrStubs);
72 }
73};
74
75/// MachineModuleInfoELF - This is a MachineModuleInfoImpl implementation
76/// for ELF targets.
78 /// GVStubs - These stubs are used to materialize global addresses in PIC
79 /// mode.
81
82 /// AuthPtrStubs - These stubs are used to materialize signed addresses for
83 /// extern_weak symbols.
85
86 /// HasSignedPersonality is true if the corresponding IR module has the
87 /// "ptrauth-sign-personality" flag set to 1.
88 bool HasSignedPersonality = false;
89
90 virtual void anchor(); // Out of line virtual method.
91
92public:
94
96 assert(Sym && "Key cannot be null");
97 return GVStubs[Sym];
98 }
99
101 assert(Sym && "Key cannot be null");
102 return AuthPtrStubs[Sym];
103 }
104
105 /// Accessor methods to return the set of stubs in sorted order.
106
108
110 return getSortedExprStubs(AuthPtrStubs);
111 }
112
113 bool hasSignedPersonality() const { return HasSignedPersonality; }
114};
115
116/// MachineModuleInfoCOFF - This is a MachineModuleInfoImpl implementation
117/// for COFF targets.
119 /// GVStubs - These stubs are used to materialize global addresses in PIC
120 /// mode.
122
123 virtual void anchor(); // Out of line virtual method.
124
125public:
127
129 assert(Sym && "Key cannot be null");
130 return GVStubs[Sym];
131 }
132
133 /// Accessor methods to return the set of stubs in sorted order.
134
136};
137
138/// MachineModuleInfoWasm - This is a MachineModuleInfoImpl implementation
139/// for Wasm targets.
141 virtual void anchor(); // Out of line virtual method.
142
143public:
145
147};
148
149} // end namespace llvm
150
151#endif // LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
This file defines the DenseMap class.
Symbol * Sym
Definition: ELF_riscv.cpp:479
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
This file implements a set that has insertion order iteration characteristics.
Base class for the full range of assembler expressions which are needed for parsing.
Definition: MCExpr.h:34
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition: MCSymbol.h:41
MachineModuleInfoCOFF - This is a MachineModuleInfoImpl implementation for COFF targets.
StubValueTy & getGVStubEntry(MCSymbol *Sym)
SymbolListTy GetGVStubList()
Accessor methods to return the set of stubs in sorted order.
MachineModuleInfoCOFF(const MachineModuleInfo &)
MachineModuleInfoELF - This is a MachineModuleInfoImpl implementation for ELF targets.
const MCExpr *& getAuthPtrStubEntry(MCSymbol *Sym)
StubValueTy & getGVStubEntry(MCSymbol *Sym)
SymbolListTy GetGVStubList()
Accessor methods to return the set of stubs in sorted order.
This class can be derived from and used by targets to hold private target-specific information for ea...
std::vector< std::pair< MCSymbol *, StubValueTy > > SymbolListTy
static SymbolListTy getSortedStubs(DenseMap< MCSymbol *, StubValueTy > &)
Return the entries from a DenseMap in a deterministic sorted orer.
std::vector< std::pair< MCSymbol *, const MCExpr * > > ExprStubListTy
A variant of SymbolListTy where the stub is a generalized MCExpr.
static ExprStubListTy getSortedExprStubs(DenseMap< MCSymbol *, const MCExpr * > &)
Return the entries from a DenseMap in a deterministic sorted orer.
MachineModuleInfoMachO - This is a MachineModuleInfoImpl implementation for MachO targets.
const MCExpr *& getAuthPtrStubEntry(MCSymbol *Sym)
StubValueTy & getGVStubEntry(MCSymbol *Sym)
StubValueTy & getThreadLocalGVStubEntry(MCSymbol *Sym)
SymbolListTy GetGVStubList()
Accessor methods to return the set of stubs in sorted order.
MachineModuleInfoMachO(const MachineModuleInfo &)
MachineModuleInfoWasm - This is a MachineModuleInfoImpl implementation for Wasm targets.
MachineModuleInfoWasm(const MachineModuleInfo &)
SetVector< StringRef > MachineSymbolsUsed
This class contains meta information specific to a module.
PointerIntPair - This class implements a pair of a pointer and small integer.
A vector that has set insertion semantics.
Definition: SetVector.h:57
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18