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