public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: Andrew Cagney <ac131313@redhat.com>
To: Kevin Buettner <kevinb@redhat.com>
Cc: gdb@sources.redhat.com
Subject: Re: frame.c assertion failure
Date: Thu, 08 May 2003 00:03:00 -0000	[thread overview]
Message-ID: <3EB99EB1.8090205@redhat.com> (raw)
In-Reply-To: <1030507234012.ZM557@localhost.localdomain>

> On May 7,  3:25pm, Kevin Buettner wrote:
> 
> 
>>     ../../src/gdb/frame.c:2083:  internal-error:  get_frame_type: 
>>     Assertion `frame->unwind->type != UNKNOWN_FRAME' failed.
> 
> 
> FWIW, this problem is "fixed" by backing out the following change:
> 
> 2003-04-16  Andrew Cagney  <cagney@redhat.com>
> 
> 	* frame.c (get_prev_frame): Do not initialize "unwind" or "type",
> 	update comments.
> 	(get_frame_type): Initialize unwind and type when needed.
> 	(get_frame_id, frame_register_unwind): Ditto.

The code is:

> enum frame_type
> get_frame_type (struct frame_info *frame)
> {
>   /* Some targets still don't use [generic] dummy frames.  Catch them
>      here.  */
>   if (!DEPRECATED_USE_GENERIC_DUMMY_FRAMES
>       && deprecated_frame_in_dummy (frame))
>     return DUMMY_FRAME;
>   if (frame->unwind == NULL)
>     {

I'd only expect the d10v to execute the following.

>       /* Initialize the frame's unwinder because it is that which
>          provides the frame's type.  */
>       frame->unwind = frame_unwind_find_by_pc (current_gdbarch,
>                                                get_frame_pc (frame));

For the d10v, this never returns legacy_saved_regs_unwinder and so ....

>       /* FIXME: cagney/2003-04-02: Rather than storing the frame's
>          type in the frame, the unwinder's type should be returned
>          directly.  Unfortunatly, legacy code, called by
>          legacy_get_prev_frame, explicitly set the frames type using
>          the method deprecated_set_frame_type().  */
>       gdb_assert (frame->unwind->type != UNKNOWN_FRAME);

... this can never be UNKNOWN_FRAME.

>       frame->type = frame->unwind->type;
>     }
>   if (frame->type == UNKNOWN_FRAME)
>     return NORMAL_FRAME;
>   else
>     return frame->type;
> }

What should happen is:

int
legacy_frame_p (struct gdbarch *current_gdbarch)
{
   return (DEPRECATED_INIT_FRAME_PC_P ()
           || DEPRECATED_INIT_FRAME_PC_FIRST_P ()
           || DEPRECATED_INIT_EXTRA_FRAME_INFO_P ()
           || DEPRECATED_FRAME_CHAIN_P ()
           || !gdbarch_unwind_dummy_id_p (current_gdbarch)
           || !SAVE_DUMMY_FRAME_TOS_P ());

should return true, and hence get_prev_frame should call 
legacy_get_prev_frame() which should always set ->unwind?

'set debug frame 1'

Will at least indicate which type of frame is being created.

(unless you're trying to get code to use the new unwinder that is, or 
its some sort of inner most frame edge case?).

Andrew


  reply	other threads:[~2003-05-08  0:03 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-05-07 22:25 Kevin Buettner
2003-05-07 23:40 ` Kevin Buettner
2003-05-08  0:03   ` Andrew Cagney [this message]
2003-05-08  0:22     ` Andrew Cagney
2003-05-08  5:49       ` Kevin Buettner
2003-05-08 14:05         ` Andrew Cagney
2003-05-08 15:39           ` Kevin Buettner

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=3EB99EB1.8090205@redhat.com \
    --to=ac131313@redhat.com \
    --cc=gdb@sources.redhat.com \
    --cc=kevinb@redhat.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).