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 2167c56014SZachary Turner DbiModuleDescriptor::DbiModuleDescriptor() = default; 2267c56014SZachary Turner 2367c56014SZachary Turner DbiModuleDescriptor::DbiModuleDescriptor(const DbiModuleDescriptor &Info) = 2467c56014SZachary Turner default; 2567c56014SZachary Turner 2667c56014SZachary Turner DbiModuleDescriptor::~DbiModuleDescriptor() = default; 2767c56014SZachary Turner 2867c56014SZachary Turner Error DbiModuleDescriptor::initialize(BinaryStreamRef Stream, 2967c56014SZachary Turner DbiModuleDescriptor &Info) { 3067c56014SZachary Turner BinaryStreamReader Reader(Stream); 3167c56014SZachary Turner if (auto EC = Reader.readObject(Info.Layout)) 3267c56014SZachary Turner return EC; 3367c56014SZachary Turner 3467c56014SZachary Turner if (auto EC = Reader.readCString(Info.ModuleName)) 3567c56014SZachary Turner return EC; 3667c56014SZachary Turner 3767c56014SZachary Turner if (auto EC = Reader.readCString(Info.ObjFileName)) 3867c56014SZachary Turner return EC; 3967c56014SZachary Turner return Error::success(); 4067c56014SZachary Turner } 4167c56014SZachary Turner 4267c56014SZachary Turner bool DbiModuleDescriptor::hasECInfo() const { 4367c56014SZachary Turner return (Layout->Flags & ModInfoFlags::HasECFlagMask) != 0; 4467c56014SZachary Turner } 4567c56014SZachary Turner 4667c56014SZachary Turner uint16_t DbiModuleDescriptor::getTypeServerIndex() const { 4767c56014SZachary Turner return (Layout->Flags & ModInfoFlags::TypeServerIndexMask) >> 4867c56014SZachary Turner ModInfoFlags::TypeServerIndexShift; 4967c56014SZachary Turner } 5067c56014SZachary Turner 51bee6c224SZachary Turner const SectionContrib &DbiModuleDescriptor::getSectionContrib() const { 52bee6c224SZachary Turner return Layout->SC; 53bee6c224SZachary Turner } 54bee6c224SZachary Turner 5567c56014SZachary Turner uint16_t DbiModuleDescriptor::getModuleStreamIndex() const { 5667c56014SZachary Turner return Layout->ModDiStream; 5767c56014SZachary Turner } 5867c56014SZachary Turner 5967c56014SZachary Turner uint32_t DbiModuleDescriptor::getSymbolDebugInfoByteSize() const { 6067c56014SZachary Turner return Layout->SymBytes; 6167c56014SZachary Turner } 6267c56014SZachary Turner 635b6e4e0aSZachary Turner uint32_t DbiModuleDescriptor::getC11LineInfoByteSize() const { 645b6e4e0aSZachary Turner return Layout->C11Bytes; 6567c56014SZachary Turner } 6667c56014SZachary Turner 6767c56014SZachary Turner uint32_t DbiModuleDescriptor::getC13LineInfoByteSize() const { 6867c56014SZachary Turner return Layout->C13Bytes; 6967c56014SZachary Turner } 7067c56014SZachary Turner 7167c56014SZachary Turner uint32_t DbiModuleDescriptor::getNumberOfFiles() const { 7267c56014SZachary Turner return Layout->NumFiles; 7367c56014SZachary Turner } 7467c56014SZachary Turner 7567c56014SZachary Turner uint32_t DbiModuleDescriptor::getSourceFileNameIndex() const { 7667c56014SZachary Turner return Layout->SrcFileNameNI; 7767c56014SZachary Turner } 7867c56014SZachary Turner 7967c56014SZachary Turner uint32_t DbiModuleDescriptor::getPdbFilePathNameIndex() const { 8067c56014SZachary Turner return Layout->PdbFilePathNI; 8167c56014SZachary Turner } 8267c56014SZachary Turner 8367c56014SZachary Turner StringRef DbiModuleDescriptor::getModuleName() const { return ModuleName; } 8467c56014SZachary Turner 8567c56014SZachary Turner StringRef DbiModuleDescriptor::getObjFileName() const { return ObjFileName; } 8667c56014SZachary Turner 8767c56014SZachary Turner uint32_t DbiModuleDescriptor::getRecordLength() const { 8867c56014SZachary Turner uint32_t M = ModuleName.str().size() + 1; 8967c56014SZachary Turner uint32_t O = ObjFileName.str().size() + 1; 9067c56014SZachary Turner uint32_t Size = sizeof(ModuleInfoHeader) + M + O; 9167c56014SZachary Turner Size = alignTo(Size, 4); 9267c56014SZachary Turner return Size; 9367c56014SZachary Turner } 94