| //===- DIASectionContrib.cpp - DIA impl. of IPDBSectionContrib ---- C++ -*-===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "llvm/DebugInfo/PDB/DIA/DIASectionContrib.h" | |
| #include "llvm/DebugInfo/PDB/DIA/DIARawSymbol.h" | |
| #include "llvm/DebugInfo/PDB/DIA/DIASession.h" | |
| #include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h" | |
| using namespace llvm; | |
| using namespace llvm::pdb; | |
| DIASectionContrib::DIASectionContrib(const DIASession &PDBSession, | |
| CComPtr<IDiaSectionContrib> DiaSection) | |
| : Session(PDBSession), Section(DiaSection) {} | |
| std::unique_ptr<PDBSymbolCompiland> DIASectionContrib::getCompiland() const { | |
| CComPtr<IDiaSymbol> Symbol; | |
| if (FAILED(Section->get_compiland(&Symbol))) | |
| return nullptr; | |
| auto RawSymbol = llvm::make_unique<DIARawSymbol>(Session, Symbol); | |
| return llvm::make_unique<PDBSymbolCompiland>(Session, std::move(RawSymbol)); | |
| } | |
| template <typename ArgType> | |
| ArgType | |
| PrivateGetDIAValue(IDiaSectionContrib *Section, | |
| HRESULT (__stdcall IDiaSectionContrib::*Method)(ArgType *)) { | |
| ArgType Value; | |
| if (S_OK == (Section->*Method)(&Value)) | |
| return static_cast<ArgType>(Value); | |
| return ArgType(); | |
| } | |
| uint32_t DIASectionContrib::getAddressSection() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_addressSection); | |
| } | |
| uint32_t DIASectionContrib::getAddressOffset() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_addressOffset); | |
| } | |
| uint64_t DIASectionContrib::getVirtualAddress() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_virtualAddress); | |
| } | |
| uint32_t DIASectionContrib::getRelativeVirtualAddress() const { | |
| return PrivateGetDIAValue(Section, | |
| &IDiaSectionContrib::get_relativeVirtualAddress); | |
| } | |
| uint32_t DIASectionContrib::getLength() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_length); | |
| } | |
| bool DIASectionContrib::isNotPaged() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_notPaged); | |
| } | |
| bool DIASectionContrib::hasCode() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_code); | |
| } | |
| bool DIASectionContrib::hasCode16Bit() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_code16bit); | |
| } | |
| bool DIASectionContrib::hasInitializedData() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_initializedData); | |
| } | |
| bool DIASectionContrib::hasUninitializedData() const { | |
| return PrivateGetDIAValue(Section, | |
| &IDiaSectionContrib::get_uninitializedData); | |
| } | |
| bool DIASectionContrib::isRemoved() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_remove); | |
| } | |
| bool DIASectionContrib::hasComdat() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_comdat); | |
| } | |
| bool DIASectionContrib::isDiscardable() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_discardable); | |
| } | |
| bool DIASectionContrib::isNotCached() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_notCached); | |
| } | |
| bool DIASectionContrib::isShared() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_share); | |
| } | |
| bool DIASectionContrib::isExecutable() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_execute); | |
| } | |
| bool DIASectionContrib::isReadable() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_read); | |
| } | |
| bool DIASectionContrib::isWritable() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_write); | |
| } | |
| uint32_t DIASectionContrib::getDataCrc32() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_dataCrc); | |
| } | |
| uint32_t DIASectionContrib::getRelocationsCrc32() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_relocationsCrc); | |
| } | |
| uint32_t DIASectionContrib::getCompilandId() const { | |
| return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_compilandId); | |
| } |