1254721Semaste//===-- DWARFDebugAranges.h -------------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#ifndef SymbolFileDWARF_DWARFDebugAranges_h_ 11254721Semaste#define SymbolFileDWARF_DWARFDebugAranges_h_ 12254721Semaste 13254721Semaste#include "DWARFDebugArangeSet.h" 14254721Semaste#include <list> 15254721Semaste 16254721Semaste#include "lldb/Core/RangeMap.h" 17254721Semaste 18254721Semasteclass SymbolFileDWARF; 19254721Semaste 20254721Semasteclass DWARFDebugAranges 21254721Semaste{ 22254721Semasteprotected: 23254721Semaste typedef lldb_private::RangeDataArray<dw_addr_t, uint32_t, dw_offset_t, 1> RangeToDIE; 24254721Semaste 25254721Semastepublic: 26254721Semaste typedef RangeToDIE::Entry Range; 27254721Semaste typedef std::vector<RangeToDIE::Entry> RangeColl; 28254721Semaste 29254721Semaste DWARFDebugAranges(); 30254721Semaste 31254721Semaste void 32254721Semaste Clear() 33254721Semaste { 34254721Semaste m_aranges.Clear(); 35254721Semaste } 36254721Semaste 37254721Semaste bool 38254721Semaste Extract(const lldb_private::DataExtractor &debug_aranges_data); 39254721Semaste 40254721Semaste bool 41254721Semaste Generate(SymbolFileDWARF* dwarf2Data); 42254721Semaste 43254721Semaste // Use append range multiple times and then call sort 44254721Semaste void 45254721Semaste AppendRange (dw_offset_t cu_offset, 46254721Semaste dw_addr_t low_pc, 47254721Semaste dw_addr_t high_pc); 48254721Semaste 49254721Semaste void 50254721Semaste Sort (bool minimize); 51254721Semaste 52254721Semaste const Range* 53254721Semaste RangeAtIndex(uint32_t idx) const 54254721Semaste { 55254721Semaste return m_aranges.GetEntryAtIndex (idx); 56254721Semaste } 57254721Semaste 58254721Semaste void 59254721Semaste Dump (lldb_private::Log *log) const; 60254721Semaste 61254721Semaste dw_offset_t 62254721Semaste FindAddress(dw_addr_t address) const; 63254721Semaste 64254721Semaste bool 65254721Semaste IsEmpty() const 66254721Semaste { 67254721Semaste return m_aranges.IsEmpty(); 68254721Semaste } 69254721Semaste size_t 70254721Semaste GetNumRanges() const 71254721Semaste { 72254721Semaste return m_aranges.GetSize(); 73254721Semaste } 74254721Semaste 75254721Semaste dw_offset_t 76254721Semaste OffsetAtIndex(uint32_t idx) const 77254721Semaste { 78254721Semaste const Range *range = m_aranges.GetEntryAtIndex (idx); 79254721Semaste if (range) 80254721Semaste return range->data; 81254721Semaste return DW_INVALID_OFFSET; 82254721Semaste } 83254721Semaste 84254721Semaste static void 85254721Semaste Dump(SymbolFileDWARF* dwarf2Data, lldb_private::Stream *s); 86254721Semaste 87254721Semasteprotected: 88254721Semaste 89254721Semaste 90254721Semaste RangeToDIE m_aranges; 91254721Semaste}; 92254721Semaste 93254721Semaste 94254721Semaste#endif // SymbolFileDWARF_DWARFDebugAranges_h_ 95