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
9#include "llvm/DebugInfo/PDB/DIA/DIAFrameData.h"
10#include "llvm/DebugInfo/PDB/DIA/DIASession.h"
11#include "llvm/DebugInfo/PDB/DIA/DIAUtils.h"
12
13using namespace llvm::pdb;
14
15DIAFrameData::DIAFrameData(CComPtr<IDiaFrameData> DiaFrameData)
16 : FrameData(DiaFrameData) {}
17
18template <typename ArgType>
19ArgType
20PrivateGetDIAValue(IDiaFrameData *FrameData,
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
29uint32_t DIAFrameData::getAddressOffset() const {
30 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressOffset);
31}
32
33uint32_t DIAFrameData::getAddressSection() const {
34 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressSection);
35}
36
37uint32_t DIAFrameData::getLengthBlock() const {
38 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_lengthBlock);
39}
40
41std::string DIAFrameData::getProgram() const {
42 return invokeBstrMethod(*FrameData, &IDiaFrameData::get_program);
43}
44
45uint32_t DIAFrameData::getRelativeVirtualAddress() const {
46 return PrivateGetDIAValue(FrameData,
47 &IDiaFrameData::get_relativeVirtualAddress);
48}
49
50uint64_t DIAFrameData::getVirtualAddress() const {
51 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_virtualAddress);
52}
53

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