167c56014SZachary Turner //===- DbiModuleDescriptor.cpp - PDB module information -------------------===// 267c56014SZachary Turner // 367c56014SZachary Turner // The LLVM Compiler Infrastructure 467c56014SZachary Turner // 567c56014SZachary Turner // This file is distributed under the University of Illinois Open Source 667c56014SZachary Turner // License. See LICENSE.TXT for details. 767c56014SZachary Turner // 867c56014SZachary Turner //===----------------------------------------------------------------------===// 967c56014SZachary Turner 1067c56014SZachary Turner #include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h" 1167c56014SZachary Turner #include "llvm/DebugInfo/PDB/Native/RawTypes.h" 1267c56014SZachary Turner #include "llvm/Support/BinaryStreamReader.h" 1367c56014SZachary Turner #include "llvm/Support/Endian.h" 1467c56014SZachary Turner #include "llvm/Support/Error.h" 1567c56014SZachary Turner #include "llvm/Support/MathExtras.h" 1667c56014SZachary Turner #include <cstdint> 1767c56014SZachary Turner 1867c56014SZachary Turner using namespace llvm; 1967c56014SZachary Turner using namespace llvm::pdb; 2067c56014SZachary Turner using namespace llvm::support; 2167c56014SZachary Turner 2267c56014SZachary Turner DbiModuleDescriptor::DbiModuleDescriptor() = default; 2367c56014SZachary Turner 2467c56014SZachary Turner DbiModuleDescriptor::DbiModuleDescriptor(const DbiModuleDescriptor &Info) = 2567c56014SZachary Turner default; 2667c56014SZachary Turner 2767c56014SZachary Turner DbiModuleDescriptor::~DbiModuleDescriptor() = default; 2867c56014SZachary Turner 2967c56014SZachary Turner Error DbiModuleDescriptor::initialize(BinaryStreamRef Stream, 3067c56014SZachary Turner DbiModuleDescriptor &Info) { 3167c56014SZachary Turner BinaryStreamReader Reader(Stream); 3267c56014SZachary Turner if (auto EC = Reader.readObject(Info.Layout)) 3367c56014SZachary Turner return EC; 3467c56014SZachary Turner 3567c56014SZachary Turner if (auto EC = Reader.readCString(Info.ModuleName)) 3667c56014SZachary Turner return EC; 3767c56014SZachary Turner 3867c56014SZachary Turner if (auto EC = Reader.readCString(Info.ObjFileName)) 3967c56014SZachary Turner return EC; 4067c56014SZachary Turner return Error::success(); 4167c56014SZachary Turner } 4267c56014SZachary Turner 4367c56014SZachary Turner bool DbiModuleDescriptor::hasECInfo() const { 4467c56014SZachary Turner return (Layout->Flags & ModInfoFlags::HasECFlagMask) != 0; 4567c56014SZachary Turner } 4667c56014SZachary Turner 4767c56014SZachary Turner uint16_t DbiModuleDescriptor::getTypeServerIndex() const { 4867c56014SZachary Turner return (Layout->Flags & ModInfoFlags::TypeServerIndexMask) >> 4967c56014SZachary Turner ModInfoFlags::TypeServerIndexShift; 5067c56014SZachary Turner } 5167c56014SZachary Turner 5267c56014SZachary Turner uint16_t DbiModuleDescriptor::getModuleStreamIndex() const { 5367c56014SZachary Turner return Layout->ModDiStream; 5467c56014SZachary Turner } 5567c56014SZachary Turner 5667c56014SZachary Turner uint32_t DbiModuleDescriptor::getSymbolDebugInfoByteSize() const { 5767c56014SZachary Turner return Layout->SymBytes; 5867c56014SZachary Turner } 5967c56014SZachary Turner 60*5b6e4e0aSZachary Turner uint32_t DbiModuleDescriptor::getC11LineInfoByteSize() const { 61*5b6e4e0aSZachary Turner return Layout->C11Bytes; 6267c56014SZachary Turner } 6367c56014SZachary Turner 6467c56014SZachary Turner uint32_t DbiModuleDescriptor::getC13LineInfoByteSize() const { 6567c56014SZachary Turner return Layout->C13Bytes; 6667c56014SZachary Turner } 6767c56014SZachary Turner 6867c56014SZachary Turner uint32_t DbiModuleDescriptor::getNumberOfFiles() const { 6967c56014SZachary Turner return Layout->NumFiles; 7067c56014SZachary Turner } 7167c56014SZachary Turner 7267c56014SZachary Turner uint32_t DbiModuleDescriptor::getSourceFileNameIndex() const { 7367c56014SZachary Turner return Layout->SrcFileNameNI; 7467c56014SZachary Turner } 7567c56014SZachary Turner 7667c56014SZachary Turner uint32_t DbiModuleDescriptor::getPdbFilePathNameIndex() const { 7767c56014SZachary Turner return Layout->PdbFilePathNI; 7867c56014SZachary Turner } 7967c56014SZachary Turner 8067c56014SZachary Turner StringRef DbiModuleDescriptor::getModuleName() const { return ModuleName; } 8167c56014SZachary Turner 8267c56014SZachary Turner StringRef DbiModuleDescriptor::getObjFileName() const { return ObjFileName; } 8367c56014SZachary Turner 8467c56014SZachary Turner uint32_t DbiModuleDescriptor::getRecordLength() const { 8567c56014SZachary Turner uint32_t M = ModuleName.str().size() + 1; 8667c56014SZachary Turner uint32_t O = ObjFileName.str().size() + 1; 8767c56014SZachary Turner uint32_t Size = sizeof(ModuleInfoHeader) + M + O; 8867c56014SZachary Turner Size = alignTo(Size, 4); 8967c56014SZachary Turner return Size; 9067c56014SZachary Turner } 91