From: Andrew Cagney <ac131313@redhat.com>
To: Jafa <jafa@silicondust.com>
Cc: gdb@sources.redhat.com
Subject: Re: Frame handling
Date: Tue, 01 Jul 2003 17:59:00 -0000 [thread overview]
Message-ID: <3F01CC11.4090607@redhat.com> (raw)
In-Reply-To: <007a01c33feb$d4d020e0$0a00a8c0@nkelseyhome>
> Hi Andrew
>
>
>>>> I'm not sure I understand the question.
>
>
>>> I agree, and I don't think it will make much difference eitehr way,
>
> however
>
>>> I was just thinking that it would be a whole lot easier to explain these
>>> functions...
>>>
>
>
>>Um, this is still dangling. Can you please express your question using
>>terminology consistent with the frame unwind code.
>
>
> Sorry, it was a bit of a ramble :-)
>
> Avr and d10v ports both have function avr/d10v_frame_unwind_cache which
> figure out everything about a frame but are internal functions.
>
> The frame-base and frame-unwind APIs provides a machanism to register
> functions -
>
> struct frame_base
> {
> ...
> frame_this_base_ftype *this_base;
> frame_this_locals_ftype *this_locals;
> frame_this_args_ftype *this_args;
> };
>
> struct frame_unwind
> {
> ...
> frame_this_id_ftype *this_id;
> frame_prev_register_ftype *prev_register;
> };
>
> All five of these functions work on the principle of "given this frame,
> figure out xxx information of the caller's frame" and are passed a pointer
> to the next_frame (child frame). For example, "given this frame, figure out
> where the arguments start of the caller's frame."
(To clarify something, they work on the basis of ``given the next
frame''. They must assume that ``this frame'' does not exist - an
attept to call get_prev_frame (next_frame) would be wrong)
(See my e-mail to daniel)
Anyway, the old code did similar to what you suggest.
Because the cache initialize was disconnected from the specific request,
people were never sure how much to initialize and when. As a
consequence, it was done randomly, using random techniques. GDB (core,
target and architecture) is littered with calls like:
if (!frame->extra_info)
INIT_FRAME_EXTRA_INFO
and
if (!frame->saved_regs)
INIT_FRAME_SAVED_REGS
So while the line:
cache = get_frame_cache (next_frame, this_cache);
might seem a pain, its far less of a pain than the old code that had
very complicated cache initialization rules.
At least it is clear where the buck stops - the entire problem falls
squarely on the sholders of the unwinder.
> I would like to suggest the following:
> - <port>_frame_unwind_cache functions to be registered as part of the
> frame-unwind API.
BTW, two, and not one initialize methods would need to be added: one for
frame-unwind, and one for frame-base. A problem from the old code was
the plithera of unwind methods, hmm.
> - GDB to call <port>_frame_unwind_cache once each time it wants to go back
> one frame.
> - next_frame parameter removed from all five functions above.
Zero benefit.
Every init frame cache method will have (not could) to store next_frame
in the cache. Without it, the frame code couldn't access memory or
registers.
Burrying the frame (hiding it in a cache) would make debugging gdb a
royal pain. At present the applicable frame is made explicit as it is a
parameter.
Andrew
next prev parent reply other threads:[~2003-07-01 17:59 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-07-01 1:20 Jafa
2003-07-01 3:42 ` Daniel Jacobowitz
2003-07-01 4:18 ` Andrew Cagney
[not found] ` <redirect-6800274@silicondust.com>
2003-07-01 5:13 ` Jafa
2003-07-01 12:58 ` Andrew Cagney
2003-07-01 14:09 ` Daniel Jacobowitz
2003-07-01 14:57 ` Andrew Cagney
[not found] ` <redirect-6810110@silicondust.com>
2003-07-01 17:00 ` Jafa
2003-07-02 7:13 ` libgdb jacques
[not found] ` <redirect-6810084@silicondust.com>
2003-07-01 16:14 ` Frame handling Jafa
2003-07-01 17:59 ` Andrew Cagney [this message]
-- strict thread matches above, loose matches on Subject: below --
2003-07-01 5:00 Jafa
2003-07-01 12:45 ` Daniel Jacobowitz
2003-07-01 13:02 ` Andrew Cagney
2003-07-03 9:05 ` Paul N. Hilfinger
2003-04-08 18:35 Jafa
2003-04-14 3:43 ` Andrew Cagney
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=3F01CC11.4090607@redhat.com \
--to=ac131313@redhat.com \
--cc=gdb@sources.redhat.com \
--cc=jafa@silicondust.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