1317683Sdim//===- DbiModuleDescriptor.cpp - PDB module information -------------------===// 2317683Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6317683Sdim// 7317683Sdim//===----------------------------------------------------------------------===// 8317683Sdim 9317683Sdim#include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h" 10317683Sdim#include "llvm/DebugInfo/PDB/Native/RawTypes.h" 11317683Sdim#include "llvm/Support/BinaryStreamReader.h" 12317683Sdim#include "llvm/Support/Endian.h" 13317683Sdim#include "llvm/Support/Error.h" 14317683Sdim#include "llvm/Support/MathExtras.h" 15317683Sdim#include <cstdint> 16317683Sdim 17317683Sdimusing namespace llvm; 18317683Sdimusing namespace llvm::pdb; 19317683Sdimusing namespace llvm::support; 20317683Sdim 21317683SdimError DbiModuleDescriptor::initialize(BinaryStreamRef Stream, 22317683Sdim DbiModuleDescriptor &Info) { 23317683Sdim BinaryStreamReader Reader(Stream); 24317683Sdim if (auto EC = Reader.readObject(Info.Layout)) 25317683Sdim return EC; 26317683Sdim 27317683Sdim if (auto EC = Reader.readCString(Info.ModuleName)) 28317683Sdim return EC; 29317683Sdim 30317683Sdim if (auto EC = Reader.readCString(Info.ObjFileName)) 31317683Sdim return EC; 32317683Sdim return Error::success(); 33317683Sdim} 34317683Sdim 35317683Sdimbool DbiModuleDescriptor::hasECInfo() const { 36317683Sdim return (Layout->Flags & ModInfoFlags::HasECFlagMask) != 0; 37317683Sdim} 38317683Sdim 39317683Sdimuint16_t DbiModuleDescriptor::getTypeServerIndex() const { 40317683Sdim return (Layout->Flags & ModInfoFlags::TypeServerIndexMask) >> 41317683Sdim ModInfoFlags::TypeServerIndexShift; 42317683Sdim} 43317683Sdim 44341825Sdimconst SectionContrib &DbiModuleDescriptor::getSectionContrib() const { 45341825Sdim return Layout->SC; 46341825Sdim} 47341825Sdim 48317683Sdimuint16_t DbiModuleDescriptor::getModuleStreamIndex() const { 49317683Sdim return Layout->ModDiStream; 50317683Sdim} 51317683Sdim 52317683Sdimuint32_t DbiModuleDescriptor::getSymbolDebugInfoByteSize() const { 53317683Sdim return Layout->SymBytes; 54317683Sdim} 55317683Sdim 56317683Sdimuint32_t DbiModuleDescriptor::getC11LineInfoByteSize() const { 57317683Sdim return Layout->C11Bytes; 58317683Sdim} 59317683Sdim 60317683Sdimuint32_t DbiModuleDescriptor::getC13LineInfoByteSize() const { 61317683Sdim return Layout->C13Bytes; 62317683Sdim} 63317683Sdim 64317683Sdimuint32_t DbiModuleDescriptor::getNumberOfFiles() const { 65317683Sdim return Layout->NumFiles; 66317683Sdim} 67317683Sdim 68317683Sdimuint32_t DbiModuleDescriptor::getSourceFileNameIndex() const { 69317683Sdim return Layout->SrcFileNameNI; 70317683Sdim} 71317683Sdim 72317683Sdimuint32_t DbiModuleDescriptor::getPdbFilePathNameIndex() const { 73317683Sdim return Layout->PdbFilePathNI; 74317683Sdim} 75317683Sdim 76317683SdimStringRef DbiModuleDescriptor::getModuleName() const { return ModuleName; } 77317683Sdim 78317683SdimStringRef DbiModuleDescriptor::getObjFileName() const { return ObjFileName; } 79317683Sdim 80317683Sdimuint32_t DbiModuleDescriptor::getRecordLength() const { 81317683Sdim uint32_t M = ModuleName.str().size() + 1; 82317683Sdim uint32_t O = ObjFileName.str().size() + 1; 83317683Sdim uint32_t Size = sizeof(ModuleInfoHeader) + M + O; 84317683Sdim Size = alignTo(Size, 4); 85317683Sdim return Size; 86317683Sdim} 87