summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2011-10-08 00:49:15 +0000
committerGreg Clayton <gclayton@apple.com>2011-10-08 00:49:15 +0000
commitea3e7d5ccf4f00741e4b106978bd8dab5cece3a1 (patch)
tree383f59653e8cae73dea0347a3d84b49310e5eaf1 /lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp
parent0ad4caa26384fad46de9baba4fa326890cfebbcc (diff)
downloadbcm5719-llvm-ea3e7d5ccf4f00741e4b106978bd8dab5cece3a1.tar.gz
bcm5719-llvm-ea3e7d5ccf4f00741e4b106978bd8dab5cece3a1.zip
Added more functionality to Range template classes in RangeMap.h and converted remaining DWARF areas that were using ranges over to this class. Also converted lldb_private::Block to use it.
llvm-svn: 141460
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp')
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp232
1 files changed, 100 insertions, 132 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp
index 3502d56a82e..f69b370b515 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp
@@ -30,94 +30,62 @@ DWARFDebugRanges::Extract(SymbolFileDWARF* dwarf2Data)
RangeList range_list;
dw_offset_t offset = 0;
dw_offset_t debug_ranges_offset = offset;
- while (range_list.Extract(dwarf2Data, &offset))
+ while (Extract(dwarf2Data, &offset, range_list))
{
m_range_map[debug_ranges_offset] = range_list;
debug_ranges_offset = offset;
}
}
-bool
-DWARFDebugRanges::RangeList::AddRange(dw_addr_t lo_addr, dw_addr_t hi_addr)
-{
- if (lo_addr <= hi_addr)
- {
- Range range(lo_addr, hi_addr);
- ranges.push_back(range);
- return true;
- }
- return false;
-}
-
-const DWARFDebugRanges::Range*
-DWARFDebugRanges::RangeList::Lookup(dw_addr_t offset) const
-{
- Range::const_iterator pos = ranges.begin();
- Range::const_iterator end_pos = ranges.end();
- for (pos = ranges.begin(); pos != end_pos; ++pos)
- {
- if (pos->begin_offset <= offset && offset < pos->end_offset)
- {
- return &(*pos);
- }
- }
- return NULL;
-}
-
-size_t
-DWARFDebugRanges::RangeList::Size() const
-{
- return ranges.size();
-}
-
-void
-DWARFDebugRanges::RangeList::AddOffset(dw_addr_t offset)
-{
- if (!ranges.empty())
- {
- Range::iterator pos = ranges.begin();
- Range::iterator end_pos = ranges.end();
- for (pos = ranges.begin(); pos != end_pos; ++pos)
- {
- // assert for unsigned overflows
- assert (~pos->begin_offset >= offset);
- assert (~pos->end_offset >= offset);
- pos->begin_offset += offset;
- pos->end_offset += offset;
- }
- }
-}
-
-void
-DWARFDebugRanges::RangeList::SubtractOffset(dw_addr_t offset)
-{
- if (!ranges.empty())
- {
- Range::iterator pos = ranges.begin();
- Range::iterator end_pos = ranges.end();
- for (pos = ranges.begin(); pos != end_pos; ++pos)
- {
- assert (pos->begin_offset >= offset);
- assert (pos->end_offset >= offset);
- pos->begin_offset -= offset;
- pos->end_offset -= offset;
- }
- }
-}
-
-
-const DWARFDebugRanges::Range*
-DWARFDebugRanges::RangeList::RangeAtIndex(size_t i) const
-{
- if (i < ranges.size())
- return &ranges[i];
- return NULL;
-}
+//void
+//DWARFDebugRanges::RangeList::AddOffset(dw_addr_t offset)
+//{
+// if (!ranges.empty())
+// {
+// Range::iterator pos = ranges.begin();
+// Range::iterator end_pos = ranges.end();
+// for (pos = ranges.begin(); pos != end_pos; ++pos)
+// {
+// // assert for unsigned overflows
+// assert (~pos->begin_offset >= offset);
+// assert (~pos->end_offset >= offset);
+// pos->begin_offset += offset;
+// pos->end_offset += offset;
+// }
+// }
+//}
+//
+//void
+//DWARFDebugRanges::RangeList::SubtractOffset(dw_addr_t offset)
+//{
+// if (!ranges.empty())
+// {
+// Range::iterator pos = ranges.begin();
+// Range::iterator end_pos = ranges.end();
+// for (pos = ranges.begin(); pos != end_pos; ++pos)
+// {
+// assert (pos->begin_offset >= offset);
+// assert (pos->end_offset >= offset);
+// pos->begin_offset -= offset;
+// pos->end_offset -= offset;
+// }
+// }
+//}
+//
+//
+//const DWARFDebugRanges::Range*
+//DWARFDebugRanges::RangeList::RangeAtIndex(size_t i) const
+//{
+// if (i < ranges.size())
+// return &ranges[i];
+// return NULL;
+//}
bool
-DWARFDebugRanges::RangeList::Extract(SymbolFileDWARF* dwarf2Data, uint32_t* offset_ptr)
+DWARFDebugRanges::Extract(SymbolFileDWARF* dwarf2Data, uint32_t* offset_ptr, RangeList &range_list)
{
- Clear();
+ range_list.Clear();
+
uint32_t range_offset = *offset_ptr;
const DataExtractor& debug_ranges_data = dwarf2Data->get_debug_ranges_data();
uint32_t addr_size = debug_ranges_data.GetAddressByteSize();
@@ -154,65 +122,65 @@ DWARFDebugRanges::RangeList::Extract(SymbolFileDWARF* dwarf2Data, uint32_t* offs
}
// Filter out empty ranges
- if (begin != end)
- ranges.push_back(Range(begin, end));
+ if (begin < end)
+ range_list.Append(Range(begin, end - begin));
}
// Make sure we consumed at least something
return range_offset != *offset_ptr;
}
-
-dw_addr_t
-DWARFDebugRanges::RangeList::LowestAddress(const dw_addr_t cu_base_addr) const
-{
- dw_addr_t addr = DW_INVALID_ADDRESS;
- dw_addr_t curr_base_addr = cu_base_addr;
- if (!ranges.empty())
- {
- Range::const_iterator pos = ranges.begin();
- Range::const_iterator end_pos = ranges.end();
- for (pos = ranges.begin(); pos != end_pos; ++pos)
- {
- if (pos->begin_offset == DW_INVALID_ADDRESS)
- curr_base_addr = pos->end_offset;
- else if (curr_base_addr != DW_INVALID_ADDRESS)
- {
- dw_addr_t curr_addr = curr_base_addr + pos->begin_offset;
- if (addr > curr_addr)
- addr = curr_addr;
- }
- }
- }
- return addr;
-}
-
-dw_addr_t
-DWARFDebugRanges::RangeList::HighestAddress(const dw_addr_t cu_base_addr) const
-{
- dw_addr_t addr = 0;
- dw_addr_t curr_base_addr = cu_base_addr;
- if (!ranges.empty())
- {
- Range::const_iterator pos = ranges.begin();
- Range::const_iterator end_pos = ranges.end();
- for (pos = ranges.begin(); pos != end_pos; ++pos)
- {
- if (pos->begin_offset == DW_INVALID_ADDRESS)
- curr_base_addr = pos->end_offset;
- else if (curr_base_addr != DW_INVALID_ADDRESS)
- {
- dw_addr_t curr_addr = curr_base_addr + pos->end_offset;
- if (addr < curr_addr)
- addr = curr_addr;
- }
- }
- }
- if (addr != 0)
- return addr;
- return DW_INVALID_ADDRESS;
-}
-
+//
+//dw_addr_t
+//DWARFDebugRanges::RangeList::LowestAddress(const dw_addr_t cu_base_addr) const
+//{
+// dw_addr_t addr = DW_INVALID_ADDRESS;
+// dw_addr_t curr_base_addr = cu_base_addr;
+// if (!ranges.empty())
+// {
+// Range::const_iterator pos = ranges.begin();
+// Range::const_iterator end_pos = ranges.end();
+// for (pos = ranges.begin(); pos != end_pos; ++pos)
+// {
+// if (pos->begin_offset == DW_INVALID_ADDRESS)
+// curr_base_addr = pos->end_offset;
+// else if (curr_base_addr != DW_INVALID_ADDRESS)
+// {
+// dw_addr_t curr_addr = curr_base_addr + pos->begin_offset;
+// if (addr > curr_addr)
+// addr = curr_addr;
+// }
+// }
+// }
+// return addr;
+//}
+//
+//dw_addr_t
+//DWARFDebugRanges::RangeList::HighestAddress(const dw_addr_t cu_base_addr) const
+//{
+// dw_addr_t addr = 0;
+// dw_addr_t curr_base_addr = cu_base_addr;
+// if (!ranges.empty())
+// {
+// Range::const_iterator pos = ranges.begin();
+// Range::const_iterator end_pos = ranges.end();
+// for (pos = ranges.begin(); pos != end_pos; ++pos)
+// {
+// if (pos->begin_offset == DW_INVALID_ADDRESS)
+// curr_base_addr = pos->end_offset;
+// else if (curr_base_addr != DW_INVALID_ADDRESS)
+// {
+// dw_addr_t curr_addr = curr_base_addr + pos->end_offset;
+// if (addr < curr_addr)
+// addr = curr_addr;
+// }
+// }
+// }
+// if (addr != 0)
+// return addr;
+// return DW_INVALID_ADDRESS;
+//}
+//
void
DWARFDebugRanges::Dump(Stream &s, const DataExtractor& debug_ranges_data, uint32_t* offset_ptr, dw_addr_t cu_base_addr)
OpenPOWER on IntegriCloud