53 lines · 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-exception6//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>19ArgType20PrivateGetDIAValue(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