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 13 using namespace llvm::pdb; 14 15 DIAFrameData::DIAFrameData(CComPtr<IDiaFrameData> DiaFrameData) 16 : FrameData(DiaFrameData) {} 17 18 template <typename ArgType> 19 ArgType 20 PrivateGetDIAValue(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 29 uint32_t DIAFrameData::getAddressOffset() const { 30 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressOffset); 31 } 32 33 uint32_t DIAFrameData::getAddressSection() const { 34 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_addressSection); 35 } 36 37 uint32_t DIAFrameData::getLengthBlock() const { 38 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_lengthBlock); 39 } 40 41 std::string DIAFrameData::getProgram() const { 42 return invokeBstrMethod(*FrameData, &IDiaFrameData::get_program); 43 } 44 45 uint32_t DIAFrameData::getRelativeVirtualAddress() const { 46 return PrivateGetDIAValue(FrameData, 47 &IDiaFrameData::get_relativeVirtualAddress); 48 } 49 50 uint64_t DIAFrameData::getVirtualAddress() const { 51 return PrivateGetDIAValue(FrameData, &IDiaFrameData::get_virtualAddress); 52 } 53