diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2019-11-05 16:00:26 +0000 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2020-01-24 23:39:31 +0000 |
commit | 94a72be7086fa1870eca83d4d6f55cadf48f66b2 (patch) | |
tree | a192bf52d83a7b102df54ba551482e9c13120078 /gdb/dwarf2read.c | |
parent | b5f998b2dd80e673b1506fbe5113e5e4834346bc (diff) | |
download | fsf-binutils-gdb-94a72be7086fa1870eca83d4d6f55cadf48f66b2.zip fsf-binutils-gdb-94a72be7086fa1870eca83d4d6f55cadf48f66b2.tar.gz fsf-binutils-gdb-94a72be7086fa1870eca83d4d6f55cadf48f66b2.tar.bz2 |
gdb: Include end of sequence markers in the line table
In this commit:
commit d9b3de22f33e400f7f409cce3acf6c7dab07dd79
Date: Wed May 27 14:44:29 2015 -0700
Add struct to record dwarf line number state machine.
I believe an unintended change was made to how we store the DWARF line
table, the end of sequence markers between sequences of lines were
lost from the line table.
This commit fixes this small oversight and restores the end of
sequence markers.
Given that we've survived this long without noticing is clearly an
indication that this isn't that serious, however, a later patch that I
am developing would benefit from having the markers in place, so I'd
like to restore them.
Having the markers also means that the output of 'maintenance info
line-table' now more closely reflects the DWARF line table.
I've taken this opportunity to improve how 'maintenance info
line-table' displays the end of sequence markers - it now uses the END
keyword, rather than just printing an entry with line number 0. So we
see this:
INDEX LINE ADDRESS
0 12 0x00000000004003b0
1 17 0x00000000004003b0
2 18 0x00000000004003b0
3 END 0x00000000004003b7
4 5 0x00000000004004a0
5 6 0x00000000004004a0
6 END 0x00000000004004a7
Instead of what we would have seen, which was this:
INDEX LINE ADDRESS
0 12 0x00000000004003b0
1 17 0x00000000004003b0
2 18 0x00000000004003b0
3 0 0x00000000004003b7
4 5 0x00000000004004a0
5 6 0x00000000004004a0
6 0 0x00000000004004a7
I've added a small test that uses 'maintenance info line-table' to
ensure that we don't regress this again.
gdb/ChangeLog:
* 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'.
gdb/testsuite/ChangeLog:
* gdb.base/maint.exp: Update line table parsing test.
* gdb.dwarf2/dw2-ranges-base.exp: Add new line table parsing test.
Change-Id: I002f872248db82a1d4fefdc6b51ff5dbf932d8a8
Diffstat (limited to 'gdb/dwarf2read.c')
-rw-r--r-- | gdb/dwarf2read.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index a494db7..a81a77a 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -21314,10 +21314,11 @@ lnp_state_machine::record_line (bool end_sequence) { 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 (); @@ -21330,7 +21331,8 @@ lnp_state_machine::record_line (bool end_sequence) 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) |