Line data Source code
1 : //===- llvm/CodeGen/MachineModuleInfoImpls.h --------------------*- 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 : // This file defines object-file format specific implementations of
11 : // MachineModuleInfoImpl.
12 : //
13 : //===----------------------------------------------------------------------===//
14 :
15 : #ifndef LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
16 : #define LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
17 :
18 : #include "llvm/ADT/DenseMap.h"
19 : #include "llvm/CodeGen/MachineModuleInfo.h"
20 : #include <cassert>
21 :
22 : namespace llvm {
23 :
24 : class MCSymbol;
25 :
26 : /// MachineModuleInfoMachO - This is a MachineModuleInfoImpl implementation
27 : /// for MachO targets.
28 : class 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 :
41 : public:
42 0 : MachineModuleInfoMachO(const MachineModuleInfo &) {}
43 :
44 : StubValueTy &getGVStubEntry(MCSymbol *Sym) {
45 : assert(Sym && "Key cannot be null");
46 1490 : return GVStubs[Sym];
47 : }
48 :
49 : StubValueTy &getThreadLocalGVStubEntry(MCSymbol *Sym) {
50 : assert(Sym && "Key cannot be null");
51 14 : return ThreadLocalGVStubs[Sym];
52 : }
53 :
54 : /// Accessor methods to return the set of stubs in sorted order.
55 2167 : SymbolListTy GetGVStubList() { return getSortedStubs(GVStubs); }
56 : SymbolListTy GetThreadLocalGVStubList() {
57 768 : return getSortedStubs(ThreadLocalGVStubs);
58 : }
59 : };
60 :
61 : /// MachineModuleInfoELF - This is a MachineModuleInfoImpl implementation
62 : /// for ELF targets.
63 : class 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 :
70 : public:
71 1921 : MachineModuleInfoELF(const MachineModuleInfo &) {}
72 :
73 : StubValueTy &getGVStubEntry(MCSymbol *Sym) {
74 : assert(Sym && "Key cannot be null");
75 53 : return GVStubs[Sym];
76 : }
77 :
78 : /// Accessor methods to return the set of stubs in sorted order.
79 :
80 23592 : SymbolListTy GetGVStubList() { return getSortedStubs(GVStubs); }
81 : };
82 :
83 : /// MachineModuleInfoCOFF - This is a MachineModuleInfoImpl implementation
84 : /// for COFF targets.
85 : class 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 :
92 : public:
93 0 : MachineModuleInfoCOFF(const MachineModuleInfo &) {}
94 :
95 : StubValueTy &getGVStubEntry(MCSymbol *Sym) {
96 : assert(Sym && "Key cannot be null");
97 80 : return GVStubs[Sym];
98 : }
99 :
100 : /// Accessor methods to return the set of stubs in sorted order.
101 :
102 760 : SymbolListTy GetGVStubList() { return getSortedStubs(GVStubs); }
103 : };
104 :
105 : } // end namespace llvm
106 :
107 : #endif // LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
|