From: Pavel Dovgalyuk <pavel.dovgalyuk@ispras.ru>
To: Nicholas Piggin <npiggin@gmail.com>,
Daniel Henrique Barboza <danielhb413@gmail.com>
Cc: "Cédric Le Goater" <clg@kaod.org>,
"David Gibson" <david@gibson.dropbear.id.au>,
"Greg Kurz" <groug@kaod.org>,
"Harsh Prateek Bora" <harshpb@linux.ibm.com>,
"Pavel Dovgalyuk" <pavel.dovgaluk@ispras.ru>,
"Paolo Bonzini" <pbonzini@redhat.com>,
qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [PATCH 6/7] tests/avocado: reverse-debugging cope with re-executing breakpoints
Date: Mon, 31 Jul 2023 15:08:26 +0300 [thread overview]
Message-ID: <402d4e1c-9634-cc3e-a11b-06044fbbecb5@ispras.ru> (raw)
In-Reply-To: <20230726183532.434380-7-npiggin@gmail.com>
Reviewed-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
On 26.07.2023 21:35, Nicholas Piggin wrote:
> The reverse-debugging test creates a trace, then replays it and:
>
> 1. Steps the first 10 instructions and records their addresses.
> 2. Steps backward and verifies their addresses match.
> 3. Runs to (near) the end of the trace.
> 4. Sets breakpoints on the first 10 instructions.
> 5. Continues backward and verifies execution stops at the last
> breakpoint.
>
> Step 5 breaks if any of the other 9 breakpoints are re-executed in the
> trace after the 10th instruction is run, because those will be
> unexpectedly hit when reverse continuing. This situation does arise
> with the ppc pseries machine, the SLOF bios branches to its own entry
> point.
>
> Permit this breakpoint re-execution by switching steps 4 and 5, so that
> the trace will be run to the end *or* the next breakpoint hit.
> Reversing from there to the 10th intsruction will not hit another
> breakpoint, by definition.
>
> Another step is added between steps 2 and 3, which steps forward over
> the first 10 instructions and verifies their addresses, to support this.
>
> Cc: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
> tests/avocado/reverse_debugging.py | 25 +++++++++++++++++++++----
> 1 file changed, 21 insertions(+), 4 deletions(-)
>
> diff --git a/tests/avocado/reverse_debugging.py b/tests/avocado/reverse_debugging.py
> index 680c314cfc..7d1a478df1 100644
> --- a/tests/avocado/reverse_debugging.py
> +++ b/tests/avocado/reverse_debugging.py
> @@ -150,16 +150,33 @@ def reverse_debugging(self, shift=7, args=None):
> self.check_pc(g, addr)
> logger.info('found position %x' % addr)
>
> - logger.info('seeking to the end (icount %s)' % (last_icount - 1))
> - vm.qmp('replay-break', icount=last_icount - 1)
> - # continue - will return after pausing
> - g.cmd(b'c', b'T02thread:01;')
> + # visit the recorded instruction in forward order
> + logger.info('stepping forward')
> + for addr in steps:
> + self.check_pc(g, addr)
> + self.gdb_step(g)
> + logger.info('found position %x' % addr)
>
> + # set breakpoints for the instructions just stepped over
> logger.info('setting breakpoints')
> for addr in steps:
> # hardware breakpoint at addr with len=1
> g.cmd(b'Z1,%x,1' % addr, b'OK')
>
> + # this may hit a breakpoint if first instructions are executed
> + # again
> + logger.info('continuing execution')
> + vm.qmp('replay-break', icount=last_icount - 1)
> + # continue - will return after pausing
> + # This could stop at the end and get a T02 return, or by
> + # re-executing one of the breakpoints and get a T05 return.
> + g.cmd(b'c')
> + if self.vm_get_icount(vm) == last_icount - 1:
> + logger.info('reached the end (icount %s)' % (last_icount - 1))
> + else:
> + logger.info('hit a breakpoint again at %x (icount %s)' %
> + (self.get_pc(g), self.vm_get_icount(vm)))
> +
> logger.info('running reverse continue to reach %x' % steps[-1])
> # reverse continue - will return after stopping at the breakpoint
> g.cmd(b'bc', b'T05thread:01;')
next prev parent reply other threads:[~2023-07-31 12:09 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-26 18:35 [PATCH 0/7] ppc: record-replay fixes and enablement Nicholas Piggin
2023-07-26 18:35 ` [PATCH 1/7] target/ppc: Fix CPU reservation migration for record-replay Nicholas Piggin
2023-07-26 18:35 ` [PATCH 2/7] target/ppc: Fix timebase reset with record-replay Nicholas Piggin
2023-07-26 18:35 ` [PATCH 3/7] spapr: Fix machine reset deadlock from replay-record Nicholas Piggin
2023-07-26 18:35 ` [PATCH 4/7] spapr: Fix record-replay machine reset consuming too many events Nicholas Piggin
2023-07-31 11:40 ` Pavel Dovgalyuk
2023-08-04 8:50 ` Pavel Dovgalyuk
2023-08-06 11:46 ` Nicholas Piggin
2023-08-08 3:09 ` Nicholas Piggin
2023-08-08 3:52 ` Pavel Dovgalyuk
2023-08-09 9:25 ` Nicholas Piggin
2023-07-26 18:35 ` [PATCH 5/7] tests/avocado: boot ppc64 pseries replay-record test to Linux VFS mount Nicholas Piggin
2023-07-31 11:41 ` Pavel Dovgalyuk
2023-07-26 18:35 ` [PATCH 6/7] tests/avocado: reverse-debugging cope with re-executing breakpoints Nicholas Piggin
2023-07-31 12:08 ` Pavel Dovgalyuk [this message]
2023-07-26 18:35 ` [PATCH 7/7] tests/avocado: ppc64 reverse debugging tests for pseries and powernv Nicholas Piggin
2023-07-31 12:09 ` Pavel Dovgalyuk
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=402d4e1c-9634-cc3e-a11b-06044fbbecb5@ispras.ru \
--to=pavel.dovgalyuk@ispras.ru \
--cc=clg@kaod.org \
--cc=danielhb413@gmail.com \
--cc=david@gibson.dropbear.id.au \
--cc=groug@kaod.org \
--cc=harshpb@linux.ibm.com \
--cc=npiggin@gmail.com \
--cc=pavel.dovgaluk@ispras.ru \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/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;
as well as URLs for NNTP newsgroup(s).