1 //===-- DWARFDebugMacro.h ----------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef SymbolFileDWARF_DWARFDebugMacro_h_
11 #define SymbolFileDWARF_DWARFDebugMacro_h_
12 
13 #include <map>
14 
15 #include "lldb/lldb-types.h"
16 #include "lldb/Core/dwarf.h"
17 #include "lldb/Symbol/DebugMacros.h"
18 
19 namespace lldb_private
20 {
21 
22 class DWARFDataExtractor;
23 
24 } // namespace lldb_private
25 
26 class SymbolFileDWARF;
27 
28 class DWARFDebugMacroHeader
29 {
30 public:
31     enum HeaderFlagMask
32     {
33         OFFSET_SIZE_MASK = 0x1,
34         DEBUG_LINE_OFFSET_MASK = 0x2,
35         OPCODE_OPERANDS_TABLE_MASK = 0x4
36     };
37 
38     static DWARFDebugMacroHeader
39     ParseHeader(const lldb_private::DWARFDataExtractor &debug_macro_data, lldb::offset_t *offset);
40 
41     bool
42     OffsetIs64Bit() const
43     {
44         return m_offset_is_64_bit;
45     }
46 
47 private:
48     static void
49     SkipOperandTable(const lldb_private::DWARFDataExtractor &debug_macro_data, lldb::offset_t *offset);
50 
51     uint16_t m_version;
52     bool m_offset_is_64_bit;
53     uint64_t m_debug_line_offset;
54 };
55 
56 class DWARFDebugMacroEntry
57 {
58 public:
59     static void
60     ReadMacroEntries(const lldb_private::DWARFDataExtractor &debug_macro_data,
61                      const lldb_private::DWARFDataExtractor &debug_str_data,
62                      const bool offset_is_64_bit,
63                      lldb::offset_t *sect_offset,
64                      SymbolFileDWARF *sym_file_dwarf,
65                      lldb_private::DebugMacrosSP &debug_macros_sp);
66 };
67 
68 #endif // SymbolFileDWARF_DWARFDebugMacro_h_
69