Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===- llvm/CodeGen/MachineModuleInfoImpls.h --------------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // This file defines object-file format specific implementations of
  10. // MachineModuleInfoImpl.
  11. //
  12. //===----------------------------------------------------------------------===//
  13.  
  14. #ifndef LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
  15. #define LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
  16.  
  17. #include "llvm/ADT/DenseMap.h"
  18. #include "llvm/ADT/StringSet.h"
  19. #include "llvm/CodeGen/MachineModuleInfo.h"
  20. #include <cassert>
  21.  
  22. namespace llvm {
  23.  
  24. class MCSymbol;
  25.  
  26. /// MachineModuleInfoMachO - This is a MachineModuleInfoImpl implementation
  27. /// for MachO targets.
  28. class 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.  
  41. public:
  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.
  63. class 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.  
  70. public:
  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. /// MachineModuleInfoCOFF - This is a MachineModuleInfoImpl implementation
  84. /// for COFF targets.
  85. class MachineModuleInfoCOFF : public MachineModuleInfoImpl {
  86.   /// GVStubs - These stubs are used to materialize global addresses in PIC
  87.   /// mode.
  88.   DenseMap<MCSymbol *, StubValueTy> GVStubs;
  89.  
  90.   virtual void anchor(); // Out of line virtual method.
  91.  
  92. public:
  93.   MachineModuleInfoCOFF(const MachineModuleInfo &) {}
  94.  
  95.   StubValueTy &getGVStubEntry(MCSymbol *Sym) {
  96.     assert(Sym && "Key cannot be null");
  97.     return GVStubs[Sym];
  98.   }
  99.  
  100.   /// Accessor methods to return the set of stubs in sorted order.
  101.  
  102.   SymbolListTy GetGVStubList() { return getSortedStubs(GVStubs); }
  103. };
  104.  
  105. /// MachineModuleInfoWasm - This is a MachineModuleInfoImpl implementation
  106. /// for Wasm targets.
  107. class MachineModuleInfoWasm : public MachineModuleInfoImpl {
  108.   virtual void anchor(); // Out of line virtual method.
  109.  
  110. public:
  111.   MachineModuleInfoWasm(const MachineModuleInfo &) {}
  112.  
  113.   StringSet<> MachineSymbolsUsed;
  114. };
  115.  
  116. } // end namespace llvm
  117.  
  118. #endif // LLVM_CODEGEN_MACHINEMODULEINFOIMPLS_H
  119.