1*67c56014SZachary Turner //===- DbiModuleDescriptor.cpp - PDB module information -------------------===// 2*67c56014SZachary Turner // 3*67c56014SZachary Turner // The LLVM Compiler Infrastructure 4*67c56014SZachary Turner // 5*67c56014SZachary Turner // This file is distributed under the University of Illinois Open Source 6*67c56014SZachary Turner // License. See LICENSE.TXT for details. 7*67c56014SZachary Turner // 8*67c56014SZachary Turner //===----------------------------------------------------------------------===// 9*67c56014SZachary Turner 10*67c56014SZachary Turner #include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h" 11*67c56014SZachary Turner #include "llvm/DebugInfo/PDB/Native/RawTypes.h" 12*67c56014SZachary Turner #include "llvm/Support/BinaryStreamReader.h" 13*67c56014SZachary Turner #include "llvm/Support/Endian.h" 14*67c56014SZachary Turner #include "llvm/Support/Error.h" 15*67c56014SZachary Turner #include "llvm/Support/MathExtras.h" 16*67c56014SZachary Turner #include <cstdint> 17*67c56014SZachary Turner 18*67c56014SZachary Turner using namespace llvm; 19*67c56014SZachary Turner using namespace llvm::pdb; 20*67c56014SZachary Turner using namespace llvm::support; 21*67c56014SZachary Turner 22*67c56014SZachary Turner DbiModuleDescriptor::DbiModuleDescriptor() = default; 23*67c56014SZachary Turner 24*67c56014SZachary Turner DbiModuleDescriptor::DbiModuleDescriptor(const DbiModuleDescriptor &Info) = 25*67c56014SZachary Turner default; 26*67c56014SZachary Turner 27*67c56014SZachary Turner DbiModuleDescriptor::~DbiModuleDescriptor() = default; 28*67c56014SZachary Turner 29*67c56014SZachary Turner Error DbiModuleDescriptor::initialize(BinaryStreamRef Stream, 30*67c56014SZachary Turner DbiModuleDescriptor &Info) { 31*67c56014SZachary Turner BinaryStreamReader Reader(Stream); 32*67c56014SZachary Turner if (auto EC = Reader.readObject(Info.Layout)) 33*67c56014SZachary Turner return EC; 34*67c56014SZachary Turner 35*67c56014SZachary Turner if (auto EC = Reader.readCString(Info.ModuleName)) 36*67c56014SZachary Turner return EC; 37*67c56014SZachary Turner 38*67c56014SZachary Turner if (auto EC = Reader.readCString(Info.ObjFileName)) 39*67c56014SZachary Turner return EC; 40*67c56014SZachary Turner return Error::success(); 41*67c56014SZachary Turner } 42*67c56014SZachary Turner 43*67c56014SZachary Turner bool DbiModuleDescriptor::hasECInfo() const { 44*67c56014SZachary Turner return (Layout->Flags & ModInfoFlags::HasECFlagMask) != 0; 45*67c56014SZachary Turner } 46*67c56014SZachary Turner 47*67c56014SZachary Turner uint16_t DbiModuleDescriptor::getTypeServerIndex() const { 48*67c56014SZachary Turner return (Layout->Flags & ModInfoFlags::TypeServerIndexMask) >> 49*67c56014SZachary Turner ModInfoFlags::TypeServerIndexShift; 50*67c56014SZachary Turner } 51*67c56014SZachary Turner 52*67c56014SZachary Turner uint16_t DbiModuleDescriptor::getModuleStreamIndex() const { 53*67c56014SZachary Turner return Layout->ModDiStream; 54*67c56014SZachary Turner } 55*67c56014SZachary Turner 56*67c56014SZachary Turner uint32_t DbiModuleDescriptor::getSymbolDebugInfoByteSize() const { 57*67c56014SZachary Turner return Layout->SymBytes; 58*67c56014SZachary Turner } 59*67c56014SZachary Turner 60*67c56014SZachary Turner uint32_t DbiModuleDescriptor::getLineInfoByteSize() const { 61*67c56014SZachary Turner return Layout->LineBytes; 62*67c56014SZachary Turner } 63*67c56014SZachary Turner 64*67c56014SZachary Turner uint32_t DbiModuleDescriptor::getC13LineInfoByteSize() const { 65*67c56014SZachary Turner return Layout->C13Bytes; 66*67c56014SZachary Turner } 67*67c56014SZachary Turner 68*67c56014SZachary Turner uint32_t DbiModuleDescriptor::getNumberOfFiles() const { 69*67c56014SZachary Turner return Layout->NumFiles; 70*67c56014SZachary Turner } 71*67c56014SZachary Turner 72*67c56014SZachary Turner uint32_t DbiModuleDescriptor::getSourceFileNameIndex() const { 73*67c56014SZachary Turner return Layout->SrcFileNameNI; 74*67c56014SZachary Turner } 75*67c56014SZachary Turner 76*67c56014SZachary Turner uint32_t DbiModuleDescriptor::getPdbFilePathNameIndex() const { 77*67c56014SZachary Turner return Layout->PdbFilePathNI; 78*67c56014SZachary Turner } 79*67c56014SZachary Turner 80*67c56014SZachary Turner StringRef DbiModuleDescriptor::getModuleName() const { return ModuleName; } 81*67c56014SZachary Turner 82*67c56014SZachary Turner StringRef DbiModuleDescriptor::getObjFileName() const { return ObjFileName; } 83*67c56014SZachary Turner 84*67c56014SZachary Turner uint32_t DbiModuleDescriptor::getRecordLength() const { 85*67c56014SZachary Turner uint32_t M = ModuleName.str().size() + 1; 86*67c56014SZachary Turner uint32_t O = ObjFileName.str().size() + 1; 87*67c56014SZachary Turner uint32_t Size = sizeof(ModuleInfoHeader) + M + O; 88*67c56014SZachary Turner Size = alignTo(Size, 4); 89*67c56014SZachary Turner return Size; 90*67c56014SZachary Turner } 91