1*0b57cec5SDimitry Andric //===- DIAFrameData.cpp - DIA impl. of IPDBFrameData -------------- C++ -*-===// 2*0b57cec5SDimitry Andric // 3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0b57cec5SDimitry Andric // 7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 8*0b57cec5SDimitry Andric 9*0b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/DIA/DIAFrameData.h" 10*0b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/DIA/DIASession.h" 11*0b57cec5SDimitry Andric #include "llvm/DebugInfo/PDB/DIA/DIAUtils.h" 12*0b57cec5SDimitry Andric 13*0b57cec5SDimitry Andric using namespace llvm::pdb; 14*0b57cec5SDimitry Andric DIAFrameData(CComPtr<IDiaFrameData> DiaFrameData)15*0b57cec5SDimitry AndricDIAFrameData::DIAFrameData(CComPtr<IDiaFrameData> DiaFrameData) 16*0b57cec5SDimitry Andric : FrameData(DiaFrameData) {} 17*0b57cec5SDimitry Andric 18*0b57cec5SDimitry Andric template <typename ArgType> 19*0b57cec5SDimitry Andric ArgType PrivateGetDIAValue(IDiaFrameData * FrameData,HRESULT (__stdcall IDiaFrameData::* Method)(ArgType *))20*0b57cec5SDimitry AndricPrivateGetDIAValue(IDiaFrameData *FrameData, 21*0b57cec5SDimitry Andric HRESULT (__stdcall IDiaFrameData::*Method)(ArgType *)) { 22*0b57cec5SDimitry Andric ArgType Value; 23*0b57cec5SDimitry Andric if (S_OK == (FrameData->*Method)(&Value)) 24*0b57cec5SDimitry Andric return static_cast<ArgType>(Value); 25*0b57cec5SDimitry Andric 26*0b57cec5SDimitry Andric return ArgType(); 27*0b57cec5SDimitry Andric } 28*0b57cec5SDimitry Andric getAddressOffset() const29*0b57cec5SDimitry Andricuint32_t DIAFrameData::getAddressOffset() const { 30*0b57cec5SDimitry Andric return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressOffset); 31*0b57cec5SDimitry Andric } 32*0b57cec5SDimitry Andric getAddressSection() const33*0b57cec5SDimitry Andricuint32_t DIAFrameData::getAddressSection() const { 34*0b57cec5SDimitry Andric return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressSection); 35*0b57cec5SDimitry Andric } 36*0b57cec5SDimitry Andric getLengthBlock() const37*0b57cec5SDimitry Andricuint32_t DIAFrameData::getLengthBlock() const { 38*0b57cec5SDimitry Andric return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_lengthBlock); 39*0b57cec5SDimitry Andric } 40*0b57cec5SDimitry Andric getProgram() const41*0b57cec5SDimitry Andricstd::string DIAFrameData::getProgram() const { 42*0b57cec5SDimitry Andric return invokeBstrMethod(*FrameData, &IDiaFrameData::get_program); 43*0b57cec5SDimitry Andric } 44*0b57cec5SDimitry Andric getRelativeVirtualAddress() const45*0b57cec5SDimitry Andricuint32_t DIAFrameData::getRelativeVirtualAddress() const { 46*0b57cec5SDimitry Andric return PrivateGetDIAValue(FrameData, 47*0b57cec5SDimitry Andric &IDiaFrameData::get_relativeVirtualAddress); 48*0b57cec5SDimitry Andric } 49*0b57cec5SDimitry Andric getVirtualAddress() const50*0b57cec5SDimitry Andricuint64_t DIAFrameData::getVirtualAddress() const { 51*0b57cec5SDimitry Andric return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_virtualAddress); 52*0b57cec5SDimitry Andric } 53