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 KlecknerDIAFrameData::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 UrakovPrivateGetDIAValue(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 Urakovuint32_t DIAFrameData::getAddressOffset() const { 30c43e086cSAleksandr Urakov return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressOffset); 31c43e086cSAleksandr Urakov } 32c43e086cSAleksandr Urakov getAddressSection() const33c43e086cSAleksandr Urakovuint32_t DIAFrameData::getAddressSection() const { 34c43e086cSAleksandr Urakov return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressSection); 35c43e086cSAleksandr Urakov } 36c43e086cSAleksandr Urakov getLengthBlock() const37c43e086cSAleksandr Urakovuint32_t DIAFrameData::getLengthBlock() const { 38c43e086cSAleksandr Urakov return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_lengthBlock); 39c43e086cSAleksandr Urakov } 40c43e086cSAleksandr Urakov getProgram() const41c43e086cSAleksandr Urakovstd::string DIAFrameData::getProgram() const { 42c43e086cSAleksandr Urakov return invokeBstrMethod(*FrameData, &IDiaFrameData::get_program); 43c43e086cSAleksandr Urakov } 44c43e086cSAleksandr Urakov getRelativeVirtualAddress() const45c43e086cSAleksandr Urakovuint32_t DIAFrameData::getRelativeVirtualAddress() const { 46c43e086cSAleksandr Urakov return PrivateGetDIAValue(FrameData, 47c43e086cSAleksandr Urakov &IDiaFrameData::get_relativeVirtualAddress); 48c43e086cSAleksandr Urakov } 49c43e086cSAleksandr Urakov getVirtualAddress() const50c43e086cSAleksandr Urakovuint64_t DIAFrameData::getVirtualAddress() const { 51c43e086cSAleksandr Urakov return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_virtualAddress); 52c43e086cSAleksandr Urakov } 53