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 18 using namespace llvm; 19 using namespace llvm::pdb; 20 using namespace llvm::support; 21 22 DbiModuleDescriptor::DbiModuleDescriptor() = default; 23 24 DbiModuleDescriptor::DbiModuleDescriptor(const DbiModuleDescriptor &Info) = 25 default; 26 27 DbiModuleDescriptor::~DbiModuleDescriptor() = default; 28 initialize(BinaryStreamRef Stream,DbiModuleDescriptor & Info)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 hasECInfo() const43bool DbiModuleDescriptor::hasECInfo() const { 44 return (Layout->Flags & ModInfoFlags::HasECFlagMask) != 0; 45 } 46 getTypeServerIndex() const47uint16_t DbiModuleDescriptor::getTypeServerIndex() const { 48 return (Layout->Flags & ModInfoFlags::TypeServerIndexMask) >> 49 ModInfoFlags::TypeServerIndexShift; 50 } 51 getSectionContrib() const52const SectionContrib &DbiModuleDescriptor::getSectionContrib() const { 53 return Layout->SC; 54 } 55 getModuleStreamIndex() const56uint16_t DbiModuleDescriptor::getModuleStreamIndex() const { 57 return Layout->ModDiStream; 58 } 59 getSymbolDebugInfoByteSize() const60uint32_t DbiModuleDescriptor::getSymbolDebugInfoByteSize() const { 61 return Layout->SymBytes; 62 } 63 getC11LineInfoByteSize() const64uint32_t DbiModuleDescriptor::getC11LineInfoByteSize() const { 65 return Layout->C11Bytes; 66 } 67 getC13LineInfoByteSize() const68uint32_t DbiModuleDescriptor::getC13LineInfoByteSize() const { 69 return Layout->C13Bytes; 70 } 71 getNumberOfFiles() const72uint32_t DbiModuleDescriptor::getNumberOfFiles() const { 73 return Layout->NumFiles; 74 } 75 getSourceFileNameIndex() const76uint32_t DbiModuleDescriptor::getSourceFileNameIndex() const { 77 return Layout->SrcFileNameNI; 78 } 79 getPdbFilePathNameIndex() const80uint32_t DbiModuleDescriptor::getPdbFilePathNameIndex() const { 81 return Layout->PdbFilePathNI; 82 } 83 getModuleName() const84StringRef DbiModuleDescriptor::getModuleName() const { return ModuleName; } 85 getObjFileName() const86StringRef DbiModuleDescriptor::getObjFileName() const { return ObjFileName; } 87 getRecordLength() const88uint32_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