1 //===- DIAFrameData.cpp - DIA impl. of IPDBFrameData -------------- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "llvm/DebugInfo/PDB/DIA/DIAFrameData.h" 11 #include "llvm/DebugInfo/PDB/DIA/DIASession.h" 12 #include "llvm/DebugInfo/PDB/DIA/DIAUtils.h" 13 14 using namespace llvm::pdb; 15 DIAFrameData(CComPtr<IDiaFrameData> DiaFrameData)16DIAFrameData::DIAFrameData(CComPtr<IDiaFrameData> DiaFrameData) 17 : FrameData(DiaFrameData) {} 18 19 template <typename ArgType> 20 ArgType PrivateGetDIAValue(IDiaFrameData * FrameData,HRESULT (__stdcall IDiaFrameData::* Method)(ArgType *))21PrivateGetDIAValue(IDiaFrameData *FrameData, 22 HRESULT (__stdcall IDiaFrameData::*Method)(ArgType *)) { 23 ArgType Value; 24 if (S_OK == (FrameData->*Method)(&Value)) 25 return static_cast<ArgType>(Value); 26 27 return ArgType(); 28 } 29 getAddressOffset() const30uint32_t DIAFrameData::getAddressOffset() const { 31 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressOffset); 32 } 33 getAddressSection() const34uint32_t DIAFrameData::getAddressSection() const { 35 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressSection); 36 } 37 getLengthBlock() const38uint32_t DIAFrameData::getLengthBlock() const { 39 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_lengthBlock); 40 } 41 getProgram() const42std::string DIAFrameData::getProgram() const { 43 return invokeBstrMethod(*FrameData, &IDiaFrameData::get_program); 44 } 45 getRelativeVirtualAddress() const46uint32_t DIAFrameData::getRelativeVirtualAddress() const { 47 return PrivateGetDIAValue(FrameData, 48 &IDiaFrameData::get_relativeVirtualAddress); 49 } 50 getVirtualAddress() const51uint64_t DIAFrameData::getVirtualAddress() const { 52 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_virtualAddress); 53 } 54