]>
Commit | Line | Data |
---|---|---|
1a4d82fc JJ |
1 | //===-- DWARFDebugLoc.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_LIB_DEBUGINFO_DWARFDEBUGLOC_H | |
11 | #define LLVM_LIB_DEBUGINFO_DWARFDEBUGLOC_H | |
12 | ||
13 | #include "DWARFRelocMap.h" | |
14 | #include "llvm/ADT/SmallVector.h" | |
15 | #include "llvm/Support/DataExtractor.h" | |
16 | ||
17 | namespace llvm { | |
18 | ||
19 | class raw_ostream; | |
20 | ||
21 | class DWARFDebugLoc { | |
22 | /// A single location within a location list. | |
23 | struct Entry { | |
24 | /// The beginning address of the instruction range. | |
25 | uint64_t Begin; | |
26 | /// The ending address of the instruction range. | |
27 | uint64_t End; | |
28 | /// The location of the variable within the specified range. | |
29 | SmallVector<unsigned char, 4> Loc; | |
30 | }; | |
31 | ||
32 | /// A list of locations that contain one variable. | |
33 | struct LocationList { | |
34 | /// The beginning offset where this location list is stored in the debug_loc | |
35 | /// section. | |
36 | unsigned Offset; | |
37 | /// All the locations in which the variable is stored. | |
38 | SmallVector<Entry, 2> Entries; | |
39 | }; | |
40 | ||
41 | typedef SmallVector<LocationList, 4> LocationLists; | |
42 | ||
43 | /// A list of all the variables in the debug_loc section, each one describing | |
44 | /// the locations in which the variable is stored. | |
45 | LocationLists Locations; | |
46 | ||
47 | /// A map used to resolve binary relocations. | |
48 | const RelocAddrMap &RelocMap; | |
49 | ||
50 | public: | |
51 | DWARFDebugLoc(const RelocAddrMap &LocRelocMap) : RelocMap(LocRelocMap) {} | |
52 | /// Print the location lists found within the debug_loc section. | |
53 | void dump(raw_ostream &OS) const; | |
54 | /// Parse the debug_loc section accessible via the 'data' parameter using the | |
55 | /// specified address size to interpret the address ranges. | |
56 | void parse(DataExtractor data, unsigned AddressSize); | |
57 | }; | |
58 | ||
59 | class DWARFDebugLocDWO { | |
60 | struct Entry { | |
61 | uint64_t Start; | |
62 | uint32_t Length; | |
63 | SmallVector<unsigned char, 4> Loc; | |
64 | }; | |
65 | ||
66 | struct LocationList { | |
67 | unsigned Offset; | |
68 | SmallVector<Entry, 2> Entries; | |
69 | }; | |
70 | ||
71 | typedef SmallVector<LocationList, 4> LocationLists; | |
72 | ||
73 | LocationLists Locations; | |
74 | ||
75 | public: | |
76 | void parse(DataExtractor data); | |
77 | void dump(raw_ostream &OS) const; | |
78 | }; | |
79 | } | |
80 | ||
81 | #endif |