Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //===- DbiStream.h - PDB Dbi Stream (Stream 3) Access -----------*- 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. #ifndef LLVM_DEBUGINFO_PDB_NATIVE_DBISTREAM_H
  10. #define LLVM_DEBUGINFO_PDB_NATIVE_DBISTREAM_H
  11.  
  12. #include "llvm/DebugInfo/CodeView/DebugFrameDataSubsection.h"
  13. #include "llvm/DebugInfo/PDB/Native/DbiModuleList.h"
  14. #include "llvm/DebugInfo/PDB/Native/PDBStringTable.h"
  15. #include "llvm/DebugInfo/PDB/Native/RawConstants.h"
  16. #include "llvm/DebugInfo/PDB/PDBTypes.h"
  17. #include "llvm/Support/BinaryStreamArray.h"
  18. #include "llvm/Support/BinaryStreamRef.h"
  19. #include "llvm/Support/Endian.h"
  20. #include "llvm/Support/Error.h"
  21.  
  22. namespace llvm {
  23. class BinaryStream;
  24. namespace object {
  25. struct FpoData;
  26. struct coff_section;
  27. }
  28. namespace msf {
  29. class MappedBlockStream;
  30. }
  31. namespace pdb {
  32. struct DbiStreamHeader;
  33. struct SecMapEntry;
  34. struct SectionContrib2;
  35. struct SectionContrib;
  36. class PDBFile;
  37. class ISectionContribVisitor;
  38.  
  39. class DbiStream {
  40.   friend class DbiStreamBuilder;
  41.  
  42. public:
  43.   explicit DbiStream(std::unique_ptr<BinaryStream> Stream);
  44.   ~DbiStream();
  45.   Error reload(PDBFile *Pdb);
  46.  
  47.   PdbRaw_DbiVer getDbiVersion() const;
  48.   uint32_t getAge() const;
  49.   uint16_t getPublicSymbolStreamIndex() const;
  50.   uint16_t getGlobalSymbolStreamIndex() const;
  51.  
  52.   uint16_t getFlags() const;
  53.   bool isIncrementallyLinked() const;
  54.   bool hasCTypes() const;
  55.   bool isStripped() const;
  56.  
  57.   uint16_t getBuildNumber() const;
  58.   uint16_t getBuildMajorVersion() const;
  59.   uint16_t getBuildMinorVersion() const;
  60.  
  61.   uint16_t getPdbDllRbld() const;
  62.   uint32_t getPdbDllVersion() const;
  63.  
  64.   uint32_t getSymRecordStreamIndex() const;
  65.  
  66.   PDB_Machine getMachineType() const;
  67.  
  68.   const DbiStreamHeader *getHeader() const { return Header; }
  69.  
  70.   BinarySubstreamRef getSectionContributionData() const;
  71.   BinarySubstreamRef getSecMapSubstreamData() const;
  72.   BinarySubstreamRef getModiSubstreamData() const;
  73.   BinarySubstreamRef getFileInfoSubstreamData() const;
  74.   BinarySubstreamRef getTypeServerMapSubstreamData() const;
  75.   BinarySubstreamRef getECSubstreamData() const;
  76.  
  77.   /// If the given stream type is present, returns its stream index. If it is
  78.   /// not present, returns InvalidStreamIndex.
  79.   uint32_t getDebugStreamIndex(DbgHeaderType Type) const;
  80.  
  81.   const DbiModuleList &modules() const;
  82.  
  83.   FixedStreamArray<object::coff_section> getSectionHeaders() const;
  84.  
  85.   bool hasOldFpoRecords() const;
  86.   FixedStreamArray<object::FpoData> getOldFpoRecords() const;
  87.   bool hasNewFpoRecords() const;
  88.   const codeview::DebugFrameDataSubsectionRef &getNewFpoRecords() const;
  89.  
  90.   FixedStreamArray<SecMapEntry> getSectionMap() const;
  91.   void visitSectionContributions(ISectionContribVisitor &Visitor) const;
  92.  
  93.   Expected<StringRef> getECName(uint32_t NI) const;
  94.  
  95. private:
  96.   Error initializeSectionContributionData();
  97.   Error initializeSectionHeadersData(PDBFile *Pdb);
  98.   Error initializeSectionMapData();
  99.   Error initializeOldFpoRecords(PDBFile *Pdb);
  100.   Error initializeNewFpoRecords(PDBFile *Pdb);
  101.  
  102.   Expected<std::unique_ptr<msf::MappedBlockStream>>
  103.   createIndexedStreamForHeaderType(PDBFile *Pdb, DbgHeaderType Type) const;
  104.  
  105.   std::unique_ptr<BinaryStream> Stream;
  106.  
  107.   PDBStringTable ECNames;
  108.  
  109.   BinarySubstreamRef SecContrSubstream;
  110.   BinarySubstreamRef SecMapSubstream;
  111.   BinarySubstreamRef ModiSubstream;
  112.   BinarySubstreamRef FileInfoSubstream;
  113.   BinarySubstreamRef TypeServerMapSubstream;
  114.   BinarySubstreamRef ECSubstream;
  115.  
  116.   DbiModuleList Modules;
  117.  
  118.   FixedStreamArray<support::ulittle16_t> DbgStreams;
  119.  
  120.   PdbRaw_DbiSecContribVer SectionContribVersion =
  121.       PdbRaw_DbiSecContribVer::DbiSecContribVer60;
  122.   FixedStreamArray<SectionContrib> SectionContribs;
  123.   FixedStreamArray<SectionContrib2> SectionContribs2;
  124.   FixedStreamArray<SecMapEntry> SectionMap;
  125.  
  126.   std::unique_ptr<msf::MappedBlockStream> SectionHeaderStream;
  127.   FixedStreamArray<object::coff_section> SectionHeaders;
  128.  
  129.   std::unique_ptr<msf::MappedBlockStream> OldFpoStream;
  130.   FixedStreamArray<object::FpoData> OldFpoRecords;
  131.  
  132.   std::unique_ptr<msf::MappedBlockStream> NewFpoStream;
  133.   codeview::DebugFrameDataSubsectionRef NewFpoRecords;
  134.  
  135.   const DbiStreamHeader *Header;
  136. };
  137. }
  138. }
  139.  
  140. #endif
  141.