167c56014SZachary Turner //===- DbiModuleDescriptor.cpp - PDB module information -------------------===// 267c56014SZachary Turner // 3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 667c56014SZachary Turner // 767c56014SZachary Turner //===----------------------------------------------------------------------===// 867c56014SZachary Turner 967c56014SZachary Turner #include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h" 1067c56014SZachary Turner #include "llvm/DebugInfo/PDB/Native/RawTypes.h" 1167c56014SZachary Turner #include "llvm/Support/BinaryStreamReader.h" 1267c56014SZachary Turner #include "llvm/Support/Endian.h" 1367c56014SZachary Turner #include "llvm/Support/Error.h" 1467c56014SZachary Turner #include "llvm/Support/MathExtras.h" 1567c56014SZachary Turner #include <cstdint> 1667c56014SZachary Turner 1767c56014SZachary Turner using namespace llvm; 1867c56014SZachary Turner using namespace llvm::pdb; 1967c56014SZachary Turner using namespace llvm::support; 2067c56014SZachary Turner initialize(BinaryStreamRef Stream,DbiModuleDescriptor & Info)2167c56014SZachary TurnerError DbiModuleDescriptor::initialize(BinaryStreamRef Stream, 2267c56014SZachary Turner DbiModuleDescriptor &Info) { 2367c56014SZachary Turner BinaryStreamReader Reader(Stream); 2467c56014SZachary Turner if (auto EC = Reader.readObject(Info.Layout)) 2567c56014SZachary Turner return EC; 2667c56014SZachary Turner 2767c56014SZachary Turner if (auto EC = Reader.readCString(Info.ModuleName)) 2867c56014SZachary Turner return EC; 2967c56014SZachary Turner 3067c56014SZachary Turner if (auto EC = Reader.readCString(Info.ObjFileName)) 3167c56014SZachary Turner return EC; 3267c56014SZachary Turner return Error::success(); 3367c56014SZachary Turner } 3467c56014SZachary Turner hasECInfo() const3567c56014SZachary Turnerbool DbiModuleDescriptor::hasECInfo() const { 3667c56014SZachary Turner return (Layout->Flags & ModInfoFlags::HasECFlagMask) != 0; 3767c56014SZachary Turner } 3867c56014SZachary Turner getTypeServerIndex() const3967c56014SZachary Turneruint16_t DbiModuleDescriptor::getTypeServerIndex() const { 4067c56014SZachary Turner return (Layout->Flags & ModInfoFlags::TypeServerIndexMask) >> 4167c56014SZachary Turner ModInfoFlags::TypeServerIndexShift; 4267c56014SZachary Turner } 4367c56014SZachary Turner getSectionContrib() const44bee6c224SZachary Turnerconst SectionContrib &DbiModuleDescriptor::getSectionContrib() const { 45bee6c224SZachary Turner return Layout->SC; 46bee6c224SZachary Turner } 47bee6c224SZachary Turner getModuleStreamIndex() const4867c56014SZachary Turneruint16_t DbiModuleDescriptor::getModuleStreamIndex() const { 4967c56014SZachary Turner return Layout->ModDiStream; 5067c56014SZachary Turner } 5167c56014SZachary Turner getSymbolDebugInfoByteSize() const5267c56014SZachary Turneruint32_t DbiModuleDescriptor::getSymbolDebugInfoByteSize() const { 5367c56014SZachary Turner return Layout->SymBytes; 5467c56014SZachary Turner } 5567c56014SZachary Turner getC11LineInfoByteSize() const565b6e4e0aSZachary Turneruint32_t DbiModuleDescriptor::getC11LineInfoByteSize() const { 575b6e4e0aSZachary Turner return Layout->C11Bytes; 5867c56014SZachary Turner } 5967c56014SZachary Turner getC13LineInfoByteSize() const6067c56014SZachary Turneruint32_t DbiModuleDescriptor::getC13LineInfoByteSize() const { 6167c56014SZachary Turner return Layout->C13Bytes; 6267c56014SZachary Turner } 6367c56014SZachary Turner getNumberOfFiles() const6467c56014SZachary Turneruint32_t DbiModuleDescriptor::getNumberOfFiles() const { 6567c56014SZachary Turner return Layout->NumFiles; 6667c56014SZachary Turner } 6767c56014SZachary Turner getSourceFileNameIndex() const6867c56014SZachary Turneruint32_t DbiModuleDescriptor::getSourceFileNameIndex() const { 6967c56014SZachary Turner return Layout->SrcFileNameNI; 7067c56014SZachary Turner } 7167c56014SZachary Turner getPdbFilePathNameIndex() const7267c56014SZachary Turneruint32_t DbiModuleDescriptor::getPdbFilePathNameIndex() const { 7367c56014SZachary Turner return Layout->PdbFilePathNI; 7467c56014SZachary Turner } 7567c56014SZachary Turner getModuleName() const7667c56014SZachary TurnerStringRef DbiModuleDescriptor::getModuleName() const { return ModuleName; } 7767c56014SZachary Turner getObjFileName() const7867c56014SZachary TurnerStringRef DbiModuleDescriptor::getObjFileName() const { return ObjFileName; } 7967c56014SZachary Turner getRecordLength() const8067c56014SZachary Turneruint32_t DbiModuleDescriptor::getRecordLength() const { 8167c56014SZachary Turner uint32_t M = ModuleName.str().size() + 1; 8267c56014SZachary Turner uint32_t O = ObjFileName.str().size() + 1; 8367c56014SZachary Turner uint32_t Size = sizeof(ModuleInfoHeader) + M + O; 8467c56014SZachary Turner Size = alignTo(Size, 4); 8567c56014SZachary Turner return Size; 8667c56014SZachary Turner } 87