Author: gclayton
Date: Thu Feb 11 18:07:16 2016
New Revision: 260626

URL: http://llvm.org/viewvc/llvm-project?rev=260626&view=rev
Log:
Don't crash if we have a DIE that has a DW_AT_ranges attribute and yet the 
SymbolFileDWARF doesn't have a DebugRanges. If this happens print a nice error 
message to prompt the user to file a bug and attach the offending DWARF file so 
we can get the correct compiler fixed.

<rdar://problem/24458016>


Modified:
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp?rev=260626&r1=260625&r2=260626&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp 
(original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp Thu Feb 
11 18:07:16 2016
@@ -482,11 +482,19 @@ DWARFDebugInfoEntry::GetDIENamesAndRange
                 case DW_AT_ranges:
                     {
                         const DWARFDebugRanges* debug_ranges = 
dwarf2Data->DebugRanges();
-                        debug_ranges->FindRanges(form_value.Unsigned(), 
ranges);
-                        // 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.
-                        ranges.Slide(cu->GetBaseAddress());
+                        if (debug_ranges)
+                        {
+                            debug_ranges->FindRanges(form_value.Unsigned(), 
ranges);
+                            // 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.
+                            ranges.Slide(cu->GetBaseAddress());
+                        }
+                        else
+                        {
+                            
cu->GetSymbolFileDWARF()->GetObjectFile()->GetModule()->ReportError 
("{0x%8.8x}: DIE has DW_AT_ranges(0x%" PRIx64 ") attribute yet DWARF has no 
.debug_ranges, please file a bug and attach the file at the start of this error 
message",
+                                                                               
                  m_offset, form_value.Unsigned());
+                        }
                     }
                     break;
 


_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to