| //===-- llvm/CodeGen/MachineModuleInfoImpls.h -------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines object-file format specific implementations of |
| // MachineModuleInfoImpl. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H |
| #define LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H |
| |
| #include "llvm/CodeGen/MachineModuleInfo.h" |
| |
| namespace llvm { |
| class MCSymbol; |
| |
| /// MachineModuleInfoMachO - This is a MachineModuleInfoImpl implementation |
| /// for MachO targets. |
| class MachineModuleInfoMachO : public MachineModuleInfoImpl { |
| /// FnStubs - Darwin '$stub' stubs. The key is something like "Lfoo$stub", |
| /// the value is something like "_foo". |
| DenseMap<MCSymbol*, StubValueTy> FnStubs; |
| |
| /// GVStubs - Darwin '$non_lazy_ptr' stubs. The key is something like |
| /// "Lfoo$non_lazy_ptr", the value is something like "_foo". The extra bit |
| /// is true if this GV is external. |
| DenseMap<MCSymbol*, StubValueTy> GVStubs; |
| |
| /// HiddenGVStubs - Darwin '$non_lazy_ptr' stubs. The key is something like |
| /// "Lfoo$non_lazy_ptr", the value is something like "_foo". Unlike GVStubs |
| /// these are for things with hidden visibility. The extra bit is true if |
| /// this GV is external. |
| DenseMap<MCSymbol*, StubValueTy> HiddenGVStubs; |
| |
| virtual void Anchor(); // Out of line virtual method. |
| public: |
| MachineModuleInfoMachO(const MachineModuleInfo &) {} |
| |
| StubValueTy &getFnStubEntry(MCSymbol *Sym) { |
| assert(Sym && "Key cannot be null"); |
| return FnStubs[Sym]; |
| } |
| |
| StubValueTy &getGVStubEntry(MCSymbol *Sym) { |
| assert(Sym && "Key cannot be null"); |
| return GVStubs[Sym]; |
| } |
| |
| StubValueTy &getHiddenGVStubEntry(MCSymbol *Sym) { |
| assert(Sym && "Key cannot be null"); |
| return HiddenGVStubs[Sym]; |
| } |
| |
| /// Accessor methods to return the set of stubs in sorted order. |
| SymbolListTy GetFnStubList() const { |
| return GetSortedStubs(FnStubs); |
| } |
| SymbolListTy GetGVStubList() const { |
| return GetSortedStubs(GVStubs); |
| } |
| SymbolListTy GetHiddenGVStubList() const { |
| return GetSortedStubs(HiddenGVStubs); |
| } |
| }; |
| |
| /// MachineModuleInfoELF - This is a MachineModuleInfoImpl implementation |
| /// for ELF targets. |
| class MachineModuleInfoELF : public MachineModuleInfoImpl { |
| /// GVStubs - These stubs are used to materialize global addresses in PIC |
| /// mode. |
| DenseMap<MCSymbol*, StubValueTy> GVStubs; |
| |
| virtual void Anchor(); // Out of line virtual method. |
| public: |
| MachineModuleInfoELF(const MachineModuleInfo &) {} |
| |
| StubValueTy &getGVStubEntry(MCSymbol *Sym) { |
| assert(Sym && "Key cannot be null"); |
| return GVStubs[Sym]; |
| } |
| |
| /// Accessor methods to return the set of stubs in sorted order. |
| |
| SymbolListTy GetGVStubList() const { |
| return GetSortedStubs(GVStubs); |
| } |
| }; |
| |
| } // end namespace llvm |
| |
| #endif |