xref: /openbsd-src/gnu/llvm/llvm/lib/DebugInfo/PDB/Native/DbiModuleDescriptor.cpp (revision 09467b48e8bc8b4905716062da846024139afbf2)
1*09467b48Spatrick //===- DbiModuleDescriptor.cpp - PDB module information -------------------===//
2*09467b48Spatrick //
3*09467b48Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*09467b48Spatrick // See https://llvm.org/LICENSE.txt for license information.
5*09467b48Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*09467b48Spatrick //
7*09467b48Spatrick //===----------------------------------------------------------------------===//
8*09467b48Spatrick 
9*09467b48Spatrick #include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h"
10*09467b48Spatrick #include "llvm/DebugInfo/PDB/Native/RawTypes.h"
11*09467b48Spatrick #include "llvm/Support/BinaryStreamReader.h"
12*09467b48Spatrick #include "llvm/Support/Endian.h"
13*09467b48Spatrick #include "llvm/Support/Error.h"
14*09467b48Spatrick #include "llvm/Support/MathExtras.h"
15*09467b48Spatrick #include <cstdint>
16*09467b48Spatrick 
17*09467b48Spatrick using namespace llvm;
18*09467b48Spatrick using namespace llvm::pdb;
19*09467b48Spatrick using namespace llvm::support;
20*09467b48Spatrick 
initialize(BinaryStreamRef Stream,DbiModuleDescriptor & Info)21*09467b48Spatrick Error DbiModuleDescriptor::initialize(BinaryStreamRef Stream,
22*09467b48Spatrick                                       DbiModuleDescriptor &Info) {
23*09467b48Spatrick   BinaryStreamReader Reader(Stream);
24*09467b48Spatrick   if (auto EC = Reader.readObject(Info.Layout))
25*09467b48Spatrick     return EC;
26*09467b48Spatrick 
27*09467b48Spatrick   if (auto EC = Reader.readCString(Info.ModuleName))
28*09467b48Spatrick     return EC;
29*09467b48Spatrick 
30*09467b48Spatrick   if (auto EC = Reader.readCString(Info.ObjFileName))
31*09467b48Spatrick     return EC;
32*09467b48Spatrick   return Error::success();
33*09467b48Spatrick }
34*09467b48Spatrick 
hasECInfo() const35*09467b48Spatrick bool DbiModuleDescriptor::hasECInfo() const {
36*09467b48Spatrick   return (Layout->Flags & ModInfoFlags::HasECFlagMask) != 0;
37*09467b48Spatrick }
38*09467b48Spatrick 
getTypeServerIndex() const39*09467b48Spatrick uint16_t DbiModuleDescriptor::getTypeServerIndex() const {
40*09467b48Spatrick   return (Layout->Flags & ModInfoFlags::TypeServerIndexMask) >>
41*09467b48Spatrick          ModInfoFlags::TypeServerIndexShift;
42*09467b48Spatrick }
43*09467b48Spatrick 
getSectionContrib() const44*09467b48Spatrick const SectionContrib &DbiModuleDescriptor::getSectionContrib() const {
45*09467b48Spatrick   return Layout->SC;
46*09467b48Spatrick }
47*09467b48Spatrick 
getModuleStreamIndex() const48*09467b48Spatrick uint16_t DbiModuleDescriptor::getModuleStreamIndex() const {
49*09467b48Spatrick   return Layout->ModDiStream;
50*09467b48Spatrick }
51*09467b48Spatrick 
getSymbolDebugInfoByteSize() const52*09467b48Spatrick uint32_t DbiModuleDescriptor::getSymbolDebugInfoByteSize() const {
53*09467b48Spatrick   return Layout->SymBytes;
54*09467b48Spatrick }
55*09467b48Spatrick 
getC11LineInfoByteSize() const56*09467b48Spatrick uint32_t DbiModuleDescriptor::getC11LineInfoByteSize() const {
57*09467b48Spatrick   return Layout->C11Bytes;
58*09467b48Spatrick }
59*09467b48Spatrick 
getC13LineInfoByteSize() const60*09467b48Spatrick uint32_t DbiModuleDescriptor::getC13LineInfoByteSize() const {
61*09467b48Spatrick   return Layout->C13Bytes;
62*09467b48Spatrick }
63*09467b48Spatrick 
getNumberOfFiles() const64*09467b48Spatrick uint32_t DbiModuleDescriptor::getNumberOfFiles() const {
65*09467b48Spatrick   return Layout->NumFiles;
66*09467b48Spatrick }
67*09467b48Spatrick 
getSourceFileNameIndex() const68*09467b48Spatrick uint32_t DbiModuleDescriptor::getSourceFileNameIndex() const {
69*09467b48Spatrick   return Layout->SrcFileNameNI;
70*09467b48Spatrick }
71*09467b48Spatrick 
getPdbFilePathNameIndex() const72*09467b48Spatrick uint32_t DbiModuleDescriptor::getPdbFilePathNameIndex() const {
73*09467b48Spatrick   return Layout->PdbFilePathNI;
74*09467b48Spatrick }
75*09467b48Spatrick 
getModuleName() const76*09467b48Spatrick StringRef DbiModuleDescriptor::getModuleName() const { return ModuleName; }
77*09467b48Spatrick 
getObjFileName() const78*09467b48Spatrick StringRef DbiModuleDescriptor::getObjFileName() const { return ObjFileName; }
79*09467b48Spatrick 
getRecordLength() const80*09467b48Spatrick uint32_t DbiModuleDescriptor::getRecordLength() const {
81*09467b48Spatrick   uint32_t M = ModuleName.str().size() + 1;
82*09467b48Spatrick   uint32_t O = ObjFileName.str().size() + 1;
83*09467b48Spatrick   uint32_t Size = sizeof(ModuleInfoHeader) + M + O;
84*09467b48Spatrick   Size = alignTo(Size, 4);
85*09467b48Spatrick   return Size;
86*09467b48Spatrick }
87