From: Doug Evans <dje@google.com>
To: Andy Wingo <wingo@igalia.com>
Cc: Alexander Smundak <asmundak@google.com>,
gdb-patches <gdb-patches@sourceware.org>
Subject: Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python
Date: Fri, 20 Mar 2015 18:32:00 -0000 [thread overview]
Message-ID: <21772.26533.9361.394318@ruffy2.mtv.corp.google.com> (raw)
In-Reply-To: <87619w6pmt.fsf@igalia.com>
Andy Wingo writes:
> Hi,
>
> Thanks for taking the time to look at the patches, Doug!
>
> On Fri 20 Mar 2015 01:15, Doug Evans <dje@google.com> writes:
>
> > 2) IIUC, setting aside hitting the outermost frame and such,
> > it's a rule that some unwinder will recognize the frame.
> > Therefore "ephemeral" isn't quite right, even "real"
> > frames are ephemeral since we toss the frame cache when
> > the inferior resumes. OTOH, we need to make progress
> > and I'm just throwing this out there. "ephemeral" is
> > fine with me: we don't use that term for anything else
> > which is nice.
>
> Just to throw out some other names -- PendingFrame. Alexander mentioned
> InspectedFrame. IntermediateFrame. FrameTemplate. SkeletonFrame.
> MinimalFrame. FrameStub.
>
> Dunno, just some ideas :)
I like PendingFrame.
It's a frame, but not a real one yet.
> > 3) We need to allow sniffers to record anything they
> > want in gdb.UnwindInfo/<gdb:unwind-info>.
>
> I see from your point (4) later that you are thinking that if we add
> some kind of callback interface to UnwindInfo that e.g. Guile code might
> need to fetch arbitrary data from the UnwindInfo.
>
> You also note correctly that this is not currently something that the
> patches require -- the UnwindInfo contains all of the information, and
> the C prev_register/this_id callbacks just look into the UnwindInfo
> data.
>
> If we did add a callback interface I don't think there would be a
> problem.
Cool.
> Let's say we want to add a way for prev_register to call back into
> Guile. If the prev-register callback is added to the unwind info via
> unwind-info-set-prev-register-callback! or something then the callback
> can be a closure that captures the data it needs. Or it can use an
> external weak hash table. Or when we add the
> set-prev-register-callback! interface, we can add some other associated
> interface to store data in the unwind-info. There are multiple fine
> options here.
>
> > 5) The docs don't make any mention of target endianness
> > in the saved register values. They probably should.
>
> +1 to Alexander's answer -- as they are GDB values, there shouldn't be
> an issue, should there?
Well, as I wrote in my reply to Alexander,
we can't control how the user will create these values.
They *might* want to do something off the beaten path, so to speak.
We should specify what's required.
> > 6) I noticed several routines for building frame ids in Python.
> > Both Python and Guile support keyword based arguments to functions.
> > Can we just have one frame id builder function and each take
> > sp and pc (and special if we need to) as keyword arguments?
> > E.g. (make-unwind-info ephem-frame #:sp sp #:pc pc)
> > But see (7) below.
> >
> > 7) If we ever need to use frame ids in the extension language
> > IWBN if they were their own object, in which case we might have
> > (make-unwind-info ephem-frame #:frame-id frame-id)
>
> This would be fine; and actually at this point the kwarg is unnecessary.
I'd have make-frame-id take kwargs though.
> (make-unwind-info ephem-frame frame-id)
>
> > but then I'm wondering if there should be an
> > unwind-info-set-frame-id! function and move sp,pc there.
>
> I agree with Alexander that this isn't great. The only thing that an
> unwinder *must* do is set a frame ID. It must produce a frame_id at the
> same time as the sniffer returns TRUE. (They are different callbacks
> but always called one after the other.) Therefore it makes sense to
> have the invariant:
>
> Is it an UnwindInfo? Then it definitely has a frame ID.
>
> That way it takes away one possible error case.
I recognize these points, but I guess in this particular case
I don't feel as strongly. But I don't mind making
frame-id a required argument to make-unwind-info.
So go for it.
> Also you wouldn't want
> to set the frame ID on an UnwindInfo twice, it doesn't make sense.
One could say the same of saved registers.
> > I'm not sure where to put the UnwindInfo creator (factory method).
> > Do we need one? Can we just create them via normal object construction?
>
> In Guile you have to give it a name of course -- make-unwind-info. But
> in Python I liked Alexander's use of a factory method. But I dunno,
> I'll leave the Python discussion to you all :)
A factory method is a layer of abstraction
which is nice (e.g., if later we need to change/extend things
it'd be easier to add a new method or whatever than to play
with the constructor). So ok let's use a factory method.
> > 8) Re: set_previous_frame_register vs unwind-info-add-saved-register!
> >
> > Dunno. On this particular point I guess I don't have a strong
> > enough interesting in being consistent.
> > I'll let you guys decide.
>
> If you don't have such an interest on being consistent for this piece
> then I guess the easy way is to leave these as they are then. Avoids
> multiple-day awkward backs and forths :) But if you decide they need to
> be the same let us know.
>
> Speaking for myself I prefer the Guile one of course, but I prefer
> executive decisions over having to endure more days of naming
> discussions over email :)
I'll make an executive decision to let you guys decide. 1/2 :-)
"But seriously, ..."
Let's go with add_saved_register / unwind-info-add-saved-register!
Sorry Alexander. :-)
I have to pause whenever I read "previous" vs "next": the meaning
is clear in frame-unwind.h, but it just doesn't stick.
E.g., The next frame to unwind is the previous frame on the stack.
Thank goodness frame.c uses all of next/down/inner/younger
and prev/up/outer/older.
next prev parent reply other threads:[~2015-03-20 18:32 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-15 18:14 Alexander Smundak
2014-12-22 19:24 ` Alexander Smundak
2014-12-29 18:02 ` Alexander Smundak
2015-01-05 17:53 ` Alexander Smundak
2015-01-12 20:03 ` Alexander Smundak
2015-01-22 3:31 ` Alexander Smundak
2015-01-29 1:36 ` Alexander Smundak
2015-01-12 21:00 ` Simon Marchi
2015-01-12 21:22 ` Doug Evans
2015-02-04 22:36 ` Doug Evans
2015-02-12 17:58 ` Alexander Smundak
2015-02-19 2:32 ` Alexander Smundak
2015-02-20 11:12 ` Phil Muldoon
2015-02-26 3:09 ` Alexander Smundak
2015-03-02 22:56 ` Alexander Smundak
2015-03-03 8:46 ` Andy Wingo
2015-03-04 2:36 ` Alexander Smundak
2015-03-04 7:49 ` Andy Wingo
2015-03-09 11:02 ` Phil Muldoon
2015-03-11 2:22 ` Alexander Smundak
2015-03-11 8:49 ` Andy Wingo
2015-03-11 17:34 ` Doug Evans
2015-03-11 18:48 ` Alexander Smundak
2015-03-16 11:29 ` Andy Wingo
2015-03-16 12:01 ` Andy Wingo
2015-03-16 17:25 ` Alexander Smundak
2015-03-17 8:57 ` Andy Wingo
2015-03-17 19:48 ` Alexander Smundak
2015-03-17 21:37 ` Alexander Smundak
2015-03-18 8:54 ` Andy Wingo
2015-03-18 22:57 ` Alexander Smundak
2015-03-23 19:58 ` Doug Evans
2015-03-24 9:06 ` Andy Wingo
2015-03-26 3:31 ` Alexander Smundak
2015-03-26 18:53 ` Eli Zaretskii
2015-03-27 22:29 ` Doug Evans
2015-03-28 1:10 ` Alexander Smundak
2015-03-30 17:45 ` Doug Evans
2015-03-30 19:49 ` Alexander Smundak
2015-03-31 22:36 ` Doug Evans
2015-04-01 0:09 ` Alexander Smundak
2015-04-01 0:28 ` Doug Evans
2015-03-18 23:25 ` Doug Evans
2015-03-19 0:36 ` Alexander Smundak
2015-03-19 8:12 ` Andy Wingo
2015-03-20 0:15 ` Doug Evans
2015-03-20 2:27 ` Alexander Smundak
2015-03-20 17:48 ` Doug Evans
2015-03-20 8:26 ` Andy Wingo
2015-03-20 18:32 ` Doug Evans [this message]
2015-03-17 22:21 ` Doug Evans
2015-03-18 8:57 ` Andy Wingo
2015-03-18 16:48 ` Doug Evans
2015-03-19 8:04 ` Andy Wingo
2015-03-09 9:42 ` Andy Wingo
2015-03-03 0:49 ` Alexander Smundak
2015-03-03 14:38 ` Andy Wingo
2015-03-04 2:52 ` Alexander Smundak
2015-02-20 9:42 ` Phil Muldoon
2015-02-20 9:59 ` Phil Muldoon
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=21772.26533.9361.394318@ruffy2.mtv.corp.google.com \
--to=dje@google.com \
--cc=asmundak@google.com \
--cc=gdb-patches@sourceware.org \
--cc=wingo@igalia.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).