Line data Source code
1 : //===- ModInfo.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_MODINFO_H
11 : #define LLVM_DEBUGINFO_PDB_RAW_MODINFO_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 742 : class ModInfo {
26 : friend class DbiStreamBuilder;
27 :
28 : public:
29 : ModInfo();
30 : ModInfo(const ModInfo &Info);
31 : ~ModInfo();
32 :
33 : static Error initialize(BinaryStreamRef Stream, ModInfo &Info);
34 :
35 : bool hasECInfo() const;
36 : uint16_t getTypeServerIndex() const;
37 : uint16_t getModuleStreamIndex() const;
38 : uint32_t getSymbolDebugInfoByteSize() const;
39 : uint32_t getLineInfoByteSize() 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 : private:
51 : StringRef ModuleName;
52 : StringRef ObjFileName;
53 : const ModuleInfoHeader *Layout = nullptr;
54 : };
55 :
56 612 : struct ModuleInfoEx {
57 242 : ModuleInfoEx(const ModInfo &Info) : Info(Info) {}
58 187 : ModuleInfoEx(const ModuleInfoEx &Ex) = default;
59 :
60 : ModInfo Info;
61 : std::vector<StringRef> SourceFiles;
62 : };
63 :
64 : } // end namespace pdb
65 :
66 : template <> struct VarStreamArrayExtractor<pdb::ModInfo> {
67 121 : Error operator()(BinaryStreamRef Stream, uint32_t &Length,
68 : pdb::ModInfo &Info) const {
69 363 : if (auto EC = pdb::ModInfo::initialize(Stream, Info))
70 0 : return EC;
71 121 : Length = Info.getRecordLength();
72 363 : return Error::success();
73 : }
74 : };
75 :
76 : } // end namespace llvm
77 :
78 : #endif // LLVM_DEBUGINFO_PDB_RAW_MODINFO_H
|