1
//===-- llvm/CodeGen/MachineModuleInfoImpls.h -------------------*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This file defines object-file format specific implementations of
11
// MachineModuleInfoImpl.
13
//===----------------------------------------------------------------------===//
15
#ifndef LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
16
#define LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
18
#include "llvm/CodeGen/MachineModuleInfo.h"
23
/// MachineModuleInfoMachO - This is a MachineModuleInfoImpl implementation
24
/// for MachO targets.
25
class MachineModuleInfoMachO : public MachineModuleInfoImpl {
26
/// FnStubs - Darwin '$stub' stubs. The key is something like "Lfoo$stub",
27
/// the value is something like "_foo".
28
DenseMap<MCSymbol*, StubValueTy> FnStubs;
30
/// GVStubs - Darwin '$non_lazy_ptr' stubs. The key is something like
31
/// "Lfoo$non_lazy_ptr", the value is something like "_foo". The extra bit
32
/// is true if this GV is external.
33
DenseMap<MCSymbol*, StubValueTy> GVStubs;
35
/// HiddenGVStubs - Darwin '$non_lazy_ptr' stubs. The key is something like
36
/// "Lfoo$non_lazy_ptr", the value is something like "_foo". Unlike GVStubs
37
/// these are for things with hidden visibility. The extra bit is true if
38
/// this GV is external.
39
DenseMap<MCSymbol*, StubValueTy> HiddenGVStubs;
41
virtual void Anchor(); // Out of line virtual method.
43
MachineModuleInfoMachO(const MachineModuleInfo &) {}
45
StubValueTy &getFnStubEntry(MCSymbol *Sym) {
46
assert(Sym && "Key cannot be null");
50
StubValueTy &getGVStubEntry(MCSymbol *Sym) {
51
assert(Sym && "Key cannot be null");
55
StubValueTy &getHiddenGVStubEntry(MCSymbol *Sym) {
56
assert(Sym && "Key cannot be null");
57
return HiddenGVStubs[Sym];
60
/// Accessor methods to return the set of stubs in sorted order.
61
SymbolListTy GetFnStubList() const {
62
return GetSortedStubs(FnStubs);
64
SymbolListTy GetGVStubList() const {
65
return GetSortedStubs(GVStubs);
67
SymbolListTy GetHiddenGVStubList() const {
68
return GetSortedStubs(HiddenGVStubs);
72
/// MachineModuleInfoELF - This is a MachineModuleInfoImpl implementation
74
class MachineModuleInfoELF : public MachineModuleInfoImpl {
75
/// GVStubs - These stubs are used to materialize global addresses in PIC
77
DenseMap<MCSymbol*, StubValueTy> GVStubs;
79
virtual void Anchor(); // Out of line virtual method.
81
MachineModuleInfoELF(const MachineModuleInfo &) {}
83
StubValueTy &getGVStubEntry(MCSymbol *Sym) {
84
assert(Sym && "Key cannot be null");
88
/// Accessor methods to return the set of stubs in sorted order.
90
SymbolListTy GetGVStubList() const {
91
return GetSortedStubs(GVStubs);
95
} // end namespace llvm