1 //===- DbiModuleDescriptor.h - PDB module information -----------*- 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 #ifndef LLVM_DEBUGINFO_PDB_RAW_DBIMODULEDESCRIPTOR_H 11 #define LLVM_DEBUGINFO_PDB_RAW_DBIMODULEDESCRIPTOR_H 12 13 #include "llvm/ADT/StringRef.h" 14 #include "llvm/DebugInfo/PDB/Native/RawTypes.h" 15 #include "llvm/Support/BinaryStreamArray.h" 16 #include "llvm/Support/BinaryStreamRef.h" 17 #include "llvm/Support/Error.h" 18 #include <cstdint> 19 #include <vector> 20 21 namespace llvm { 22 23 namespace pdb { 24 25 class DbiModuleDescriptor { 26 friend class DbiStreamBuilder; 27 28 public: 29 DbiModuleDescriptor(); 30 DbiModuleDescriptor(const DbiModuleDescriptor &Info); 31 ~DbiModuleDescriptor(); 32 33 static Error initialize(BinaryStreamRef Stream, DbiModuleDescriptor &Info); 34 35 bool hasECInfo() const; 36 uint16_t getTypeServerIndex() const; 37 uint16_t getModuleStreamIndex() const; 38 uint32_t getSymbolDebugInfoByteSize() const; 39 uint32_t getC11LineInfoByteSize() const; 40 uint32_t getC13LineInfoByteSize() const; 41 uint32_t getNumberOfFiles() const; 42 uint32_t getSourceFileNameIndex() const; 43 uint32_t getPdbFilePathNameIndex() const; 44 45 StringRef getModuleName() const; 46 StringRef getObjFileName() const; 47 48 uint32_t getRecordLength() const; 49 50 const SectionContrib &getSectionContrib() const; 51 52 private: 53 StringRef ModuleName; 54 StringRef ObjFileName; 55 const ModuleInfoHeader *Layout = nullptr; 56 }; 57 58 } // end namespace pdb 59 60 template <> struct VarStreamArrayExtractor<pdb::DbiModuleDescriptor> { 61 Error operator()(BinaryStreamRef Stream, uint32_t &Length, 62 pdb::DbiModuleDescriptor &Info) { 63 if (auto EC = pdb::DbiModuleDescriptor::initialize(Stream, Info)) 64 return EC; 65 Length = Info.getRecordLength(); 66 return Error::success(); 67 } 68 }; 69 70 } // end namespace llvm 71 72 #endif // LLVM_DEBUGINFO_PDB_RAW_DBIMODULEDESCRIPTOR_H 73