@@ -1,3 +1,12 @@
+2019-11-28 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ * dwarf2read.c (lnp_state_machine::record_line): Include
+ end_sequence parameter in debug print out. Record the line if we
+ are at an end_sequence marker even if it's not the start of a
+ statement.
+ * symmisc.c (maintenance_print_one_line_table): Print end of
+ sequence markers with 'END' not '0'.
+
2019-11-27 Christian Biesinger <cbiesinger@google.com>
* NEWS: Mention the new multithreaded symbol loading.
@@ -21084,10 +21084,11 @@
{
fprintf_unfiltered (gdb_stdlog,
"Processing actual line %u: file %u,"
- " address %s, is_stmt %u, discrim %u\n",
+ " address %s, is_stmt %u, discrim %u%s\n",
m_line, m_file,
paddress (m_gdbarch, m_address),
- m_is_stmt, m_discriminator);
+ m_is_stmt, m_discriminator,
+ (end_sequence ? "\t(end sequence)" : ""));
}
file_entry *fe = current_file ();
@@ -21100,7 +21101,8 @@
else if (m_op_index == 0 || end_sequence)
{
fe->included_p = 1;
- if (m_record_lines_p && (producer_is_codewarrior (m_cu) || m_is_stmt))
+ if (m_record_lines_p
+ && (producer_is_codewarrior (m_cu) || m_is_stmt || end_sequence))
{
if (m_last_subfile != m_cu->get_builder ()->get_current_subfile ()
|| end_sequence)
@@ -1000,8 +1000,12 @@
struct linetable_entry *item;
item = &linetable->item [i];
- printf_filtered (_("%-6d %6d %s\n"), i, item->line,
- core_addr_to_string (item->pc));
+ printf_filtered ("%-6d ", i);
+ if (item->line > 0)
+ printf_filtered ("%6d ", item->line);
+ else
+ printf_filtered ("%6s ", _("END"));
+ printf_filtered ("%s\n", core_addr_to_string (item->pc));
}
}
@@ -1,5 +1,10 @@
2019-11-28 Andrew Burgess <andrew.burgess@embecosm.com>
+ * gdb.base/maint.exp: Update line table parsing test.
+ * gdb.dwarf2/dw2-ranges-base.exp: Add new line table parsing test.
+
+2019-11-28 Andrew Burgess <andrew.burgess@embecosm.com>
+
* lib/gdb.exp (skip_btrace_tests): Return 1 if the test fails to
compile.
(skip_btrace_pt_tests): Likewise.
@@ -508,8 +508,8 @@
# Test that "main info line-table" w/o a file name shows the symtab for
# $srcfile.
set saw_srcfile 0
-set test "maint info line-table w/o a file name"
-gdb_test_multiple "maint info line-table" $test {
+gdb_test_multiple "maint info line-table" \
+ "maint info line-table w/o a file name" {
-re "symtab: \[^\n\r\]+${srcfile} \\(\\(struct symtab \\*\\) $hex\\)\r\nlinetable: \\(\\(struct linetable \\*\\) $hex\\):\r\nINDEX\[ \t\]+LINE\[ \t\]+ADDRESS" {
set saw_srcfile 1
exp_continue
@@ -518,7 +518,11 @@
# Match each symtab to avoid overflowing expect's buffer.
exp_continue
}
- -re "$decimal\[ \t\]+$decimal\[ \t\]+$hex\r\n" {
+ -re "symtab: \[^\n\r\]+ \\(\\(struct symtab \\*\\) $hex\\)\r\nlinetable: \\(\\(struct linetable \\*\\) 0x0\\):\r\nNo line table.\r\n" {
+ # For symtabs with no linetable.
+ exp_continue
+ }
+ -re "^$decimal\[ \t\]+$decimal\[ \t\]+$hex\r\n" {
# Line table entries can be long too:
#
# INDEX LINE ADDRESS
@@ -531,13 +535,17 @@
# 6 45 0x0000000000400740
# (...)
# 454 129 0x00007ffff7df1d28
- # 455 0 0x00007ffff7df1d3f
+ # 455 END 0x00007ffff7df1d3f
#
# Match each line to avoid overflowing expect's buffer.
exp_continue
}
- -re "$gdb_prompt $" {
- gdb_assert $saw_srcfile $test
+ -re "^$decimal\[ \t\]+END\[ \t\]+$hex\r\n" {
+ # Matches an end marker in the above.
+ exp_continue
+ }
+ -re "^$gdb_prompt $" {
+ gdb_assert $saw_srcfile $gdb_test_name
}
}
@@ -141,3 +141,25 @@
"Line 21 of .* starts at address .* and ends at .*"
gdb_test "info line frame3" \
"Line 31 of .* starts at address .* and ends at .*"
+
+# Ensure that the line table correctly tracks the end of sequence markers.
+set end_seq_count 0
+gdb_test_multiple "maint info line-table" \
+ "count END markers in line table" {
+ -re "^$decimal\[ \t\]+$decimal\[ \t\]+$hex\r\n" {
+ exp_continue
+ }
+ -re "^$decimal\[ \t\]+END\[ \t\]+$hex\r\n" {
+ incr end_seq_count
+ exp_continue
+ }
+ -re "^$gdb_prompt $" {
+ gdb_assert [expr $end_seq_count == 3] $gdb_test_name
+ }
+ -re ".*linetable: \\(\\(struct linetable \\*\\) 0x0\\):\r\nNo line table.\r\n" {
+ exp_continue
+ }
+ -re ".*linetable: \\(\\(struct linetable \\*\\) $hex\\):\r\nINDEX\[ \t\]+LINE\[ \t\]+ADDRESS\r\n" {
+ exp_continue
+ }
+ }