From: Doug Evans <dje@google.com>
To: Pedro Alves <palves@redhat.com>
Cc: Nick Bull <nicholaspbull@gmail.com>,
gdb-patches <gdb-patches@sourceware.org>
Subject: Re: [PATCH v7] Events when inferior is modified
Date: Fri, 07 Nov 2014 17:04:00 -0000 [thread overview]
Message-ID: <CADPb22SBop6BLDcNk2Tst=u7+8BTy_ZB5yBudMXqSGhL-uJDxg@mail.gmail.com> (raw)
In-Reply-To: <545CB930.3040305@redhat.com>
On Fri, Nov 7, 2014 at 4:21 AM, Pedro Alves <palves@redhat.com> wrote:
> On 11/06/2014 06:19 PM, Doug Evans wrote:
>> On Fri, Oct 24, 2014 at 8:13 AM, Pedro Alves <palves@redhat.com> wrote:
>>> On 10/17/2014 08:49 PM, Doug Evans wrote:
>>>> Alas our use of thread ids is a bit, umm, confusing
>>>> (in more ways than one! :-().
>>>> Here, it's not guaranteed that ptid.lwp has something useful,
>>>> and it may be that the target uses ptid.tid instead.
>>>>
>>>> See python/py-infthread.c:thpy_get_ptid.
>>>> I think we should make that non-static and use that here.
>>>> IOW, pass the whole ptid_t to the event.
>>>
>>> How about using GDB's own unique thread number instead of
>>> the ptid? Doesn't seem to be any reason to expose
>>> target-side details or identifiers here?
>>
>> Yeah, I thought of that.
>> We already expose ptids.
>
> OOC, is that just py-infthread.c:thpy_get_ptid, or elsewhere
> too?
>
>> Plus one can look at them as just an id: something you receive, pass
>> around, and print.
>
> Yes, as long as we pass the whole ptid, that works. Let's go with that.
>
>> But I don't have a strong preference, other than consistency.
>> Whatever we pick we need to use it for everything (barring compelling
>> reasons to do otherwise).
>>
>> Setting aside concerns of exposing target details,
>> are there other technical reasons to prefer one over the other?
>
> I'm been trying to come up with some rule, but it's very hard
> to say in general. I was thinking that given that we're
> specifically referring to a user-visible thread, we should
> prefer the GDB number, like we generally expose GDB
> thread numbers to MI. But maybe we'll find a case in the future
> where we do an infcall on some execution object that isn't mapped
> to a visible GDB thread, and so a ptid would work better.
>
>> Here's a question that comes to mind.
>> Internally we use ptids and not thread numbers.
>
> GDB didn't use to model non-threaded inferiors as single-threaded.
> Until pthreads or similar was detected as loaded in the inferior,
> "info threads" would came out empty. So there's that historical part.
>
> (Related, I sometimes wonder about whether we should expose execution
> objects finer than "standard" threads, like fibers / lightweight execution
> agents (c++ N3874) / coroutines to the user as first class
> "GDB threads", if the runtime has those, thus think of "GDB threads"
> as the finer execution object type the user can interact with.
> Or maybe that's not the best model, and exposing "fibers"
> as first class citizens distinct from "threads" would be better.)
>
> On the target/backend/core run control side, we need to work
> with ptids, as we're interfacing with the lower debug APIs, which of
> course now nothing about GDB's thread ids, and sometimes need to
> interface with execution objects even if there's no GDB thread
> mapped to it, yet, or ever.
>
>> Do any of the reasons for doing so carry over to the Python API?
>
> I guess it depends on which level we're positioning the Python API.
> If at the same level as CLI/MI, and/or directly exposing
> the user-visible objects/concepts, then GDB ids seems preferable.
> Otherwise, if working at lower levels, a ptid may be better.
>
> Anyway. To reiterate, I agree. If we're just looking at
> the (whole) ptid as just an id: something you receive, pass around,
> and print, then it works for me.
>
>>
>> [While IWBN if internal and external APIs used the same id everywhere,
>> I'm more concerned with more technical details of picking one over the
>> other. E.g., Thread IDs are more transient, they get recycled more
>> often, but technically ptids can get recycled too.]
One thing that occurs to me is that gdb can inform users when thread
ids get recycled, not so with ptids. [An unlikely thing to need to
worry about in general, but I'm all for being robust where we can.]
Plus we can provide routines to map one to the other.
[Hmmm, if we give out thread ids, do we need to attach a "generation
number" or some such to them?]
So at the moment I guess I'm undecided.
prev parent reply other threads:[~2014-11-07 17:04 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-17 17:32 [PATCH v6] " Nick Bull
2014-09-24 14:05 ` Robert O'Callahan
2014-09-25 10:14 ` Phil Muldoon
2014-10-01 9:50 ` Nick Bull
2014-10-01 17:52 ` Pedro Alves
2014-10-17 16:26 ` [PATCH v7] " Nick Bull
2014-10-17 19:49 ` Doug Evans
2014-10-17 20:00 ` Doug Evans
2014-10-22 12:40 ` [PATCH v8] " Nick Bull
2014-11-17 18:13 ` Nick Bull
2014-11-17 21:25 ` Doug Evans
2014-11-18 16:37 ` Nick Bull
2014-11-20 0:21 ` Doug Evans
2014-11-20 10:36 ` Nick Bull
2014-12-02 19:20 ` Doug Evans
2014-12-04 10:45 ` Nick Bull
2014-12-15 8:33 ` Yao Qi
2014-10-24 15:14 ` [PATCH v7] " Pedro Alves
2014-11-06 18:19 ` Doug Evans
2014-11-07 12:21 ` Pedro Alves
2014-11-07 17:04 ` Doug Evans [this message]
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='CADPb22SBop6BLDcNk2Tst=u7+8BTy_ZB5yBudMXqSGhL-uJDxg@mail.gmail.com' \
--to=dje@google.com \
--cc=gdb-patches@sourceware.org \
--cc=nicholaspbull@gmail.com \
--cc=palves@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