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