xref: /llvm-project/llvm/lib/DebugInfo/PDB/DIA/DIAFrameData.cpp (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
1c43e086cSAleksandr Urakov //===- DIAFrameData.cpp - DIA impl. of IPDBFrameData -------------- C++ -*-===//
2c43e086cSAleksandr Urakov //
3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6c43e086cSAleksandr Urakov //
7c43e086cSAleksandr Urakov //===----------------------------------------------------------------------===//
8c43e086cSAleksandr Urakov 
9c43e086cSAleksandr Urakov #include "llvm/DebugInfo/PDB/DIA/DIAFrameData.h"
10c43e086cSAleksandr Urakov #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
11c43e086cSAleksandr Urakov #include "llvm/DebugInfo/PDB/DIA/DIAUtils.h"
12c43e086cSAleksandr Urakov 
13c43e086cSAleksandr Urakov using namespace llvm::pdb;
14c43e086cSAleksandr Urakov 
DIAFrameData(CComPtr<IDiaFrameData> DiaFrameData)1507589729SReid Kleckner DIAFrameData::DIAFrameData(CComPtr<IDiaFrameData> DiaFrameData)
1607589729SReid Kleckner     : FrameData(DiaFrameData) {}
17c43e086cSAleksandr Urakov 
18c43e086cSAleksandr Urakov template <typename ArgType>
19c43e086cSAleksandr Urakov ArgType
PrivateGetDIAValue(IDiaFrameData * FrameData,HRESULT (__stdcall IDiaFrameData::* Method)(ArgType *))20c43e086cSAleksandr Urakov PrivateGetDIAValue(IDiaFrameData *FrameData,
21c43e086cSAleksandr Urakov                    HRESULT (__stdcall IDiaFrameData::*Method)(ArgType *)) {
22c43e086cSAleksandr Urakov   ArgType Value;
23c43e086cSAleksandr Urakov   if (S_OK == (FrameData->*Method)(&Value))
24c43e086cSAleksandr Urakov     return static_cast<ArgType>(Value);
25c43e086cSAleksandr Urakov 
26c43e086cSAleksandr Urakov   return ArgType();
27c43e086cSAleksandr Urakov }
28c43e086cSAleksandr Urakov 
getAddressOffset() const29c43e086cSAleksandr Urakov uint32_t DIAFrameData::getAddressOffset() const {
30c43e086cSAleksandr Urakov   return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressOffset);
31c43e086cSAleksandr Urakov }
32c43e086cSAleksandr Urakov 
getAddressSection() const33c43e086cSAleksandr Urakov uint32_t DIAFrameData::getAddressSection() const {
34c43e086cSAleksandr Urakov   return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressSection);
35c43e086cSAleksandr Urakov }
36c43e086cSAleksandr Urakov 
getLengthBlock() const37c43e086cSAleksandr Urakov uint32_t DIAFrameData::getLengthBlock() const {
38c43e086cSAleksandr Urakov   return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_lengthBlock);
39c43e086cSAleksandr Urakov }
40c43e086cSAleksandr Urakov 
getProgram() const41c43e086cSAleksandr Urakov std::string DIAFrameData::getProgram() const {
42c43e086cSAleksandr Urakov   return invokeBstrMethod(*FrameData, &IDiaFrameData::get_program);
43c43e086cSAleksandr Urakov }
44c43e086cSAleksandr Urakov 
getRelativeVirtualAddress() const45c43e086cSAleksandr Urakov uint32_t DIAFrameData::getRelativeVirtualAddress() const {
46c43e086cSAleksandr Urakov   return PrivateGetDIAValue(FrameData,
47c43e086cSAleksandr Urakov                             &IDiaFrameData::get_relativeVirtualAddress);
48c43e086cSAleksandr Urakov }
49c43e086cSAleksandr Urakov 
getVirtualAddress() const50c43e086cSAleksandr Urakov uint64_t DIAFrameData::getVirtualAddress() const {
51c43e086cSAleksandr Urakov   return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_virtualAddress);
52c43e086cSAleksandr Urakov }
53