This revision was automatically updated to reflect the committed changes.
labath marked an inline comment as done.
Closed by commit rL367983: Fix line table resolution near the end of a section
(authored by labath, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Changed prior to commit:
https://reviews.llvm.org/D65647?vs=213342&id=213527#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D65647/new/
https://reviews.llvm.org/D65647
Files:
lldb/trunk/lit/SymbolFile/DWARF/debug-line-basic.s
lldb/trunk/lit/SymbolFile/DWARF/dir-separator-no-comp-dir-relative-name.s
lldb/trunk/lit/SymbolFile/DWARF/dir-separator-no-comp-dir.s
lldb/trunk/lit/SymbolFile/DWARF/dir-separator-posix.s
lldb/trunk/lit/SymbolFile/DWARF/dir-separator-windows.s
lldb/trunk/source/Symbol/LineTable.cpp
Index: lldb/trunk/source/Symbol/LineTable.cpp
===================================================================
--- lldb/trunk/source/Symbol/LineTable.cpp
+++ lldb/trunk/source/Symbol/LineTable.cpp
@@ -241,33 +241,47 @@
bool LineTable::ConvertEntryAtIndexToLineEntry(uint32_t idx,
LineEntry &line_entry) {
- if (idx < m_entries.size()) {
- const Entry &entry = m_entries[idx];
- ModuleSP module_sp(m_comp_unit->GetModule());
- if (module_sp &&
- module_sp->ResolveFileAddress(entry.file_addr,
- line_entry.range.GetBaseAddress())) {
- if (!entry.is_terminal_entry && idx + 1 < m_entries.size())
- line_entry.range.SetByteSize(m_entries[idx + 1].file_addr -
- entry.file_addr);
- else
- line_entry.range.SetByteSize(0);
-
- line_entry.file =
- m_comp_unit->GetSupportFiles().GetFileSpecAtIndex(entry.file_idx);
- line_entry.original_file =
- m_comp_unit->GetSupportFiles().GetFileSpecAtIndex(entry.file_idx);
- line_entry.line = entry.line;
- line_entry.column = entry.column;
- line_entry.is_start_of_statement = entry.is_start_of_statement;
- line_entry.is_start_of_basic_block = entry.is_start_of_basic_block;
- line_entry.is_prologue_end = entry.is_prologue_end;
- line_entry.is_epilogue_begin = entry.is_epilogue_begin;
- line_entry.is_terminal_entry = entry.is_terminal_entry;
- return true;
- }
- }
- return false;
+ if (idx >= m_entries.size())
+ return false;
+
+ const Entry &entry = m_entries[idx];
+ ModuleSP module_sp(m_comp_unit->GetModule());
+ if (!module_sp)
+ return false;
+
+ addr_t file_addr = entry.file_addr;
+
+ // A terminal entry can point outside of a module or a section. Decrement the
+ // address to ensure it resolves correctly.
+ if (entry.is_terminal_entry)
+ --file_addr;
+
+ if (!module_sp->ResolveFileAddress(file_addr,
+ line_entry.range.GetBaseAddress()))
+ return false;
+
+ // Now undo the decrement above.
+ if (entry.is_terminal_entry)
+ line_entry.range.GetBaseAddress().Slide(1);
+
+ if (!entry.is_terminal_entry && idx + 1 < m_entries.size())
+ line_entry.range.SetByteSize(m_entries[idx + 1].file_addr -
+ entry.file_addr);
+ else
+ line_entry.range.SetByteSize(0);
+
+ line_entry.file =
+ m_comp_unit->GetSupportFiles().GetFileSpecAtIndex(entry.file_idx);
+ line_entry.original_file =
+ m_comp_unit->GetSupportFiles().GetFileSpecAtIndex(entry.file_idx);
+ line_entry.line = entry.line;
+ line_entry.column = entry.column;
+ line_entry.is_start_of_statement = entry.is_start_of_statement;
+ line_entry.is_start_of_basic_block = entry.is_start_of_basic_block;
+ line_entry.is_prologue_end = entry.is_prologue_end;
+ line_entry.is_epilogue_begin = entry.is_epilogue_begin;
+ line_entry.is_terminal_entry = entry.is_terminal_entry;
+ return true;
}
uint32_t LineTable::FindLineEntryIndexByFileIndex(
Index: lldb/trunk/lit/SymbolFile/DWARF/dir-separator-no-comp-dir-relative-name.s
===================================================================
--- lldb/trunk/lit/SymbolFile/DWARF/dir-separator-no-comp-dir-relative-name.s
+++ lldb/trunk/lit/SymbolFile/DWARF/dir-separator-no-comp-dir-relative-name.s
@@ -5,7 +5,7 @@
# REQUIRES: lld, x86
# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj > %t.o
-# RUN: ld.lld -z separate-code %t.o -o %t
+# RUN: ld.lld %t.o -o %t
# RUN: %lldb %t -s %S/Inputs/dir-separator-no-comp-dir-relative-name.lldbinit -o exit | FileCheck %s
# CHECK-LABEL: image dump line-table a.c
Index: lldb/trunk/lit/SymbolFile/DWARF/dir-separator-windows.s
===================================================================
--- lldb/trunk/lit/SymbolFile/DWARF/dir-separator-windows.s
+++ lldb/trunk/lit/SymbolFile/DWARF/dir-separator-windows.s
@@ -4,7 +4,7 @@
# REQUIRES: lld, x86
# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj > %t.o
-# RUN: ld.lld -z separate-code %t.o -o %t
+# RUN: ld.lld %t.o -o %t
# RUN: %lldb %t -s %S/Inputs/dir-separator-windows.lldbinit -o exit | FileCheck %s
# CHECK-LABEL: image dump line-table a.c
Index: lldb/trunk/lit/SymbolFile/DWARF/dir-separator-no-comp-dir.s
===================================================================
--- lldb/trunk/lit/SymbolFile/DWARF/dir-separator-no-comp-dir.s
+++ lldb/trunk/lit/SymbolFile/DWARF/dir-separator-no-comp-dir.s
@@ -4,7 +4,7 @@
# REQUIRES: lld, x86
# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj > %t.o
-# RUN: ld.lld -z separate-code %t.o -o %t
+# RUN: ld.lld %t.o -o %t
# RUN: %lldb %t -s %S/Inputs/dir-separator-windows.lldbinit -o exit | FileCheck %s
# CHECK-LABEL: image dump line-table a.c
Index: lldb/trunk/lit/SymbolFile/DWARF/dir-separator-posix.s
===================================================================
--- lldb/trunk/lit/SymbolFile/DWARF/dir-separator-posix.s
+++ lldb/trunk/lit/SymbolFile/DWARF/dir-separator-posix.s
@@ -4,7 +4,7 @@
# REQUIRES: lld, x86
# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj > %t.o
-# RUN: ld.lld -z separate-code %t.o -o %t
+# RUN: ld.lld %t.o -o %t
# RUN: %lldb %t -s %S/Inputs/dir-separator-posix.lldbinit -o exit | FileCheck %s
# CHECK-LABEL: image dump line-table a.c
Index: lldb/trunk/lit/SymbolFile/DWARF/debug-line-basic.s
===================================================================
--- lldb/trunk/lit/SymbolFile/DWARF/debug-line-basic.s
+++ lldb/trunk/lit/SymbolFile/DWARF/debug-line-basic.s
@@ -1,7 +1,7 @@
# REQUIRES: lld, x86
# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj > %t.o
-# RUN: ld.lld -z separate-code %t.o -o %t
+# RUN: ld.lld %t.o -o %t
# RUN: %lldb %t -o "image dump line-table -v a.c" -o exit | FileCheck %s
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits