From: Simon Marchi <simark@simark.ca>
To: Tom de Vries <tdevries@suse.de>,
gdb-patches@sourceware.org,
Andrew Burgess <andrew.burgess@embecosm.com>,
Pedro Alves <pedro@palves.net>
Subject: Re: [PATCH][gdb/symtab] Ignore zero line table entries
Date: Tue, 21 Jul 2020 15:04:38 -0400 [thread overview]
Message-ID: <337a6212-af2f-43e1-76d4-167e18461c4d@simark.ca> (raw)
In-Reply-To: <20200716174922.GA8508@delia>
On 2020-07-16 1:49 p.m., Tom de Vries wrote:
> Hi,
>
> The DWARF standard states for the line register in the line number information
> state machine the following:
> ...
> An unsigned integer indicating a source line number. Lines are numbered
> beginning at 1. The compiler may emit the value 0 in cases where an
> instruction cannot be attributed to any source line.
> ...
>
> So, it's possible to have a zero line number in the DWARF line table.
>
> This is currently not handled by GDB. The zero value is read in as any other
> line number, but internally the zero value has a special meaning:
> end-of-sequence, so the line table entry ends up having a different
> interpretation than intended in some situations.
>
> I've created a test-case where various aspects are tested, which has these 4
> interesting tests.
>
> 1. Next-step through a zero-line instruction, is_stmt == 1
> gdb.dwarf2/dw2-line-number-zero.exp: bar1, 2nd next
>
> 2. Next-step through a zero-line instruction, is_stmt == 0
> gdb.dwarf2/dw2-line-number-zero.exp: bar2, 2nd next
>
> 3. Show source location at zero-line instruction, is_stmt == 1
> gdb.dwarf2/dw2-line-number-zero.exp: continue to breakpoint: bar1_label_3
>
> 4. Show source location at zero-line instruction, is_stmt == 0
> gdb.dwarf2/dw2-line-number-zero.exp: continue to breakpoint: bar2_label_3
>
> And we have the following results:
>
> 8.3.1, 9.2:
> ...
> FAIL: gdb.dwarf2/dw2-line-number-zero.exp: bar1, 2nd next
> PASS: gdb.dwarf2/dw2-line-number-zero.exp: bar2, 2nd next
> PASS: gdb.dwarf2/dw2-line-number-zero.exp: continue to breakpoint: bar1_label_3
> FAIL: gdb.dwarf2/dw2-line-number-zero.exp: continue to breakpoint: bar2_label_3
> ...
>
> commit 8c95582da8 "gdb: Add support for tracking the DWARF line table is-stmt
> field":
> ...
> PASS: gdb.dwarf2/dw2-line-number-zero.exp: bar1, 2nd next
> PASS: gdb.dwarf2/dw2-line-number-zero.exp: bar2, 2nd next
> FAIL: gdb.dwarf2/dw2-line-number-zero.exp: continue to breakpoint: bar1_label_3
> FAIL: gdb.dwarf2/dw2-line-number-zero.exp: continue to breakpoint: bar2_label_3
> ...
>
> commit d8cc8af6a1 "[gdb/symtab] Fix line-table end-of-sequence sorting",
> master:
> FAIL: gdb.dwarf2/dw2-line-number-zero.exp: bar1, 2nd next
> FAIL: gdb.dwarf2/dw2-line-number-zero.exp: bar2, 2nd next
> PASS: gdb.dwarf2/dw2-line-number-zero.exp: continue to breakpoint: bar1_label_3
> PASS: gdb.dwarf2/dw2-line-number-zero.exp: continue to breakpoint: bar2_label_3
> ...
>
> The regression in test 2 at commit d8cc8af6a1 was filed as PR symtab/26243,
> where clang emits zero line numbers.
>
> The way to fix all tests is to make sure line number zero internally doesn't
> clash with special meaning values, and by handling it appropriately
> everywhere. That however looks too intrusive for the GDB 10 release.
>
> Instead, we decide to ensure defined behaviour for line number zero by
> ignoring it. This gives us back the test results from before commit
> d8cc8af6a1, fixing PR26243.
>
> We mark the FAILs for tests 3 and 4 as KFAILs. Test 4 was already failing for
> the 9.2 release, and we consider the regression of test 3 from gdb 9.2 to gdb
> 10 the cost for having defined behaviour.
>
> Build and reg-tested on x86_64-linux.
>
> Any comments?
>
> Thanks,
> - Tom
>
> [gdb/symtab] Ignore zero line table entries
>
> gdb/ChangeLog:
>
> 2020-07-16 Tom de Vries <tdevries@suse.de>
>
> PR symtab/26243
> * dwarf2/read.c (lnp_state_machine::record_line): Ignore zero line
> entries.
>
> gdb/testsuite/ChangeLog:
>
> 2020-07-16 Tom de Vries <tdevries@suse.de>
>
> PR symtab/26243
> * gdb.dwarf2/dw2-line-number-zero.c: New test.
> * gdb.dwarf2/dw2-line-number-zero.exp: New file.
Ok, so the state as of today is that we have three patches for 26243:
Tom's patch (this one): filter out line 0 entres at the DWARF reader level
Andrew's patch [1]: replace internal references to line 0 (which means an end marker
in the line table) with an explicit linetable_entry::end_marker,
but otherwise don't try to handle the "real" line 0 entries coming
from the DWARF
Pedro's patch [2]: be smarter when stepping into or from some instructions that map to
line 0
Pedro's patch tackles one consequence of having "line 0" entries in the line table,
related to stepping. But they have other consequences than stepping, like the
"disassemble /s" issue that I raised in response to Andrew's patch.
So the safe bet would be: merge Tom's patch for GDB 10 and keep the others for after
the branch creation would. It brings the GDB 10 behavior back to what GDB 9 was, where
we pretend that the instruction mapped to line 0 belongs to the line of the previous
instruction.
Or, we go straight away with Andrew's patch that switches the end markers to -1,
Pedro's patch that makes stepping deal with "line 0" entries, and give a push for
GDB 10 to try to find and fix any other issues that this would cause.
I don't really mind, but I think it would be good to clear that up first to know where
we are going.
Simon
[1] https://sourceware.org/pipermail/gdb-patches/2020-July/170588.html
[2] https://sourceware.org/pipermail/gdb-patches/2020-July/170645.html
next prev parent reply other threads:[~2020-07-21 19:04 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-16 17:49 Tom de Vries
2020-07-21 19:04 ` Simon Marchi [this message]
2020-07-24 11:30 ` Pedro Alves
2020-07-24 22:32 ` Tom de Vries
2020-07-28 15:49 ` Simon Marchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=337a6212-af2f-43e1-76d4-167e18461c4d@simark.ca \
--to=simark@simark.ca \
--cc=andrew.burgess@embecosm.com \
--cc=gdb-patches@sourceware.org \
--cc=pedro@palves.net \
--cc=tdevries@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox