1f37b6182SDimitry Andric //===- DbiModuleDescriptor.cpp - PDB module information -------------------===// 2f37b6182SDimitry Andric // 3f37b6182SDimitry Andric // The LLVM Compiler Infrastructure 4f37b6182SDimitry Andric // 5f37b6182SDimitry Andric // This file is distributed under the University of Illinois Open Source 6f37b6182SDimitry Andric // License. See LICENSE.TXT for details. 7f37b6182SDimitry Andric // 8f37b6182SDimitry Andric //===----------------------------------------------------------------------===// 9f37b6182SDimitry Andric 10f37b6182SDimitry Andric #include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h" 11f37b6182SDimitry Andric #include "llvm/DebugInfo/PDB/Native/RawTypes.h" 12f37b6182SDimitry Andric #include "llvm/Support/BinaryStreamReader.h" 13f37b6182SDimitry Andric #include "llvm/Support/Endian.h" 14f37b6182SDimitry Andric #include "llvm/Support/Error.h" 15f37b6182SDimitry Andric #include "llvm/Support/MathExtras.h" 16f37b6182SDimitry Andric #include <cstdint> 17f37b6182SDimitry Andric 18f37b6182SDimitry Andric using namespace llvm; 19f37b6182SDimitry Andric using namespace llvm::pdb; 20f37b6182SDimitry Andric using namespace llvm::support; 21f37b6182SDimitry Andric 22f37b6182SDimitry Andric DbiModuleDescriptor::DbiModuleDescriptor() = default; 23f37b6182SDimitry Andric 24f37b6182SDimitry Andric DbiModuleDescriptor::DbiModuleDescriptor(const DbiModuleDescriptor &Info) = 25f37b6182SDimitry Andric default; 26f37b6182SDimitry Andric 27f37b6182SDimitry Andric DbiModuleDescriptor::~DbiModuleDescriptor() = default; 28f37b6182SDimitry Andric initialize(BinaryStreamRef Stream,DbiModuleDescriptor & Info)29f37b6182SDimitry AndricError DbiModuleDescriptor::initialize(BinaryStreamRef Stream, 30f37b6182SDimitry Andric DbiModuleDescriptor &Info) { 31f37b6182SDimitry Andric BinaryStreamReader Reader(Stream); 32f37b6182SDimitry Andric if (auto EC = Reader.readObject(Info.Layout)) 33f37b6182SDimitry Andric return EC; 34f37b6182SDimitry Andric 35f37b6182SDimitry Andric if (auto EC = Reader.readCString(Info.ModuleName)) 36f37b6182SDimitry Andric return EC; 37f37b6182SDimitry Andric 38f37b6182SDimitry Andric if (auto EC = Reader.readCString(Info.ObjFileName)) 39f37b6182SDimitry Andric return EC; 40f37b6182SDimitry Andric return Error::success(); 41f37b6182SDimitry Andric } 42f37b6182SDimitry Andric hasECInfo() const43f37b6182SDimitry Andricbool DbiModuleDescriptor::hasECInfo() const { 44f37b6182SDimitry Andric return (Layout->Flags & ModInfoFlags::HasECFlagMask) != 0; 45f37b6182SDimitry Andric } 46f37b6182SDimitry Andric getTypeServerIndex() const47f37b6182SDimitry Andricuint16_t DbiModuleDescriptor::getTypeServerIndex() const { 48f37b6182SDimitry Andric return (Layout->Flags & ModInfoFlags::TypeServerIndexMask) >> 49f37b6182SDimitry Andric ModInfoFlags::TypeServerIndexShift; 50f37b6182SDimitry Andric } 51f37b6182SDimitry Andric getSectionContrib() const52*4ba319b5SDimitry Andricconst SectionContrib &DbiModuleDescriptor::getSectionContrib() const { 53*4ba319b5SDimitry Andric return Layout->SC; 54*4ba319b5SDimitry Andric } 55*4ba319b5SDimitry Andric getModuleStreamIndex() const56f37b6182SDimitry Andricuint16_t DbiModuleDescriptor::getModuleStreamIndex() const { 57f37b6182SDimitry Andric return Layout->ModDiStream; 58f37b6182SDimitry Andric } 59f37b6182SDimitry Andric getSymbolDebugInfoByteSize() const60f37b6182SDimitry Andricuint32_t DbiModuleDescriptor::getSymbolDebugInfoByteSize() const { 61f37b6182SDimitry Andric return Layout->SymBytes; 62f37b6182SDimitry Andric } 63f37b6182SDimitry Andric getC11LineInfoByteSize() const64f37b6182SDimitry Andricuint32_t DbiModuleDescriptor::getC11LineInfoByteSize() const { 65f37b6182SDimitry Andric return Layout->C11Bytes; 66f37b6182SDimitry Andric } 67f37b6182SDimitry Andric getC13LineInfoByteSize() const68f37b6182SDimitry Andricuint32_t DbiModuleDescriptor::getC13LineInfoByteSize() const { 69f37b6182SDimitry Andric return Layout->C13Bytes; 70f37b6182SDimitry Andric } 71f37b6182SDimitry Andric getNumberOfFiles() const72f37b6182SDimitry Andricuint32_t DbiModuleDescriptor::getNumberOfFiles() const { 73f37b6182SDimitry Andric return Layout->NumFiles; 74f37b6182SDimitry Andric } 75f37b6182SDimitry Andric getSourceFileNameIndex() const76f37b6182SDimitry Andricuint32_t DbiModuleDescriptor::getSourceFileNameIndex() const { 77f37b6182SDimitry Andric return Layout->SrcFileNameNI; 78f37b6182SDimitry Andric } 79f37b6182SDimitry Andric getPdbFilePathNameIndex() const80f37b6182SDimitry Andricuint32_t DbiModuleDescriptor::getPdbFilePathNameIndex() const { 81f37b6182SDimitry Andric return Layout->PdbFilePathNI; 82f37b6182SDimitry Andric } 83f37b6182SDimitry Andric getModuleName() const84f37b6182SDimitry AndricStringRef DbiModuleDescriptor::getModuleName() const { return ModuleName; } 85f37b6182SDimitry Andric getObjFileName() const86f37b6182SDimitry AndricStringRef DbiModuleDescriptor::getObjFileName() const { return ObjFileName; } 87f37b6182SDimitry Andric getRecordLength() const88f37b6182SDimitry Andricuint32_t DbiModuleDescriptor::getRecordLength() const { 89f37b6182SDimitry Andric uint32_t M = ModuleName.str().size() + 1; 90f37b6182SDimitry Andric uint32_t O = ObjFileName.str().size() + 1; 91f37b6182SDimitry Andric uint32_t Size = sizeof(ModuleInfoHeader) + M + O; 92f37b6182SDimitry Andric Size = alignTo(Size, 4); 93f37b6182SDimitry Andric return Size; 94f37b6182SDimitry Andric } 95