From: Daniel Jacobowitz <drow@false.org>
To: Mark Kettenis <mark.kettenis@xs4all.nl>
Cc: sjackman@gmail.com, gdb-patches@sourceware.org
Subject: Re: Fix a crash when stepping and unwinding fails
Date: Tue, 21 Feb 2006 20:43:00 -0000 [thread overview]
Message-ID: <20060221202833.GA30161@nevyn.them.org> (raw)
In-Reply-To: <200602212015.k1LKFGrj005090@elgar.sibelius.xs4all.nl>
On Tue, Feb 21, 2006 at 09:15:16PM +0100, Mark Kettenis wrote:
> > It's still not great, but at least it's an improvement over crashing.
> > It is reasonably likely that we've just stepped over a standard
> > function call, and that consequentially the function return
> > address is in the standard place for the architecture; in fact,
> > GDB used to have a hook for this, before the frame overhaul:
> > SAVED_PC_AFTER_CALL. But it's gone now and there's no easy analogue,
> > and it was never 100% reliable anyway. So unfortunately, if we
> > single-step out to an address that we can't find a way to unwind from,
> > we'll stop instead of stepping out.
>
> How can this happen? Both affected calls to
> insert_step_resume_breakpoint_at_frame() are in the same
>
> if (frame_id_eq (frame_unwind_id (get_current_frame ()), step_frame_id))
> {
>
> block. Assuming that step_frame_id isn't equal to null_frame_id, this
> means that we *can* unwind.
There's your problem: you're assuming that step_frame_id isn't equal to
null_frame_id. But in fact it is. If we can't unwind past the current
frame, then that means the last frame sniffer (generally the prologue
analyzer), which is required to accept any frame given to it, could not
make heads or tails of it. Which in turn means it doesn't know what
the frame's ID is, so it gets left as invalid. Which means the current
frame will have an ID of null_frame_id.
That's what's happening to me, although I seem to recall something
similar could be produced by stepping across main without debug info.
> Seems like the problem is that the code
> uses get_prev_frame(), which can return NULL, even if we could unwind,
> for example when we try to unwind past main. Looks to me the real bug
> here is that we're using get_prev_frame(). The right solution is
> probably to use frame_pc_unwind(), and insert a the step resume
> breakpoint there. That should never fail.
>
> This would probably demand us to introduce
> insert_step_resume_breakpoint_at_pc(), and we could probably eliminate
> insert_step_resume_breakpoint_at_frame() altogether. An alternative
> would be to export get_prev_name_1() from frame.c (giving it a more
> useful name).
That seems like a good change indeed, but probably wouldn't fix this
problem.
Hmm, what does frame_pc_unwind do when we've hit the last frame? I'm
not sure it's meaningful.
--
Daniel Jacobowitz
CodeSourcery
next prev parent reply other threads:[~2006-02-21 20:28 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-02-21 4:33 Daniel Jacobowitz
2006-02-21 10:01 ` Eli Zaretskii
2006-02-21 20:28 ` Mark Kettenis
2006-02-21 20:43 ` Daniel Jacobowitz [this message]
2006-02-21 20:54 ` Mark Kettenis
2006-02-21 21:03 ` Daniel Jacobowitz
2006-02-21 21:53 ` Mark Kettenis
2006-02-21 22:59 ` Daniel Jacobowitz
2006-02-22 22:00 ` Mark Kettenis
2006-02-23 2:04 ` Daniel Jacobowitz
2006-02-23 17:04 ` NZG
2006-05-17 17:59 ` Daniel Jacobowitz
2006-06-13 18:42 ` Daniel Jacobowitz
2006-06-14 12:33 ` Joel Brobecker
2006-06-16 1:16 ` Daniel Jacobowitz
2006-02-22 4:28 ` Jim Blandy
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=20060221202833.GA30161@nevyn.them.org \
--to=drow@false.org \
--cc=gdb-patches@sourceware.org \
--cc=mark.kettenis@xs4all.nl \
--cc=sjackman@gmail.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