blob: bfe2fc3ac02d7d0590508a2218d29469b7aef496 [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===- 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