DWARFDebugInfoEntry.h revision 360784
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_DWARFDEBUGINFOENTRY_H
10#define LLVM_DEBUGINFO_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_DWARFDEBUGINFOENTRY_H
63