- //===- llvm/CodeGen/MachineModuleInfoImpls.h --------------------*- C++ -*-===// 
- // 
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
- // See https://llvm.org/LICENSE.txt for license information. 
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
- // 
- //===----------------------------------------------------------------------===// 
- // 
- // This file defines object-file format specific implementations of 
- // MachineModuleInfoImpl. 
- // 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H 
- #define LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H 
-   
- #include "llvm/ADT/DenseMap.h" 
- #include "llvm/ADT/StringSet.h" 
- #include "llvm/CodeGen/MachineModuleInfo.h" 
- #include <cassert> 
-   
- namespace llvm { 
-   
- class MCSymbol; 
-   
- /// MachineModuleInfoMachO - This is a MachineModuleInfoImpl implementation 
- /// for MachO targets. 
- class MachineModuleInfoMachO : public MachineModuleInfoImpl { 
-   /// 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; 
-   
-   /// ThreadLocalGVStubs - 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> ThreadLocalGVStubs; 
-   
-   virtual void anchor(); // Out of line virtual method. 
-   
- public: 
-   MachineModuleInfoMachO(const MachineModuleInfo &) {} 
-   
-   StubValueTy &getGVStubEntry(MCSymbol *Sym) { 
-     assert(Sym && "Key cannot be null"); 
-     return GVStubs[Sym]; 
-   } 
-   
-   StubValueTy &getThreadLocalGVStubEntry(MCSymbol *Sym) { 
-     assert(Sym && "Key cannot be null"); 
-     return ThreadLocalGVStubs[Sym]; 
-   } 
-   
-   /// Accessor methods to return the set of stubs in sorted order. 
-   SymbolListTy GetGVStubList() { return getSortedStubs(GVStubs); } 
-   SymbolListTy GetThreadLocalGVStubList() { 
-     return getSortedStubs(ThreadLocalGVStubs); 
-   } 
- }; 
-   
- /// 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() { return getSortedStubs(GVStubs); } 
- }; 
-   
- /// MachineModuleInfoCOFF - This is a MachineModuleInfoImpl implementation 
- /// for COFF targets. 
- class MachineModuleInfoCOFF : 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: 
-   MachineModuleInfoCOFF(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() { return getSortedStubs(GVStubs); } 
- }; 
-   
- /// MachineModuleInfoWasm - This is a MachineModuleInfoImpl implementation 
- /// for Wasm targets. 
- class MachineModuleInfoWasm : public MachineModuleInfoImpl { 
-   virtual void anchor(); // Out of line virtual method. 
-   
- public: 
-   MachineModuleInfoWasm(const MachineModuleInfo &) {} 
-   
-   StringSet<> MachineSymbolsUsed; 
- }; 
-   
- } // end namespace llvm 
-   
- #endif // LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H 
-