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 AndricError 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 Andricbool DbiModuleDescriptor::hasECInfo() const { 35a303c417SDimitry Andric return (Layout->Flags & ModInfoFlags::HasECFlagMask) != 0; 36a303c417SDimitry Andric } 37a303c417SDimitry Andric getTypeServerIndex() const38a303c417SDimitry Andricuint16_t DbiModuleDescriptor::getTypeServerIndex() const { 39a303c417SDimitry Andric return (Layout->Flags & ModInfoFlags::TypeServerIndexMask) >> 40a303c417SDimitry Andric ModInfoFlags::TypeServerIndexShift; 41a303c417SDimitry Andric } 42a303c417SDimitry Andric getSectionContrib() const43eb11fae6SDimitry Andricconst SectionContrib &DbiModuleDescriptor::getSectionContrib() const { 44eb11fae6SDimitry Andric return Layout->SC; 45eb11fae6SDimitry Andric } 46eb11fae6SDimitry Andric getModuleStreamIndex() const47a303c417SDimitry Andricuint16_t DbiModuleDescriptor::getModuleStreamIndex() const { 48a303c417SDimitry Andric return Layout->ModDiStream; 49a303c417SDimitry Andric } 50a303c417SDimitry Andric getSymbolDebugInfoByteSize() const51a303c417SDimitry Andricuint32_t DbiModuleDescriptor::getSymbolDebugInfoByteSize() const { 52a303c417SDimitry Andric return Layout->SymBytes; 53a303c417SDimitry Andric } 54a303c417SDimitry Andric getC11LineInfoByteSize() const55a303c417SDimitry Andricuint32_t DbiModuleDescriptor::getC11LineInfoByteSize() const { 56a303c417SDimitry Andric return Layout->C11Bytes; 57a303c417SDimitry Andric } 58a303c417SDimitry Andric getC13LineInfoByteSize() const59a303c417SDimitry Andricuint32_t DbiModuleDescriptor::getC13LineInfoByteSize() const { 60a303c417SDimitry Andric return Layout->C13Bytes; 61a303c417SDimitry Andric } 62a303c417SDimitry Andric getNumberOfFiles() const63a303c417SDimitry Andricuint32_t DbiModuleDescriptor::getNumberOfFiles() const { 64a303c417SDimitry Andric return Layout->NumFiles; 65a303c417SDimitry Andric } 66a303c417SDimitry Andric getSourceFileNameIndex() const67a303c417SDimitry Andricuint32_t DbiModuleDescriptor::getSourceFileNameIndex() const { 68a303c417SDimitry Andric return Layout->SrcFileNameNI; 69a303c417SDimitry Andric } 70a303c417SDimitry Andric getPdbFilePathNameIndex() const71a303c417SDimitry Andricuint32_t DbiModuleDescriptor::getPdbFilePathNameIndex() const { 72a303c417SDimitry Andric return Layout->PdbFilePathNI; 73a303c417SDimitry Andric } 74a303c417SDimitry Andric getModuleName() const75a303c417SDimitry AndricStringRef DbiModuleDescriptor::getModuleName() const { return ModuleName; } 76a303c417SDimitry Andric getObjFileName() const77a303c417SDimitry AndricStringRef DbiModuleDescriptor::getObjFileName() const { return ObjFileName; } 78a303c417SDimitry Andric getRecordLength() const79a303c417SDimitry Andricuint32_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