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 16 DIAFrameData::DIAFrameData(const DIASession &PDBSession, 17 CComPtr<IDiaFrameData> DiaFrameData) 18 : Session(PDBSession), FrameData(DiaFrameData) {} 19 20 template <typename ArgType> 21 ArgType 22 PrivateGetDIAValue(IDiaFrameData *FrameData, 23 HRESULT (__stdcall IDiaFrameData::*Method)(ArgType *)) { 24 ArgType Value; 25 if (S_OK == (FrameData->*Method)(&Value)) 26 return static_cast<ArgType>(Value); 27 28 return ArgType(); 29 } 30 31 uint32_t DIAFrameData::getAddressOffset() const { 32 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressOffset); 33 } 34 35 uint32_t DIAFrameData::getAddressSection() const { 36 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressSection); 37 } 38 39 uint32_t DIAFrameData::getLengthBlock() const { 40 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_lengthBlock); 41 } 42 43 std::string DIAFrameData::getProgram() const { 44 return invokeBstrMethod(*FrameData, &IDiaFrameData::get_program); 45 } 46 47 uint32_t DIAFrameData::getRelativeVirtualAddress() const { 48 return PrivateGetDIAValue(FrameData, 49 &IDiaFrameData::get_relativeVirtualAddress); 50 } 51 52 uint64_t DIAFrameData::getVirtualAddress() const { 53 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_virtualAddress); 54 } 55