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