1//===-- DWARFDebugAranges.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_DWARFDebugAranges_h_
11#define SymbolFileDWARF_DWARFDebugAranges_h_
12
13#include "DWARFDebugArangeSet.h"
14#include <list>
15
16#include "lldb/Core/RangeMap.h"
17
18class SymbolFileDWARF;
19
20class DWARFDebugAranges
21{
22protected:
23    typedef lldb_private::RangeDataArray<dw_addr_t, uint32_t, dw_offset_t, 1> RangeToDIE;
24
25public:
26    typedef RangeToDIE::Entry Range;
27    typedef std::vector<RangeToDIE::Entry> RangeColl;
28
29    DWARFDebugAranges();
30
31    void
32    Clear()
33    {
34        m_aranges.Clear();
35    }
36
37    bool
38    Extract(const lldb_private::DataExtractor &debug_aranges_data);
39
40    bool
41    Generate(SymbolFileDWARF* dwarf2Data);
42
43                // Use append range multiple times and then call sort
44    void
45    AppendRange (dw_offset_t cu_offset,
46                 dw_addr_t low_pc,
47                 dw_addr_t high_pc);
48
49    void
50    Sort (bool minimize);
51
52    const Range*
53    RangeAtIndex(uint32_t idx) const
54    {
55        return m_aranges.GetEntryAtIndex (idx);
56    }
57
58    void
59    Dump (lldb_private::Log *log) const;
60
61    dw_offset_t
62    FindAddress(dw_addr_t address) const;
63
64    bool
65    IsEmpty() const
66    {
67        return m_aranges.IsEmpty();
68    }
69    size_t
70    GetNumRanges() const
71    {
72        return m_aranges.GetSize();
73    }
74
75    dw_offset_t
76    OffsetAtIndex(uint32_t idx) const
77    {
78        const Range *range = m_aranges.GetEntryAtIndex (idx);
79        if (range)
80            return range->data;
81        return DW_INVALID_OFFSET;
82    }
83
84    static void
85    Dump(SymbolFileDWARF* dwarf2Data, lldb_private::Stream *s);
86
87protected:
88
89
90    RangeToDIE m_aranges;
91};
92
93
94#endif  // SymbolFileDWARF_DWARFDebugAranges_h_
95