LLVM 20.0.0git
DIAFrameData.cpp
Go to the documentation of this file.
1//===- DIAFrameData.cpp - DIA impl. of IPDBFrameData -------------- 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
12
13using namespace llvm::pdb;
14
15DIAFrameData::DIAFrameData(CComPtr<IDiaFrameData> DiaFrameData)
16 : FrameData(DiaFrameData) {}
17
18template <typename ArgType>
19ArgType
21 HRESULT (__stdcall IDiaFrameData::*Method)(ArgType *)) {
22 ArgType Value;
23 if (S_OK == (FrameData->*Method)(&Value))
24 return static_cast<ArgType>(Value);
25
26 return ArgType();
27}
28
30 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressOffset);
31}
32
34 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressSection);
35}
36
38 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_lengthBlock);
39}
40
41std::string DIAFrameData::getProgram() const {
42 return invokeBstrMethod(*FrameData, &IDiaFrameData::get_program);
43}
44
46 return PrivateGetDIAValue(FrameData,
47 &IDiaFrameData::get_relativeVirtualAddress);
48}
49
51 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_virtualAddress);
52}
ArgType PrivateGetDIAValue(IDiaFrameData *FrameData, HRESULT(__stdcall IDiaFrameData::*Method)(ArgType *))
std::string invokeBstrMethod(Obj &Object, HRESULT(__stdcall Obj::*Func)(BSTR *))
Definition: DIAUtils.h:16
LLVM Value Representation.
Definition: Value.h:74
uint32_t getAddressOffset() const override
uint64_t getVirtualAddress() const override
uint32_t getLengthBlock() const override
DIAFrameData(CComPtr< IDiaFrameData > DiaFrameData)
uint32_t getAddressSection() const override
std::string getProgram() const override
uint32_t getRelativeVirtualAddress() const override