1 //===- DIAFrameData.cpp - DIA impl. of IPDBFrameData -------------- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "llvm/DebugInfo/PDB/DIA/DIAFrameData.h"
11 #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
12 #include "llvm/DebugInfo/PDB/DIA/DIAUtils.h"
14 using namespace llvm::pdb;
16 DIAFrameData::DIAFrameData(CComPtr<IDiaFrameData> DiaFrameData)
17 : FrameData(DiaFrameData) {}
19 template <typename ArgType>
21 PrivateGetDIAValue(IDiaFrameData *FrameData,
22 HRESULT (__stdcall IDiaFrameData::*Method)(ArgType *)) {
24 if (S_OK == (FrameData->*Method)(&Value))
25 return static_cast<ArgType>(Value);
30 uint32_t DIAFrameData::getAddressOffset() const {
31 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressOffset);
34 uint32_t DIAFrameData::getAddressSection() const {
35 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressSection);
38 uint32_t DIAFrameData::getLengthBlock() const {
39 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_lengthBlock);
42 std::string DIAFrameData::getProgram() const {
43 return invokeBstrMethod(*FrameData, &IDiaFrameData::get_program);
46 uint32_t DIAFrameData::getRelativeVirtualAddress() const {
47 return PrivateGetDIAValue(FrameData,
48 &IDiaFrameData::get_relativeVirtualAddress);
51 uint64_t DIAFrameData::getVirtualAddress() const {
52 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_virtualAddress);