1 //===- DWARFDebugInfoEntry.h ------------------------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_DEBUGINFO_DWARFDEBUGINFOENTRY_H
10 #define LLVM_DEBUGINFO_DWARFDEBUGINFOENTRY_H
12 #include "llvm/BinaryFormat/Dwarf.h"
13 #include "llvm/DebugInfo/DWARF/DWARFAbbreviationDeclaration.h"
14 #include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h"
22 /// DWARFDebugInfoEntry - A DIE with only the minimum required data.
23 class DWARFDebugInfoEntry
{
24 /// Offset within the .debug_info of the start of this entry.
27 /// The integer depth of this DIE within the compile unit DIEs where the
28 /// compile/type unit DIE has a depth of zero.
31 const DWARFAbbreviationDeclaration
*AbbrevDecl
= nullptr;
34 DWARFDebugInfoEntry() = default;
36 /// Extracts a debug info entry, which is a child of a given unit,
37 /// starting at a given offset. If DIE can't be extracted, returns false and
38 /// doesn't change OffsetPtr.
39 bool extractFast(const DWARFUnit
&U
, uint64_t *OffsetPtr
);
41 /// High performance extraction should use this call.
42 bool extractFast(const DWARFUnit
&U
, uint64_t *OffsetPtr
,
43 const DWARFDataExtractor
&DebugInfoData
, uint64_t UEndOffset
,
46 uint64_t getOffset() const { return Offset
; }
47 uint32_t getDepth() const { return Depth
; }
49 dwarf::Tag
getTag() const {
50 return AbbrevDecl
? AbbrevDecl
->getTag() : dwarf::DW_TAG_null
;
53 bool hasChildren() const { return AbbrevDecl
&& AbbrevDecl
->hasChildren(); }
55 const DWARFAbbreviationDeclaration
*getAbbreviationDeclarationPtr() const {
60 } // end namespace llvm
62 #endif // LLVM_DEBUGINFO_DWARFDEBUGINFOENTRY_H