]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/DebugInfo/PDB/DIA/DIAFrameData.cpp
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / DebugInfo / PDB / DIA / DIAFrameData.cpp
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
13 using namespace llvm::pdb;
14
15 DIAFrameData::DIAFrameData(CComPtr<IDiaFrameData> DiaFrameData)
16     : FrameData(DiaFrameData) {}
17
18 template <typename ArgType>
19 ArgType
20 PrivateGetDIAValue(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
29 uint32_t DIAFrameData::getAddressOffset() const {
30   return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressOffset);
31 }
32
33 uint32_t DIAFrameData::getAddressSection() const {
34   return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressSection);
35 }
36
37 uint32_t DIAFrameData::getLengthBlock() const {
38   return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_lengthBlock);
39 }
40
41 std::string DIAFrameData::getProgram() const {
42   return invokeBstrMethod(*FrameData, &IDiaFrameData::get_program);
43 }
44
45 uint32_t DIAFrameData::getRelativeVirtualAddress() const {
46   return PrivateGetDIAValue(FrameData,
47                             &IDiaFrameData::get_relativeVirtualAddress);
48 }
49
50 uint64_t DIAFrameData::getVirtualAddress() const {
51   return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_virtualAddress);
52 }