[Lldb-commits] [lldb] r226085 - Don't crash when we run into lexical block address range problems, just ignore the bad ranges and log an error message asking the user to file a bug.
Greg Clayton
gclayton at apple.com
Wed Jan 14 19:04:37 PST 2015
Author: gclayton
Date: Wed Jan 14 21:04:37 2015
New Revision: 226085
URL: http://llvm.org/viewvc/llvm-project?rev=226085&view=rev
Log:
Don't crash when we run into lexical block address range problems, just ignore the bad ranges and log an error message asking the user to file a bug.
<rdar://problem/19021931>
Modified:
lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp?rev=226085&r1=226084&r2=226085&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Wed Jan 14 21:04:37 2015
@@ -1037,23 +1037,6 @@ SymbolFileDWARF::ParseCompileUnitAtIndex
return cu_sp;
}
-static void
-AddRangesToBlock (Block& block,
- DWARFDebugRanges::RangeList& ranges,
- addr_t block_base_addr)
-{
- const size_t num_ranges = ranges.GetSize();
- for (size_t i = 0; i<num_ranges; ++i)
- {
- const DWARFDebugRanges::Range &range = ranges.GetEntryRef (i);
- const addr_t range_base = range.GetRangeBase();
- assert (range_base >= block_base_addr);
- block.AddRange(Block::Range (range_base - block_base_addr, range.GetByteSize()));;
- }
- block.FinalizeRanges ();
-}
-
-
Function *
SymbolFileDWARF::ParseCompileUnitFunction (const SymbolContext& sc, DWARFCompileUnit* dwarf_cu, const DWARFDebugInfoEntry *die)
{
@@ -1397,8 +1380,24 @@ SymbolFileDWARF::ParseFunctionBlocks
subprogram_low_pc = ranges.GetMinRangeBase(0);
}
}
-
- AddRangesToBlock (*block, ranges, subprogram_low_pc);
+
+ const size_t num_ranges = ranges.GetSize();
+ for (size_t i = 0; i<num_ranges; ++i)
+ {
+ const DWARFDebugRanges::Range &range = ranges.GetEntryRef (i);
+ const addr_t range_base = range.GetRangeBase();
+ if (range_base >= subprogram_low_pc)
+ block->AddRange(Block::Range (range_base - subprogram_low_pc, range.GetByteSize()));
+ else
+ {
+ GetObjectFile()->GetModule()->ReportError ("0x%8.8" PRIx64 ": adding range [0x%" PRIx64 "-0x%" PRIx64 ") which has a base that is less than the function's low PC 0x%" PRIx64 ". Please file a bug and attach the file at the start of this error message",
+ block->GetID(),
+ range_base,
+ range.GetRangeEnd(),
+ subprogram_low_pc);
+ }
+ }
+ block->FinalizeRanges ();
if (tag != DW_TAG_subprogram && (name != NULL || mangled_name != NULL))
{
More information about the lldb-commits
mailing list