MachineModuleInfoImpls.h revision 203954
1198090Srdivacky//===-- llvm/CodeGen/MachineModuleInfoImpls.h -------------------*- C++ -*-===// 2198090Srdivacky// 3198090Srdivacky// The LLVM Compiler Infrastructure 4198090Srdivacky// 5198090Srdivacky// This file is distributed under the University of Illinois Open Source 6198090Srdivacky// License. See LICENSE.TXT for details. 7198090Srdivacky// 8198090Srdivacky//===----------------------------------------------------------------------===// 9198090Srdivacky// 10198090Srdivacky// This file defines object-file format specific implementations of 11198090Srdivacky// MachineModuleInfoImpl. 12198090Srdivacky// 13198090Srdivacky//===----------------------------------------------------------------------===// 14198090Srdivacky 15198090Srdivacky#ifndef LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H 16198090Srdivacky#define LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H 17198090Srdivacky 18198090Srdivacky#include "llvm/CodeGen/MachineModuleInfo.h" 19198090Srdivacky 20198090Srdivackynamespace llvm { 21198090Srdivacky class MCSymbol; 22203954Srdivacky 23198090Srdivacky /// MachineModuleInfoMachO - This is a MachineModuleInfoImpl implementation 24198090Srdivacky /// for MachO targets. 25198090Srdivacky class MachineModuleInfoMachO : public MachineModuleInfoImpl { 26198090Srdivacky /// FnStubs - Darwin '$stub' stubs. The key is something like "Lfoo$stub", 27198090Srdivacky /// the value is something like "_foo". 28203954Srdivacky DenseMap<MCSymbol*, MCSymbol*> FnStubs; 29198090Srdivacky 30198090Srdivacky /// GVStubs - Darwin '$non_lazy_ptr' stubs. The key is something like 31198090Srdivacky /// "Lfoo$non_lazy_ptr", the value is something like "_foo". 32203954Srdivacky DenseMap<MCSymbol*, MCSymbol*> GVStubs; 33198090Srdivacky 34198090Srdivacky /// HiddenGVStubs - Darwin '$non_lazy_ptr' stubs. The key is something like 35198090Srdivacky /// "Lfoo$non_lazy_ptr", the value is something like "_foo". Unlike GVStubs 36198090Srdivacky /// these are for things with hidden visibility. 37203954Srdivacky DenseMap<MCSymbol*, MCSymbol*> HiddenGVStubs; 38198090Srdivacky 39198090Srdivacky virtual void Anchor(); // Out of line virtual method. 40198090Srdivacky public: 41198090Srdivacky MachineModuleInfoMachO(const MachineModuleInfo &) {} 42198090Srdivacky 43203954Srdivacky MCSymbol *&getFnStubEntry(MCSymbol *Sym) { 44198090Srdivacky assert(Sym && "Key cannot be null"); 45198090Srdivacky return FnStubs[Sym]; 46198090Srdivacky } 47198090Srdivacky 48203954Srdivacky MCSymbol *&getGVStubEntry(MCSymbol *Sym) { 49198090Srdivacky assert(Sym && "Key cannot be null"); 50198090Srdivacky return GVStubs[Sym]; 51198090Srdivacky } 52198090Srdivacky 53203954Srdivacky MCSymbol *&getHiddenGVStubEntry(MCSymbol *Sym) { 54198090Srdivacky assert(Sym && "Key cannot be null"); 55198090Srdivacky return HiddenGVStubs[Sym]; 56198090Srdivacky } 57203954Srdivacky 58198090Srdivacky /// Accessor methods to return the set of stubs in sorted order. 59198090Srdivacky SymbolListTy GetFnStubList() const { 60198090Srdivacky return GetSortedStubs(FnStubs); 61198090Srdivacky } 62198090Srdivacky SymbolListTy GetGVStubList() const { 63198090Srdivacky return GetSortedStubs(GVStubs); 64198090Srdivacky } 65198090Srdivacky SymbolListTy GetHiddenGVStubList() const { 66198090Srdivacky return GetSortedStubs(HiddenGVStubs); 67198090Srdivacky } 68198090Srdivacky }; 69203954Srdivacky 70203954Srdivacky /// MachineModuleInfoELF - This is a MachineModuleInfoImpl implementation 71203954Srdivacky /// for ELF targets. 72203954Srdivacky class MachineModuleInfoELF : public MachineModuleInfoImpl { 73203954Srdivacky /// GVStubs - These stubs are used to materialize global addresses in PIC 74203954Srdivacky /// mode. 75203954Srdivacky DenseMap<MCSymbol*, MCSymbol*> GVStubs; 76203954Srdivacky 77203954Srdivacky virtual void Anchor(); // Out of line virtual method. 78203954Srdivacky public: 79203954Srdivacky MachineModuleInfoELF(const MachineModuleInfo &) {} 80203954Srdivacky 81203954Srdivacky MCSymbol *&getGVStubEntry(MCSymbol *Sym) { 82203954Srdivacky assert(Sym && "Key cannot be null"); 83203954Srdivacky return GVStubs[Sym]; 84203954Srdivacky } 85203954Srdivacky 86203954Srdivacky /// Accessor methods to return the set of stubs in sorted order. 87203954Srdivacky 88203954Srdivacky SymbolListTy GetGVStubList() const { 89203954Srdivacky return GetSortedStubs(GVStubs); 90203954Srdivacky } 91203954Srdivacky }; 92203954Srdivacky 93198090Srdivacky} // end namespace llvm 94198090Srdivacky 95198090Srdivacky#endif 96