124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- DWARFDebugAranges.h -------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10144188bc458a35997d2f2e52206ab69747439073Greg Clayton#ifndef SymbolFileDWARF_DWARFDebugAranges_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define SymbolFileDWARF_DWARFDebugAranges_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "DWARFDebugArangeSet.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <list> 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16257663e753af15633e48c7b00eb7b5880168090bGreg Clayton#include "lldb/Core/RangeMap.h" 17257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SymbolFileDWARF; 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass DWARFDebugAranges 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 22257663e753af15633e48c7b00eb7b5880168090bGreg Claytonprotected: 23be42123fa214b039b86ad152bd21d910db7a7af2Greg Clayton typedef lldb_private::RangeDataArray<dw_addr_t, uint32_t, dw_offset_t, 1> RangeToDIE; 24257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 26257663e753af15633e48c7b00eb7b5880168090bGreg Clayton typedef RangeToDIE::Entry Range; 27257663e753af15633e48c7b00eb7b5880168090bGreg Clayton typedef std::vector<RangeToDIE::Entry> RangeColl; 28257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 29257663e753af15633e48c7b00eb7b5880168090bGreg Clayton DWARFDebugAranges(); 30257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 31257663e753af15633e48c7b00eb7b5880168090bGreg Clayton void 32257663e753af15633e48c7b00eb7b5880168090bGreg Clayton Clear() 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 34257663e753af15633e48c7b00eb7b5880168090bGreg Clayton m_aranges.Clear(); 35257663e753af15633e48c7b00eb7b5880168090bGreg Clayton } 36257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 37257663e753af15633e48c7b00eb7b5880168090bGreg Clayton bool 38257663e753af15633e48c7b00eb7b5880168090bGreg Clayton Extract(const lldb_private::DataExtractor &debug_aranges_data); 39257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 40257663e753af15633e48c7b00eb7b5880168090bGreg Clayton bool 41257663e753af15633e48c7b00eb7b5880168090bGreg Clayton Generate(SymbolFileDWARF* dwarf2Data); 42178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton 43178710cd4307f3d44dc76ebd70fc7daf7ebe17c5Greg Clayton // Use append range multiple times and then call sort 44257663e753af15633e48c7b00eb7b5880168090bGreg Clayton void 45257663e753af15633e48c7b00eb7b5880168090bGreg Clayton AppendRange (dw_offset_t cu_offset, 46257663e753af15633e48c7b00eb7b5880168090bGreg Clayton dw_addr_t low_pc, 47257663e753af15633e48c7b00eb7b5880168090bGreg Clayton dw_addr_t high_pc); 48257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 49257663e753af15633e48c7b00eb7b5880168090bGreg Clayton void 50257663e753af15633e48c7b00eb7b5880168090bGreg Clayton Sort (bool minimize); 51257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 52257663e753af15633e48c7b00eb7b5880168090bGreg Clayton const Range* 53257663e753af15633e48c7b00eb7b5880168090bGreg Clayton RangeAtIndex(uint32_t idx) const 54257663e753af15633e48c7b00eb7b5880168090bGreg Clayton { 55257663e753af15633e48c7b00eb7b5880168090bGreg Clayton return m_aranges.GetEntryAtIndex (idx); 56257663e753af15633e48c7b00eb7b5880168090bGreg Clayton } 57257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 58257663e753af15633e48c7b00eb7b5880168090bGreg Clayton void 59257663e753af15633e48c7b00eb7b5880168090bGreg Clayton Dump (lldb_private::Log *log) const; 60257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 61257663e753af15633e48c7b00eb7b5880168090bGreg Clayton dw_offset_t 62257663e753af15633e48c7b00eb7b5880168090bGreg Clayton FindAddress(dw_addr_t address) const; 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 64257663e753af15633e48c7b00eb7b5880168090bGreg Clayton bool 65257663e753af15633e48c7b00eb7b5880168090bGreg Clayton IsEmpty() const 66257663e753af15633e48c7b00eb7b5880168090bGreg Clayton { 67257663e753af15633e48c7b00eb7b5880168090bGreg Clayton return m_aranges.IsEmpty(); 68257663e753af15633e48c7b00eb7b5880168090bGreg Clayton } 6936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t 70257663e753af15633e48c7b00eb7b5880168090bGreg Clayton GetNumRanges() const 71257663e753af15633e48c7b00eb7b5880168090bGreg Clayton { 72bc36a861b8e0b2f2dde34f27c9fa9629a357d598Greg Clayton return m_aranges.GetSize(); 73257663e753af15633e48c7b00eb7b5880168090bGreg Clayton } 74257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 75257663e753af15633e48c7b00eb7b5880168090bGreg Clayton dw_offset_t 76257663e753af15633e48c7b00eb7b5880168090bGreg Clayton OffsetAtIndex(uint32_t idx) const 77257663e753af15633e48c7b00eb7b5880168090bGreg Clayton { 78257663e753af15633e48c7b00eb7b5880168090bGreg Clayton const Range *range = m_aranges.GetEntryAtIndex (idx); 79257663e753af15633e48c7b00eb7b5880168090bGreg Clayton if (range) 80257663e753af15633e48c7b00eb7b5880168090bGreg Clayton return range->data; 81257663e753af15633e48c7b00eb7b5880168090bGreg Clayton return DW_INVALID_OFFSET; 82257663e753af15633e48c7b00eb7b5880168090bGreg Clayton } 83257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 84257663e753af15633e48c7b00eb7b5880168090bGreg Clayton static void 85257663e753af15633e48c7b00eb7b5880168090bGreg Clayton Dump(SymbolFileDWARF* dwarf2Data, lldb_private::Stream *s); 86257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 89257663e753af15633e48c7b00eb7b5880168090bGreg Clayton 90257663e753af15633e48c7b00eb7b5880168090bGreg Clayton RangeToDIE m_aranges; 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // SymbolFileDWARF_DWARFDebugAranges_h_ 95