1//===- DIASectionContrib.cpp - DIA impl. of IPDBSectionContrib ---- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "llvm/DebugInfo/PDB/DIA/DIASectionContrib.h"
10#include "llvm/DebugInfo/PDB/DIA/DIARawSymbol.h"
11#include "llvm/DebugInfo/PDB/DIA/DIASession.h"
12#include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h"
13
14using namespace llvm;
15using namespace llvm::pdb;
16
17DIASectionContrib::DIASectionContrib(const DIASession &PDBSession,
18 CComPtr<IDiaSectionContrib> DiaSection)
19 : Session(PDBSession), Section(DiaSection) {}
20
21std::unique_ptr<PDBSymbolCompiland> DIASectionContrib::getCompiland() const {
22 CComPtr<IDiaSymbol> Symbol;
23 if (FAILED(Section->get_compiland(&Symbol)))
24 return nullptr;
25
26 auto RawSymbol = std::make_unique<DIARawSymbol>(Session, Symbol);
27 return PDBSymbol::createAs<PDBSymbolCompiland>(Session, std::move(RawSymbol));
28}
29
30template <typename ArgType>
31ArgType
32PrivateGetDIAValue(IDiaSectionContrib *Section,
33 HRESULT (__stdcall IDiaSectionContrib::*Method)(ArgType *)) {
34 ArgType Value;
35 if (S_OK == (Section->*Method)(&Value))
36 return static_cast<ArgType>(Value);
37
38 return ArgType();
39}
40
41uint32_t DIASectionContrib::getAddressSection() const {
42 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_addressSection);
43}
44
45uint32_t DIASectionContrib::getAddressOffset() const {
46 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_addressOffset);
47}
48
49uint64_t DIASectionContrib::getVirtualAddress() const {
50 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_virtualAddress);
51}
52
53uint32_t DIASectionContrib::getRelativeVirtualAddress() const {
54 return PrivateGetDIAValue(Section,
55 &IDiaSectionContrib::get_relativeVirtualAddress);
56}
57
58uint32_t DIASectionContrib::getLength() const {
59 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_length);
60}
61
62bool DIASectionContrib::isNotPaged() const {
63 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_notPaged);
64}
65
66bool DIASectionContrib::hasCode() const {
67 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_code);
68}
69
70bool DIASectionContrib::hasCode16Bit() const {
71 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_code16bit);
72}
73
74bool DIASectionContrib::hasInitializedData() const {
75 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_initializedData);
76}
77
78bool DIASectionContrib::hasUninitializedData() const {
79 return PrivateGetDIAValue(Section,
80 &IDiaSectionContrib::get_uninitializedData);
81}
82
83bool DIASectionContrib::isRemoved() const {
84 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_remove);
85}
86
87bool DIASectionContrib::hasComdat() const {
88 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_comdat);
89}
90
91bool DIASectionContrib::isDiscardable() const {
92 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_discardable);
93}
94
95bool DIASectionContrib::isNotCached() const {
96 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_notCached);
97}
98
99bool DIASectionContrib::isShared() const {
100 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_share);
101}
102
103bool DIASectionContrib::isExecutable() const {
104 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_execute);
105}
106
107bool DIASectionContrib::isReadable() const {
108 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_read);
109}
110
111bool DIASectionContrib::isWritable() const {
112 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_write);
113}
114
115uint32_t DIASectionContrib::getDataCrc32() const {
116 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_dataCrc);
117}
118
119uint32_t DIASectionContrib::getRelocationsCrc32() const {
120 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_relocationsCrc);
121}
122
123uint32_t DIASectionContrib::getCompilandId() const {
124 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_compilandId);
125}
126

source code of llvm/lib/DebugInfo/PDB/DIA/DIASectionContrib.cpp