Path: blob/main/contrib/llvm-project/llvm/lib/DebugInfo/PDB/DIA/DIASectionContrib.cpp
35293 views
//===- DIASectionContrib.cpp - DIA impl. of IPDBSectionContrib ---- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "llvm/DebugInfo/PDB/DIA/DIASectionContrib.h"9#include "llvm/DebugInfo/PDB/DIA/DIARawSymbol.h"10#include "llvm/DebugInfo/PDB/DIA/DIASession.h"11#include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h"1213using namespace llvm;14using namespace llvm::pdb;1516DIASectionContrib::DIASectionContrib(const DIASession &PDBSession,17CComPtr<IDiaSectionContrib> DiaSection)18: Session(PDBSession), Section(DiaSection) {}1920std::unique_ptr<PDBSymbolCompiland> DIASectionContrib::getCompiland() const {21CComPtr<IDiaSymbol> Symbol;22if (FAILED(Section->get_compiland(&Symbol)))23return nullptr;2425auto RawSymbol = std::make_unique<DIARawSymbol>(Session, Symbol);26return PDBSymbol::createAs<PDBSymbolCompiland>(Session, std::move(RawSymbol));27}2829template <typename ArgType>30ArgType31PrivateGetDIAValue(IDiaSectionContrib *Section,32HRESULT (__stdcall IDiaSectionContrib::*Method)(ArgType *)) {33ArgType Value;34if (S_OK == (Section->*Method)(&Value))35return static_cast<ArgType>(Value);3637return ArgType();38}3940uint32_t DIASectionContrib::getAddressSection() const {41return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_addressSection);42}4344uint32_t DIASectionContrib::getAddressOffset() const {45return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_addressOffset);46}4748uint64_t DIASectionContrib::getVirtualAddress() const {49return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_virtualAddress);50}5152uint32_t DIASectionContrib::getRelativeVirtualAddress() const {53return PrivateGetDIAValue(Section,54&IDiaSectionContrib::get_relativeVirtualAddress);55}5657uint32_t DIASectionContrib::getLength() const {58return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_length);59}6061bool DIASectionContrib::isNotPaged() const {62return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_notPaged);63}6465bool DIASectionContrib::hasCode() const {66return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_code);67}6869bool DIASectionContrib::hasCode16Bit() const {70return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_code16bit);71}7273bool DIASectionContrib::hasInitializedData() const {74return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_initializedData);75}7677bool DIASectionContrib::hasUninitializedData() const {78return PrivateGetDIAValue(Section,79&IDiaSectionContrib::get_uninitializedData);80}8182bool DIASectionContrib::isRemoved() const {83return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_remove);84}8586bool DIASectionContrib::hasComdat() const {87return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_comdat);88}8990bool DIASectionContrib::isDiscardable() const {91return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_discardable);92}9394bool DIASectionContrib::isNotCached() const {95return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_notCached);96}9798bool DIASectionContrib::isShared() const {99return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_share);100}101102bool DIASectionContrib::isExecutable() const {103return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_execute);104}105106bool DIASectionContrib::isReadable() const {107return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_read);108}109110bool DIASectionContrib::isWritable() const {111return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_write);112}113114uint32_t DIASectionContrib::getDataCrc32() const {115return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_dataCrc);116}117118uint32_t DIASectionContrib::getRelocationsCrc32() const {119return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_relocationsCrc);120}121122uint32_t DIASectionContrib::getCompilandId() const {123return PrivateGetDIAValue(Section, &IDiaSectionContrib::get_compilandId);124}125126127