xref: /freebsd-src/contrib/llvm-project/llvm/lib/DebugInfo/PDB/Native/DbiModuleDescriptor.cpp (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
1*0b57cec5SDimitry Andric //===- DbiModuleDescriptor.cpp - PDB module information -------------------===//
2*0b57cec5SDimitry Andric //
3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0b57cec5SDimitry Andric //
7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
8*0b57cec5SDimitry Andric 
9*0b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h"
10*0b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/Native/RawTypes.h"
11*0b57cec5SDimitry Andric #include "llvm/Support/BinaryStreamReader.h"
12*0b57cec5SDimitry Andric #include "llvm/Support/Error.h"
13*0b57cec5SDimitry Andric #include "llvm/Support/MathExtras.h"
14*0b57cec5SDimitry Andric #include <cstdint>
15*0b57cec5SDimitry Andric 
16*0b57cec5SDimitry Andric using namespace llvm;
17*0b57cec5SDimitry Andric using namespace llvm::pdb;
18*0b57cec5SDimitry Andric using namespace llvm::support;
19*0b57cec5SDimitry Andric 
initialize(BinaryStreamRef Stream,DbiModuleDescriptor & Info)20*0b57cec5SDimitry Andric Error DbiModuleDescriptor::initialize(BinaryStreamRef Stream,
21*0b57cec5SDimitry Andric                                       DbiModuleDescriptor &Info) {
22*0b57cec5SDimitry Andric   BinaryStreamReader Reader(Stream);
23*0b57cec5SDimitry Andric   if (auto EC = Reader.readObject(Info.Layout))
24*0b57cec5SDimitry Andric     return EC;
25*0b57cec5SDimitry Andric 
26*0b57cec5SDimitry Andric   if (auto EC = Reader.readCString(Info.ModuleName))
27*0b57cec5SDimitry Andric     return EC;
28*0b57cec5SDimitry Andric 
29*0b57cec5SDimitry Andric   if (auto EC = Reader.readCString(Info.ObjFileName))
30*0b57cec5SDimitry Andric     return EC;
31*0b57cec5SDimitry Andric   return Error::success();
32*0b57cec5SDimitry Andric }
33*0b57cec5SDimitry Andric 
hasECInfo() const34*0b57cec5SDimitry Andric bool DbiModuleDescriptor::hasECInfo() const {
35*0b57cec5SDimitry Andric   return (Layout->Flags & ModInfoFlags::HasECFlagMask) != 0;
36*0b57cec5SDimitry Andric }
37*0b57cec5SDimitry Andric 
getTypeServerIndex() const38*0b57cec5SDimitry Andric uint16_t DbiModuleDescriptor::getTypeServerIndex() const {
39*0b57cec5SDimitry Andric   return (Layout->Flags & ModInfoFlags::TypeServerIndexMask) >>
40*0b57cec5SDimitry Andric          ModInfoFlags::TypeServerIndexShift;
41*0b57cec5SDimitry Andric }
42*0b57cec5SDimitry Andric 
getSectionContrib() const43*0b57cec5SDimitry Andric const SectionContrib &DbiModuleDescriptor::getSectionContrib() const {
44*0b57cec5SDimitry Andric   return Layout->SC;
45*0b57cec5SDimitry Andric }
46*0b57cec5SDimitry Andric 
getModuleStreamIndex() const47*0b57cec5SDimitry Andric uint16_t DbiModuleDescriptor::getModuleStreamIndex() const {
48*0b57cec5SDimitry Andric   return Layout->ModDiStream;
49*0b57cec5SDimitry Andric }
50*0b57cec5SDimitry Andric 
getSymbolDebugInfoByteSize() const51*0b57cec5SDimitry Andric uint32_t DbiModuleDescriptor::getSymbolDebugInfoByteSize() const {
52*0b57cec5SDimitry Andric   return Layout->SymBytes;
53*0b57cec5SDimitry Andric }
54*0b57cec5SDimitry Andric 
getC11LineInfoByteSize() const55*0b57cec5SDimitry Andric uint32_t DbiModuleDescriptor::getC11LineInfoByteSize() const {
56*0b57cec5SDimitry Andric   return Layout->C11Bytes;
57*0b57cec5SDimitry Andric }
58*0b57cec5SDimitry Andric 
getC13LineInfoByteSize() const59*0b57cec5SDimitry Andric uint32_t DbiModuleDescriptor::getC13LineInfoByteSize() const {
60*0b57cec5SDimitry Andric   return Layout->C13Bytes;
61*0b57cec5SDimitry Andric }
62*0b57cec5SDimitry Andric 
getNumberOfFiles() const63*0b57cec5SDimitry Andric uint32_t DbiModuleDescriptor::getNumberOfFiles() const {
64*0b57cec5SDimitry Andric   return Layout->NumFiles;
65*0b57cec5SDimitry Andric }
66*0b57cec5SDimitry Andric 
getSourceFileNameIndex() const67*0b57cec5SDimitry Andric uint32_t DbiModuleDescriptor::getSourceFileNameIndex() const {
68*0b57cec5SDimitry Andric   return Layout->SrcFileNameNI;
69*0b57cec5SDimitry Andric }
70*0b57cec5SDimitry Andric 
getPdbFilePathNameIndex() const71*0b57cec5SDimitry Andric uint32_t DbiModuleDescriptor::getPdbFilePathNameIndex() const {
72*0b57cec5SDimitry Andric   return Layout->PdbFilePathNI;
73*0b57cec5SDimitry Andric }
74*0b57cec5SDimitry Andric 
getModuleName() const75*0b57cec5SDimitry Andric StringRef DbiModuleDescriptor::getModuleName() const { return ModuleName; }
76*0b57cec5SDimitry Andric 
getObjFileName() const77*0b57cec5SDimitry Andric StringRef DbiModuleDescriptor::getObjFileName() const { return ObjFileName; }
78*0b57cec5SDimitry Andric 
getRecordLength() const79*0b57cec5SDimitry Andric uint32_t DbiModuleDescriptor::getRecordLength() const {
80*0b57cec5SDimitry Andric   uint32_t M = ModuleName.str().size() + 1;
81*0b57cec5SDimitry Andric   uint32_t O = ObjFileName.str().size() + 1;
82*0b57cec5SDimitry Andric   uint32_t Size = sizeof(ModuleInfoHeader) + M + O;
83*0b57cec5SDimitry Andric   Size = alignTo(Size, 4);
84*0b57cec5SDimitry Andric   return Size;
85*0b57cec5SDimitry Andric }
86