1//===- DWARFDebugInfoEntry.h ------------------------------------*- 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#ifndef LLVM_DEBUGINFO_DWARFDEBUGINFOENTRY_H 11#define LLVM_DEBUGINFO_DWARFDEBUGINFOENTRY_H 12 13#include "llvm/BinaryFormat/Dwarf.h" 14#include "llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h" 15#include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h" 16#include <cstdint> 17 18namespace llvm { 19 20class DataExtractor; 21class DWARFUnit; 22 23/// DWARFDebugInfoEntry - A DIE with only the minimum required data. 24class DWARFDebugInfoEntry { 25 /// Offset within the .debug_info of the start of this entry. 26 uint32_t Offset = 0; 27 28 /// The integer depth of this DIE within the compile unit DIEs where the 29 /// compile/type unit DIE has a depth of zero. 30 uint32_t Depth = 0; 31 32 const DWARFAbbreviationDeclaration *AbbrevDecl = nullptr; 33 34public: 35 DWARFDebugInfoEntry() = default; 36 37 /// Extracts a debug info entry, which is a child of a given unit, 38 /// starting at a given offset. If DIE can't be extracted, returns false and 39 /// doesn't change OffsetPtr. 40 bool extractFast(const DWARFUnit &U, uint32_t *OffsetPtr); 41 42 /// High performance extraction should use this call. 43 bool extractFast(const DWARFUnit &U, uint32_t *OffsetPtr, 44 const DWARFDataExtractor &DebugInfoData, uint32_t UEndOffset, 45 uint32_t Depth); 46 47 uint32_t getOffset() const { return Offset; } 48 uint32_t getDepth() const { return Depth; } 49 50 dwarf::Tag getTag() const { 51 return AbbrevDecl ? AbbrevDecl->getTag() : dwarf::DW_TAG_null; 52 } 53 54 bool hasChildren() const { return AbbrevDecl && AbbrevDecl->hasChildren(); } 55 56 const DWARFAbbreviationDeclaration *getAbbreviationDeclarationPtr() const { 57 return AbbrevDecl; 58 } 59}; 60 61} // end namespace llvm 62 63#endif // LLVM_DEBUGINFO_DWARFDEBUGINFOENTRY_H 64