LLVM 19.0.0git
DIASectionContrib.cpp
Go to the documentation of this file.
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
13
14using namespace llvm;
15using namespace llvm::pdb;
16
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
42 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_addressSection);
43}
44
46 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_addressOffset);
47}
48
50 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_virtualAddress);
51}
52
54 return PrivateGetDIAValue(Section,
55 &IDiaSectionContrib::get_relativeVirtualAddress);
56}
57
59 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_length);
60}
61
63 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_notPaged);
64}
65
67 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_code);
68}
69
71 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_code16bit);
72}
73
75 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_initializedData);
76}
77
79 return PrivateGetDIAValue(Section,
80 &IDiaSectionContrib::get_uninitializedData);
81}
82
84 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_remove);
85}
86
88 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_comdat);
89}
90
92 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_discardable);
93}
94
96 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_notCached);
97}
98
100 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_share);
101}
102
104 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_execute);
105}
106
108 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_read);
109}
110
112 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_write);
113}
114
116 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_dataCrc);
117}
118
120 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_relocationsCrc);
121}
122
124 return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_compilandId);
125}
ArgType PrivateGetDIAValue(IDiaFrameData *FrameData, HRESULT(__stdcall IDiaFrameData::*Method)(ArgType *))
LLVM Value Representation.
Definition: Value.h:74
bool isShared() const override
uint32_t getLength() const override
bool isReadable() const override
bool isNotPaged() const override
uint32_t getCompilandId() const override
bool hasInitializedData() const override
uint64_t getVirtualAddress() const override
bool hasUninitializedData() const override
DIASectionContrib(const DIASession &PDBSession, CComPtr< IDiaSectionContrib > DiaSection)
uint32_t getAddressOffset() const override
bool isRemoved() const override
uint32_t getRelocationsCrc32() const override
bool isExecutable() const override
uint32_t getDataCrc32() const override
uint32_t getAddressSection() const override
uint32_t getRelativeVirtualAddress() const override
bool isDiscardable() const override
bool hasCode16Bit() const override
bool isNotCached() const override
bool hasComdat() const override
std::unique_ptr< PDBSymbolCompiland > getCompiland() const override
bool isWritable() const override
bool hasCode() const override
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18