xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugMacro.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1061da546Spatrick //===-- DWARFDebugMacro.h ----------------------------------------*- C++
2061da546Spatrick //-*-===//
3061da546Spatrick //
4061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
6061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7061da546Spatrick //
8061da546Spatrick //===----------------------------------------------------------------------===//
9061da546Spatrick 
10dda28197Spatrick #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGMACRO_H
11dda28197Spatrick #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGMACRO_H
12061da546Spatrick 
13061da546Spatrick #include <map>
14061da546Spatrick 
15061da546Spatrick #include "lldb/Core/dwarf.h"
16061da546Spatrick #include "lldb/Symbol/DebugMacros.h"
17061da546Spatrick #include "lldb/lldb-types.h"
18061da546Spatrick 
19061da546Spatrick namespace lldb_private {
20061da546Spatrick 
21061da546Spatrick class DWARFDataExtractor;
22061da546Spatrick 
23061da546Spatrick } // namespace lldb_private
24061da546Spatrick 
25061da546Spatrick class SymbolFileDWARF;
26061da546Spatrick 
27061da546Spatrick class DWARFDebugMacroHeader {
28061da546Spatrick public:
29061da546Spatrick   enum HeaderFlagMask {
30061da546Spatrick     OFFSET_SIZE_MASK = 0x1,
31061da546Spatrick     DEBUG_LINE_OFFSET_MASK = 0x2,
32061da546Spatrick     OPCODE_OPERANDS_TABLE_MASK = 0x4
33061da546Spatrick   };
34061da546Spatrick 
35061da546Spatrick   static DWARFDebugMacroHeader
36061da546Spatrick   ParseHeader(const lldb_private::DWARFDataExtractor &debug_macro_data,
37061da546Spatrick               lldb::offset_t *offset);
38061da546Spatrick 
OffsetIs64Bit()39061da546Spatrick   bool OffsetIs64Bit() const { return m_offset_is_64_bit; }
40061da546Spatrick 
41061da546Spatrick private:
42061da546Spatrick   static void
43061da546Spatrick   SkipOperandTable(const lldb_private::DWARFDataExtractor &debug_macro_data,
44061da546Spatrick                    lldb::offset_t *offset);
45061da546Spatrick 
46*f6aab3d8Srobert   uint16_t m_version = 0;
47*f6aab3d8Srobert   bool m_offset_is_64_bit = false;
48*f6aab3d8Srobert   uint64_t m_debug_line_offset = 0;
49061da546Spatrick };
50061da546Spatrick 
51061da546Spatrick class DWARFDebugMacroEntry {
52061da546Spatrick public:
53061da546Spatrick   static void
54061da546Spatrick   ReadMacroEntries(const lldb_private::DWARFDataExtractor &debug_macro_data,
55061da546Spatrick                    const lldb_private::DWARFDataExtractor &debug_str_data,
56061da546Spatrick                    const bool offset_is_64_bit, lldb::offset_t *sect_offset,
57061da546Spatrick                    SymbolFileDWARF *sym_file_dwarf,
58061da546Spatrick                    lldb_private::DebugMacrosSP &debug_macros_sp);
59061da546Spatrick };
60061da546Spatrick 
61dda28197Spatrick #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGMACRO_H
62