From: Andrew Cagney <ac131313@redhat.com>
To: "J. Johnston" <jjohnstn@redhat.com>
Cc: Andrew Cagney <ac131313@redhat.com>, gdb-patches@sources.redhat.com
Subject: Re: RFA: frame id enhancement
Date: Thu, 16 Oct 2003 16:09:00 -0000 [thread overview]
Message-ID: <3F8EC2B3.5040100@redhat.com> (raw)
In-Reply-To: <3F8DD464.6050201@redhat.com>
>> int
>> frame_id_inner (struct frame_id l, struct frame_id r)
>> {
>> int inner;
>> if (l.stack_addr == 0 || r.stack_addr == 0)
>> /* Like NaN, any operation involving an invalid ID always fails. */
>> inner = 0;
>> else
>> /* Only return non-zero when strictly inner than. Note that, per
>> comment in "frame.h", there is some fuzz here. Frameless
>> functions are not strictly inner than (same .stack but
>> different .code). */
>> inner = INNER_THAN (l.stack_addr, r.stack_addr);
>> if (frame_debug)
>> {
>> fprintf_unfiltered (gdb_stdlog, "{ frame_id_inner (l=");
>> fprint_frame_id (gdb_stdlog, l);
>> fprintf_unfiltered (gdb_stdlog, ",r=");
>> fprint_frame_id (gdb_stdlog, r);
>> fprintf_unfiltered (gdb_stdlog, ") -> %d }\n", inner);
>> }
>> return inner;
>> }
>>
>>
>> does SPECIAL_ADDR add further ordering? If it doesn't then the comment needs to be updated (and the description in "frame.h" clarified).
>
>
> Another good point. Yes, it does in this case. Two frames could both not use the stack but one will definitely move the special_addr. I need to add a SPECIAL_INNER_THAN macro which can default to false and must be overridden by the platform.
Is there real value add in having SPECIAL_INNER_THAN though? It would
only be called by frame_id_inner. Looking at how that method is used:
> frame.c:354: if (frame_id_inner (id, this))
In frame_find_by_id: Its sole purpose is to act as a short circuit for
the unlikely case where the ID isn't present in the frame. A stonger
frame_id_inner has little value add.
> frame.c:1909: && frame_id_inner (get_frame_id (this_frame),
In get_prev_frame: Its a sainity check to detect what appears to be a
badly corrupt stack. Marginal value add?
> infrun.c:2094: && (frame_id_inner (get_frame_id (get_current_frame ()),
Commented out.
> infrun.c:2383: if (frame_id_inner (current_frame, step_frame_id))
Received a signal. Given that a predicate to the call is:
&& INNER_THAN (read_sp (), step_sp))
the code's assumed that a signal modifies frame_id.stack_addr, so there
is no value add. It might be useful to clarify this assumption though.
> infrun.c:2477: && frame_id_inner (step_frame_id,
It's the reverse of infrun.c:2383 where the inferior is falling out of a
singnal trampoline, I think the assumptions again hold.
> infrun.c:2641: if (!(frame_id_inner (current_frame, step_frame_id)))
"Trust me" there's no value add. While the comment reads:
/* In the case where we just stepped out of a function into the
middle of a line of the caller, continue stepping, but
step_frame_id must be modified to current frame */
The test also updates step_frame_id when switching between frameless
stackless leaf function. The extra test wouldn't fix that problem.
I'll try to remember to add some comments to that code.
Andrew
next prev parent reply other threads:[~2003-10-16 16:09 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-10-06 21:15 J. Johnston
2003-10-14 21:59 ` J. Johnston
2003-10-15 21:09 ` Andrew Cagney
2003-10-15 23:12 ` J. Johnston
2003-10-16 16:09 ` Andrew Cagney [this message]
2003-10-16 19:06 ` J. Johnston
2003-10-16 21:06 ` Andrew Cagney
2003-10-16 21:49 ` J. Johnston
2003-10-16 23:32 ` J. Johnston
2003-10-17 13:30 ` Andrew Cagney
2003-10-17 16:32 ` J. Johnston
2003-10-17 18:11 ` Kevin Buettner
2003-10-17 19:34 ` J. Johnston
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=3F8EC2B3.5040100@redhat.com \
--to=ac131313@redhat.com \
--cc=gdb-patches@sources.redhat.com \
--cc=jjohnstn@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