diff options
author | George Rimar <grimar@accesssoftek.com> | 2018-10-24 16:21:56 +0000 |
---|---|---|
committer | George Rimar <grimar@accesssoftek.com> | 2018-10-24 16:21:56 +0000 |
commit | 8c58a6e7d65a8f354eaa75594e3a78c9a1beec5a (patch) | |
tree | b80e2a2abfefb6698c35795305e36e132f77be7b /lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp | |
parent | 2169b9c9769a70ee8dc3a10477cb506329317135 (diff) | |
download | bcm5719-llvm-8c58a6e7d65a8f354eaa75594e3a78c9a1beec5a.tar.gz bcm5719-llvm-8c58a6e7d65a8f354eaa75594e3a78c9a1beec5a.zip |
Revert rL345127: [LLDB] - Add support for DW_RLE_base_address and DW_RLE_offset_pair entries
It broke BB:
http://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/11671/consoleFull#434797663d489585b-5106-414a-ac11-3ff90657619c
llvm-svn: 345157
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp')
-rw-r--r-- | lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp | 70 |
1 files changed, 13 insertions, 57 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp index 1e771471a57..da97e90c672 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugRanges.cpp @@ -8,7 +8,6 @@ //===----------------------------------------------------------------------===// #include "DWARFDebugRanges.h" -#include "DWARFUnit.h" #include "SymbolFileDWARF.h" #include "lldb/Utility/Stream.h" #include <assert.h> @@ -30,6 +29,8 @@ static dw_addr_t GetBaseAddressMarker(uint32_t addr_size) { DWARFDebugRanges::DWARFDebugRanges() : m_range_map() {} +DWARFDebugRanges::~DWARFDebugRanges() {} + void DWARFDebugRanges::Extract(SymbolFileDWARF *dwarf2Data) { DWARFRangeList range_list; lldb::offset_t offset = 0; @@ -111,27 +112,23 @@ void DWARFDebugRanges::Dump(Stream &s, } } -bool DWARFDebugRanges::FindRanges(const DWARFUnit *cu, +bool DWARFDebugRanges::FindRanges(dw_addr_t debug_ranges_base, dw_offset_t debug_ranges_offset, DWARFRangeList &range_list) const { - dw_addr_t debug_ranges_address = cu->GetRangesBase() + debug_ranges_offset; + dw_addr_t debug_ranges_address = debug_ranges_base + debug_ranges_offset; range_map_const_iterator pos = m_range_map.find(debug_ranges_address); if (pos != m_range_map.end()) { range_list = pos->second; - - // All DW_AT_ranges are relative to the base address of the compile - // unit. We add the compile unit base address to make sure all the - // addresses are properly fixed up. - range_list.Slide(cu->GetBaseAddress()); return true; } return false; } -bool DWARFDebugRngLists::ExtractRangeList( - const DWARFDataExtractor &data, uint8_t addrSize, - lldb::offset_t *offset_ptr, std::vector<RngListEntry> &rangeList) { - rangeList.clear(); +bool DWARFDebugRngLists::ExtractRangeList(const DWARFDataExtractor &data, + uint8_t addrSize, + lldb::offset_t *offset_ptr, + DWARFRangeList &rangeList) { + rangeList.Clear(); bool error = false; while (!error) { @@ -142,27 +139,14 @@ bool DWARFDebugRngLists::ExtractRangeList( case DW_RLE_start_length: { dw_addr_t begin = data.GetMaxU64(offset_ptr, addrSize); dw_addr_t len = data.GetULEB128(offset_ptr); - rangeList.push_back({DW_RLE_start_length, begin, len}); + rangeList.Append(DWARFRangeList::Entry(begin, len)); break; } case DW_RLE_start_end: { dw_addr_t begin = data.GetMaxU64(offset_ptr, addrSize); dw_addr_t end = data.GetMaxU64(offset_ptr, addrSize); - rangeList.push_back({DW_RLE_start_end, begin, end - begin}); - break; - } - - case DW_RLE_base_address: { - dw_addr_t base = data.GetMaxU64(offset_ptr, addrSize); - rangeList.push_back({DW_RLE_base_address, base, 0}); - break; - } - - case DW_RLE_offset_pair: { - dw_addr_t begin = data.GetULEB128(offset_ptr); - dw_addr_t end = data.GetULEB128(offset_ptr); - rangeList.push_back({DW_RLE_offset_pair, begin, end}); + rangeList.Append(DWARFRangeList::Entry(begin, end - begin)); break; } @@ -178,35 +162,6 @@ bool DWARFDebugRngLists::ExtractRangeList( return false; } -bool DWARFDebugRngLists::FindRanges(const DWARFUnit *cu, - dw_offset_t debug_ranges_offset, - DWARFRangeList &range_list) const { - range_list.Clear(); - dw_addr_t debug_ranges_address = cu->GetRangesBase() + debug_ranges_offset; - auto pos = m_range_map.find(debug_ranges_address); - if (pos != m_range_map.end()) { - dw_addr_t BaseAddr = cu->GetBaseAddress(); - for (const RngListEntry &E : pos->second) { - switch (E.encoding) { - case DW_RLE_start_length: - range_list.Append(DWARFRangeList::Entry(E.value0, E.value1)); - break; - case DW_RLE_base_address: - BaseAddr = E.value0; - break; - case DW_RLE_offset_pair: - range_list.Append( - DWARFRangeList::Entry(BaseAddr + E.value0, E.value1 - E.value0)); - break; - default: - llvm_unreachable("unexpected encoding"); - } - } - return true; - } - return false; -} - void DWARFDebugRngLists::Extract(SymbolFileDWARF *dwarf2Data) { const DWARFDataExtractor &data = dwarf2Data->get_debug_rnglists_data(); lldb::offset_t offset = 0; @@ -236,8 +191,9 @@ void DWARFDebugRngLists::Extract(SymbolFileDWARF *dwarf2Data) { Offsets.push_back(data.GetPointer(&offset)); lldb::offset_t listOffset = offset; - std::vector<RngListEntry> rangeList; + DWARFRangeList rangeList; while (offset < end && ExtractRangeList(data, addrSize, &offset, rangeList)) { + rangeList.Sort(); m_range_map[listOffset] = rangeList; listOffset = offset; } |