1193323Sed//===-- DWARFDebugMacro.h ----------------------------------------*- C++
2193323Sed//-*-===//
3193323Sed//
4193323Sed// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5193323Sed// See https://llvm.org/LICENSE.txt for license information.
6193323Sed// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7193323Sed//
8193323Sed//===----------------------------------------------------------------------===//
9193323Sed
10193323Sed#ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGMACRO_H
11193323Sed#define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGMACRO_H
12193323Sed
13193323Sed#include <map>
14249423Sdim
15218893Sdim#include "lldb/Core/dwarf.h"
16193323Sed#include "lldb/Symbol/DebugMacros.h"
17226633Sdim#include "lldb/lldb-types.h"
18249423Sdim
19218893Sdimnamespace lldb_private {
20198090Srdivackyclass DWARFDataExtractor;
21226633Sdim}
22193323Sed
23234353Sdimnamespace lldb_private::plugin {
24193323Sednamespace dwarf {
25193323Sedclass SymbolFileDWARF;
26226633Sdim
27226633Sdimclass DWARFDebugMacroHeader {
28226633Sdimpublic:
29226633Sdim  enum HeaderFlagMask {
30221345Sdim    OFFSET_SIZE_MASK = 0x1,
31249423Sdim    DEBUG_LINE_OFFSET_MASK = 0x2,
32249423Sdim    OPCODE_OPERANDS_TABLE_MASK = 0x4
33249423Sdim  };
34249423Sdim
35249423Sdim  static DWARFDebugMacroHeader
36198090Srdivacky  ParseHeader(const DWARFDataExtractor &debug_macro_data,
37198090Srdivacky              lldb::offset_t *offset);
38198090Srdivacky
39198090Srdivacky  bool OffsetIs64Bit() const { return m_offset_is_64_bit; }
40193323Sed
41193323Sedprivate:
42234353Sdim  static void SkipOperandTable(const DWARFDataExtractor &debug_macro_data,
43193323Sed                               lldb::offset_t *offset);
44193323Sed
45226633Sdim  uint16_t m_version = 0;
46226633Sdim  bool m_offset_is_64_bit = false;
47234353Sdim  uint64_t m_debug_line_offset = 0;
48234353Sdim};
49234353Sdim
50234353Sdimclass DWARFDebugMacroEntry {
51249423Sdimpublic:
52193323Sed  static void ReadMacroEntries(const DWARFDataExtractor &debug_macro_data,
53221345Sdim                               const DWARFDataExtractor &debug_str_data,
54224145Sdim                               const bool offset_is_64_bit,
55234353Sdim                               lldb::offset_t *sect_offset,
56234353Sdim                               SymbolFileDWARF *sym_file_dwarf,
57193323Sed                               DebugMacrosSP &debug_macros_sp);
58193323Sed};
59249423Sdim} // namespace dwarf
60249423Sdim} // namespace lldb_private::plugin
61249423Sdim
62249423Sdim#endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGMACRO_H
63249423Sdim