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 22namespace llvm { 23 24class MCSymbol; 25 26/// MachineModuleInfoMachO - This is a MachineModuleInfoImpl implementation 27/// for MachO targets. 28class 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 41public: 42 MachineModuleInfoMachO(const MachineModuleInfo &) {} 43 44 StubValueTy &getGVStubEntry(MCSymbol *Sym) { 45 assert(Sym && "Key cannot be null"); 46 return GVStubs[Sym]; 47 } 48 49 StubValueTy &getThreadLocalGVStubEntry(MCSymbol *Sym) { 50 assert(Sym && "Key cannot be null"); 51 return ThreadLocalGVStubs[Sym]; 52 } 53 54 /// Accessor methods to return the set of stubs in sorted order. 55 SymbolListTy GetGVStubList() { return getSortedStubs(GVStubs); } 56 SymbolListTy GetThreadLocalGVStubList() { 57 return getSortedStubs(ThreadLocalGVStubs); 58 } 59}; 60 61/// MachineModuleInfoELF - This is a MachineModuleInfoImpl implementation 62/// for ELF targets. 63class 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 70public: 71 MachineModuleInfoELF(const MachineModuleInfo &) {} 72 73 StubValueTy &getGVStubEntry(MCSymbol *Sym) { 74 assert(Sym && "Key cannot be null"); 75 return GVStubs[Sym]; 76 } 77 78 /// Accessor methods to return the set of stubs in sorted order. 79 80 SymbolListTy GetGVStubList() { return getSortedStubs(GVStubs); } 81}; 82 83} // end namespace llvm 84 85#endif // LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H 86