xref: /src/contrib/llvm-project/llvm/lib/DebugInfo/PDB/Native/DbiModuleDescriptor.cpp (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
1a303c417SDimitry Andric //===- DbiModuleDescriptor.cpp - PDB module information -------------------===//
2a303c417SDimitry Andric //
3e6d15924SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e6d15924SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5e6d15924SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6a303c417SDimitry Andric //
7a303c417SDimitry Andric //===----------------------------------------------------------------------===//
8a303c417SDimitry Andric 
9a303c417SDimitry Andric #include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h"
10a303c417SDimitry Andric #include "llvm/DebugInfo/PDB/Native/RawTypes.h"
11a303c417SDimitry Andric #include "llvm/Support/BinaryStreamReader.h"
12a303c417SDimitry Andric #include "llvm/Support/Error.h"
13a303c417SDimitry Andric #include "llvm/Support/MathExtras.h"
14a303c417SDimitry Andric #include <cstdint>
15a303c417SDimitry Andric 
16a303c417SDimitry Andric using namespace llvm;
17a303c417SDimitry Andric using namespace llvm::pdb;
18a303c417SDimitry Andric using namespace llvm::support;
19a303c417SDimitry Andric 
initialize(BinaryStreamRef Stream,DbiModuleDescriptor & Info)20a303c417SDimitry Andric Error DbiModuleDescriptor::initialize(BinaryStreamRef Stream,
21a303c417SDimitry Andric                                       DbiModuleDescriptor &Info) {
22a303c417SDimitry Andric   BinaryStreamReader Reader(Stream);
23a303c417SDimitry Andric   if (auto EC = Reader.readObject(Info.Layout))
24a303c417SDimitry Andric     return EC;
25a303c417SDimitry Andric 
26a303c417SDimitry Andric   if (auto EC = Reader.readCString(Info.ModuleName))
27a303c417SDimitry Andric     return EC;
28a303c417SDimitry Andric 
29a303c417SDimitry Andric   if (auto EC = Reader.readCString(Info.ObjFileName))
30a303c417SDimitry Andric     return EC;
31a303c417SDimitry Andric   return Error::success();
32a303c417SDimitry Andric }
33a303c417SDimitry Andric 
hasECInfo() const34a303c417SDimitry Andric bool DbiModuleDescriptor::hasECInfo() const {
35a303c417SDimitry Andric   return (Layout->Flags & ModInfoFlags::HasECFlagMask) != 0;
36a303c417SDimitry Andric }
37a303c417SDimitry Andric 
getTypeServerIndex() const38a303c417SDimitry Andric uint16_t DbiModuleDescriptor::getTypeServerIndex() const {
39a303c417SDimitry Andric   return (Layout->Flags & ModInfoFlags::TypeServerIndexMask) >>
40a303c417SDimitry Andric          ModInfoFlags::TypeServerIndexShift;
41a303c417SDimitry Andric }
42a303c417SDimitry Andric 
getSectionContrib() const43eb11fae6SDimitry Andric const SectionContrib &DbiModuleDescriptor::getSectionContrib() const {
44eb11fae6SDimitry Andric   return Layout->SC;
45eb11fae6SDimitry Andric }
46eb11fae6SDimitry Andric 
getModuleStreamIndex() const47a303c417SDimitry Andric uint16_t DbiModuleDescriptor::getModuleStreamIndex() const {
48a303c417SDimitry Andric   return Layout->ModDiStream;
49a303c417SDimitry Andric }
50a303c417SDimitry Andric 
getSymbolDebugInfoByteSize() const51a303c417SDimitry Andric uint32_t DbiModuleDescriptor::getSymbolDebugInfoByteSize() const {
52a303c417SDimitry Andric   return Layout->SymBytes;
53a303c417SDimitry Andric }
54a303c417SDimitry Andric 
getC11LineInfoByteSize() const55a303c417SDimitry Andric uint32_t DbiModuleDescriptor::getC11LineInfoByteSize() const {
56a303c417SDimitry Andric   return Layout->C11Bytes;
57a303c417SDimitry Andric }
58a303c417SDimitry Andric 
getC13LineInfoByteSize() const59a303c417SDimitry Andric uint32_t DbiModuleDescriptor::getC13LineInfoByteSize() const {
60a303c417SDimitry Andric   return Layout->C13Bytes;
61a303c417SDimitry Andric }
62a303c417SDimitry Andric 
getNumberOfFiles() const63a303c417SDimitry Andric uint32_t DbiModuleDescriptor::getNumberOfFiles() const {
64a303c417SDimitry Andric   return Layout->NumFiles;
65a303c417SDimitry Andric }
66a303c417SDimitry Andric 
getSourceFileNameIndex() const67a303c417SDimitry Andric uint32_t DbiModuleDescriptor::getSourceFileNameIndex() const {
68a303c417SDimitry Andric   return Layout->SrcFileNameNI;
69a303c417SDimitry Andric }
70a303c417SDimitry Andric 
getPdbFilePathNameIndex() const71a303c417SDimitry Andric uint32_t DbiModuleDescriptor::getPdbFilePathNameIndex() const {
72a303c417SDimitry Andric   return Layout->PdbFilePathNI;
73a303c417SDimitry Andric }
74a303c417SDimitry Andric 
getModuleName() const75a303c417SDimitry Andric StringRef DbiModuleDescriptor::getModuleName() const { return ModuleName; }
76a303c417SDimitry Andric 
getObjFileName() const77a303c417SDimitry Andric StringRef DbiModuleDescriptor::getObjFileName() const { return ObjFileName; }
78a303c417SDimitry Andric 
getRecordLength() const79a303c417SDimitry Andric uint32_t DbiModuleDescriptor::getRecordLength() const {
80a303c417SDimitry Andric   uint32_t M = ModuleName.str().size() + 1;
81a303c417SDimitry Andric   uint32_t O = ObjFileName.str().size() + 1;
82a303c417SDimitry Andric   uint32_t Size = sizeof(ModuleInfoHeader) + M + O;
83a303c417SDimitry Andric   Size = alignTo(Size, 4);
84a303c417SDimitry Andric   return Size;
85a303c417SDimitry Andric }
86