DWARFDebugMacro.h revision 341825
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 LLVM_DEBUGINFO_DWARF_DWARFDEBUGMACRO_H
11#define LLVM_DEBUGINFO_DWARF_DWARFDEBUGMACRO_H
12
13#include "llvm/ADT/SmallVector.h"
14#include "llvm/Support/DataExtractor.h"
15#include <cstdint>
16
17namespace llvm {
18
19class raw_ostream;
20
21class DWARFDebugMacro {
22  /// A single macro entry within a macro list.
23  struct Entry {
24    /// The type of the macro entry.
25    uint32_t Type;
26    union {
27      /// The source line where the macro is defined.
28      uint64_t Line;
29      /// Vendor extension constant value.
30      uint64_t ExtConstant;
31    };
32
33    union {
34      /// The string (name, value) of the macro entry.
35      const char *MacroStr;
36      // An unsigned integer indicating the identity of the source file.
37      uint64_t File;
38      /// Vendor extension string.
39      const char *ExtStr;
40    };
41  };
42
43  using MacroList = SmallVector<Entry, 4>;
44
45  /// A list of all the macro entries in the debug_macinfo section.
46  MacroList Macros;
47
48public:
49  DWARFDebugMacro() = default;
50
51  /// Print the macro list found within the debug_macinfo section.
52  void dump(raw_ostream &OS) const;
53
54  /// Parse the debug_macinfo section accessible via the 'data' parameter.
55  void parse(DataExtractor data);
56
57  /// Return whether the section has any entries.
58  bool empty() const { return Macros.empty(); }
59};
60
61} // end namespace llvm
62
63#endif // LLVM_DEBUGINFO_DWARF_DWARFDEBUGMACRO_H
64