MachineModuleInfoImpls.h revision 203954
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/CodeGen/MachineModuleInfo.h" 19 20namespace llvm { 21 class MCSymbol; 22 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*, MCSymbol*> FnStubs; 29 30 /// GVStubs - Darwin '$non_lazy_ptr' stubs. The key is something like 31 /// "Lfoo$non_lazy_ptr", the value is something like "_foo". 32 DenseMap<MCSymbol*, MCSymbol*> GVStubs; 33 34 /// HiddenGVStubs - Darwin '$non_lazy_ptr' stubs. The key is something like 35 /// "Lfoo$non_lazy_ptr", the value is something like "_foo". Unlike GVStubs 36 /// these are for things with hidden visibility. 37 DenseMap<MCSymbol*, MCSymbol*> HiddenGVStubs; 38 39 virtual void Anchor(); // Out of line virtual method. 40 public: 41 MachineModuleInfoMachO(const MachineModuleInfo &) {} 42 43 MCSymbol *&getFnStubEntry(MCSymbol *Sym) { 44 assert(Sym && "Key cannot be null"); 45 return FnStubs[Sym]; 46 } 47 48 MCSymbol *&getGVStubEntry(MCSymbol *Sym) { 49 assert(Sym && "Key cannot be null"); 50 return GVStubs[Sym]; 51 } 52 53 MCSymbol *&getHiddenGVStubEntry(MCSymbol *Sym) { 54 assert(Sym && "Key cannot be null"); 55 return HiddenGVStubs[Sym]; 56 } 57 58 /// Accessor methods to return the set of stubs in sorted order. 59 SymbolListTy GetFnStubList() const { 60 return GetSortedStubs(FnStubs); 61 } 62 SymbolListTy GetGVStubList() const { 63 return GetSortedStubs(GVStubs); 64 } 65 SymbolListTy GetHiddenGVStubList() const { 66 return GetSortedStubs(HiddenGVStubs); 67 } 68 }; 69 70 /// MachineModuleInfoELF - This is a MachineModuleInfoImpl implementation 71 /// for ELF targets. 72 class MachineModuleInfoELF : public MachineModuleInfoImpl { 73 /// GVStubs - These stubs are used to materialize global addresses in PIC 74 /// mode. 75 DenseMap<MCSymbol*, MCSymbol*> GVStubs; 76 77 virtual void Anchor(); // Out of line virtual method. 78 public: 79 MachineModuleInfoELF(const MachineModuleInfo &) {} 80 81 MCSymbol *&getGVStubEntry(MCSymbol *Sym) { 82 assert(Sym && "Key cannot be null"); 83 return GVStubs[Sym]; 84 } 85 86 /// Accessor methods to return the set of stubs in sorted order. 87 88 SymbolListTy GetGVStubList() const { 89 return GetSortedStubs(GVStubs); 90 } 91 }; 92 93} // end namespace llvm 94 95#endif 96