diff options
-rw-r--r-- | lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp | 16 | ||||
-rw-r--r-- | lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h | 1 | ||||
-rw-r--r-- | lldb/source/Symbol/Symtab.cpp | 13 |
3 files changed, 22 insertions, 8 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp index 6dcf974c721..b762d641a4b 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp @@ -123,8 +123,9 @@ SymbolFileDWARFDebugMap::CompileUnitInfo::GetFileRangeMap(SymbolFileDWARFDebugMa // Add the inverse OSO file address to debug map entry mapping exe_symfile->AddOSOFileRange (this, exe_symbol->GetAddressRef().GetFileAddress(), + exe_symbol->GetByteSize(), oso_fun_symbol->GetAddressRef().GetFileAddress(), - std::min<addr_t>(exe_symbol->GetByteSize(), oso_fun_symbol->GetByteSize())); + oso_fun_symbol->GetByteSize()); } } @@ -157,8 +158,9 @@ SymbolFileDWARFDebugMap::CompileUnitInfo::GetFileRangeMap(SymbolFileDWARFDebugMa // Add the inverse OSO file address to debug map entry mapping exe_symfile->AddOSOFileRange (this, exe_symbol->GetAddressRef().GetFileAddress(), + exe_symbol->GetByteSize(), oso_gsym_symbol->GetAddressRef().GetFileAddress(), - std::min<addr_t>(exe_symbol->GetByteSize(), oso_gsym_symbol->GetByteSize())); + oso_gsym_symbol->GetByteSize()); } } break; @@ -1456,6 +1458,7 @@ SymbolFileDWARFDebugMap::ParseDeclsForContext (lldb_private::CompilerDeclContext bool SymbolFileDWARFDebugMap::AddOSOFileRange (CompileUnitInfo *cu_info, lldb::addr_t exe_file_addr, + lldb::addr_t exe_byte_size, lldb::addr_t oso_file_addr, lldb::addr_t oso_byte_size) { @@ -1464,7 +1467,14 @@ SymbolFileDWARFDebugMap::AddOSOFileRange (CompileUnitInfo *cu_info, { DebugMap::Entry *debug_map_entry = m_debug_map.FindEntryThatContains(exe_file_addr); debug_map_entry->data.SetOSOFileAddress(oso_file_addr); - cu_info->file_range_map.Append(FileRangeMap::Entry(oso_file_addr, oso_byte_size, exe_file_addr)); + addr_t range_size = std::min<addr_t>(exe_byte_size, oso_byte_size); + if (range_size == 0) + { + range_size = std::max<addr_t>(exe_byte_size, oso_byte_size); + if (range_size == 0) + range_size = 1; + } + cu_info->file_range_map.Append(FileRangeMap::Entry(oso_file_addr, range_size, exe_file_addr)); return true; } return false; diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h index 0a58cfbbb9d..544f0dab043 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h @@ -349,6 +349,7 @@ protected: bool AddOSOFileRange (CompileUnitInfo *cu_info, lldb::addr_t exe_file_addr, + lldb::addr_t exe_byte_size, lldb::addr_t oso_file_addr, lldb::addr_t oso_byte_size); diff --git a/lldb/source/Symbol/Symtab.cpp b/lldb/source/Symbol/Symtab.cpp index 58d8fb8d931..41ab8fefc73 100644 --- a/lldb/source/Symbol/Symtab.cpp +++ b/lldb/source/Symbol/Symtab.cpp @@ -915,12 +915,15 @@ AddSectionsToRangeMap (SectionList *sectlist, RangeVector<addr_t, addr_t> §i } else { - addr_t base_addr = sect_sp->GetFileAddress(); size_t size = sect_sp->GetByteSize(); - RangeVector<addr_t, addr_t>::Entry entry; - entry.SetRangeBase (base_addr); - entry.SetByteSize (size); - section_ranges.Append (entry); + if (size > 0) + { + addr_t base_addr = sect_sp->GetFileAddress(); + RangeVector<addr_t, addr_t>::Entry entry; + entry.SetRangeBase (base_addr); + entry.SetByteSize (size); + section_ranges.Append (entry); + } } } } |