From: Pedro Alves <palves@redhat.com>
To: Luis Machado <lgustavo@codesourcery.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH] Fix problems with finishing a dummy function call on simulators.
Date: Tue, 09 Jun 2015 17:51:00 -0000 [thread overview]
Message-ID: <55772797.802@redhat.com> (raw)
In-Reply-To: <1433862056-18237-1-git-send-email-lgustavo@codesourcery.com>
On 06/09/2015 04:00 PM, Luis Machado wrote:
> This is in line with what was done by Joel's patch here:
>
> https://sourceware.org/ml/gdb-patches/2014-11/msg00478.html
>
> And it also answers Pedro's question about whether this is specific to SPARC
> QEMU or not. This indeed seems to affect multiple QEMU targets and also other
> simulators (proprietary).
Sounds like a different issue, although related.
>
> I ran into this weird issue of not being able to "finish" an inferior function
> call. It looks as if the program is running away, but it really is stuck
> somewhere. "finish" still works fine for regular functions not called manually
> by GDB.
Sounds like that would fail on SPARC qemu as well.
>
> I tracked this failure down to GDB having both a bp_call_dummy and bp_finish in
> its breakpoint list. As a result of one not being considered permanent and the
> other considered permanent, GDB will not issue a Z packet to force the insertion
> of that location's breakpoint, confusing the simulator that does not know how
> to deal properly with these permanent breakpoints that GDB inserted beforehand.
>
> The attached patch fixes this, though i'm inclined to say we could probably
> check if both bp_call_dummy and bp_finish are present and force the
> insertion of that location's breakpoint. It isn't clear to me where exactly that
> check would go or if it would be cleaner than checking that information in
> the same function Joel used.
>
> I see no regressions on x86-64 and it fixes a bunch of failures for simulator
> targets we use (MIPS and PowerPC to name two).
If it happens that you "finish" from a normal function, and the finish
breakpoint ends up on top of a real permanent breakpoint, then this patch
will make us end up inserting a breakpoint on top of that permanent
breakpoint. I don't see what's special about finish breakpoints;
it's the address (dummy breakpoint location) that is special. It very much
sounds like that any kind of breakpoint that is placed on top of the dummy
breakpoint ends up with the same issue. E.g., if you stepi out of
the called function, with a software single-step breakpoint, sounds like
GDB will miss inserting the software step breakpoint because that's
at the same address as the dummy breakpoint.
As a data point, I assume that GDB is considering the non-permanent
dummy breakpoint a duplicate of the permanent finish breakpoint and
then none ends up inserted. Is that right?
Not exactly sure what to do here. Maybe we should stop considering
permanent and non-permanent breakpoints at the same address as
duplicates. That should result in GDB inserting the non-permanent
one, I think. Or we could get stop marking permanent breakpoints
as always inserted, and let normal breakpoints insert on top of
permanent breakpoints normally. See also:
https://sourceware.org/ml/gdb-patches/2015-03/msg00174.html
Thanks,
Pedro Alves
next prev parent reply other threads:[~2015-06-09 17:51 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-09 15:01 Luis Machado
2015-06-09 17:51 ` Pedro Alves [this message]
2015-06-09 18:10 ` Luis Machado
2015-06-09 18:13 ` Pedro Alves
2015-06-09 18:22 ` Luis Machado
2015-06-09 18:34 ` Luis Machado
2015-06-16 17:39 ` Luis Machado
2015-06-17 12:41 ` Pedro Alves
2015-06-17 13:26 ` Luis Machado
2015-06-17 13:43 ` Pedro Alves
2015-06-17 20:16 ` Luis Machado
2015-07-06 15:06 ` Pedro Alves
2015-07-06 15:33 ` Luis Machado
2015-07-06 16:15 ` Pedro Alves
2015-07-06 16:18 ` Luis Machado
2015-07-06 18:34 ` Luis Machado
2015-07-06 19:07 ` Pedro Alves
2015-07-06 19:11 ` Luis Machado
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=55772797.802@redhat.com \
--to=palves@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=lgustavo@codesourcery.com \
/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