Line data Source code
1 : //===- DbiModuleDescriptor.cpp - PDB module information -------------------===//
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 : #include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h"
11 : #include "llvm/DebugInfo/PDB/Native/RawTypes.h"
12 : #include "llvm/Support/BinaryStreamReader.h"
13 : #include "llvm/Support/Endian.h"
14 : #include "llvm/Support/Error.h"
15 : #include "llvm/Support/MathExtras.h"
16 : #include <cstdint>
17 :
18 : using namespace llvm;
19 : using namespace llvm::pdb;
20 : using namespace llvm::support;
21 :
22 : DbiModuleDescriptor::DbiModuleDescriptor() = default;
23 :
24 : DbiModuleDescriptor::DbiModuleDescriptor(const DbiModuleDescriptor &Info) =
25 : default;
26 :
27 : DbiModuleDescriptor::~DbiModuleDescriptor() = default;
28 :
29 987 : Error DbiModuleDescriptor::initialize(BinaryStreamRef Stream,
30 : DbiModuleDescriptor &Info) {
31 987 : BinaryStreamReader Reader(Stream);
32 1974 : if (auto EC = Reader.readObject(Info.Layout))
33 : return EC;
34 :
35 1974 : if (auto EC = Reader.readCString(Info.ModuleName))
36 : return EC;
37 :
38 1974 : if (auto EC = Reader.readCString(Info.ObjFileName))
39 : return EC;
40 : return Error::success();
41 : }
42 :
43 112 : bool DbiModuleDescriptor::hasECInfo() const {
44 224 : return (Layout->Flags & ModInfoFlags::HasECFlagMask) != 0;
45 : }
46 :
47 0 : uint16_t DbiModuleDescriptor::getTypeServerIndex() const {
48 0 : return (Layout->Flags & ModInfoFlags::TypeServerIndexMask) >>
49 0 : ModInfoFlags::TypeServerIndexShift;
50 : }
51 :
52 5 : const SectionContrib &DbiModuleDescriptor::getSectionContrib() const {
53 5 : return Layout->SC;
54 : }
55 :
56 461 : uint16_t DbiModuleDescriptor::getModuleStreamIndex() const {
57 922 : return Layout->ModDiStream;
58 : }
59 :
60 328 : uint32_t DbiModuleDescriptor::getSymbolDebugInfoByteSize() const {
61 656 : return Layout->SymBytes;
62 : }
63 :
64 328 : uint32_t DbiModuleDescriptor::getC11LineInfoByteSize() const {
65 656 : return Layout->C11Bytes;
66 : }
67 :
68 328 : uint32_t DbiModuleDescriptor::getC13LineInfoByteSize() const {
69 328 : return Layout->C13Bytes;
70 : }
71 :
72 110 : uint32_t DbiModuleDescriptor::getNumberOfFiles() const {
73 220 : return Layout->NumFiles;
74 : }
75 :
76 220 : uint32_t DbiModuleDescriptor::getSourceFileNameIndex() const {
77 440 : return Layout->SrcFileNameNI;
78 : }
79 :
80 220 : uint32_t DbiModuleDescriptor::getPdbFilePathNameIndex() const {
81 440 : return Layout->PdbFilePathNI;
82 : }
83 :
84 364 : StringRef DbiModuleDescriptor::getModuleName() const { return ModuleName; }
85 :
86 139 : StringRef DbiModuleDescriptor::getObjFileName() const { return ObjFileName; }
87 :
88 987 : uint32_t DbiModuleDescriptor::getRecordLength() const {
89 1974 : uint32_t M = ModuleName.str().size() + 1;
90 1974 : uint32_t O = ObjFileName.str().size() + 1;
91 987 : uint32_t Size = sizeof(ModuleInfoHeader) + M + O;
92 1974 : Size = alignTo(Size, 4);
93 987 : return Size;
94 : }
|