This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [rfc] Options for "info mappings" etc. (Re: [PATCH] Implement new `info core mappings' command)


Pedro Alves wrote:
> On 12/20/2011 10:15 PM, Ulrich Weigand wrote:
> > I actually completed an implementation of this (second) method, before
> > I noticed that it fundamentally does not work with the current remote
> > protocol, for one simple reason:  I cannot open /proc/PID/... because
> > I do not even know the PID to use.  With the remote target, the "PID"
> > used within GDB may have no relationship whatsoever to the actual PID
> > on a Linux remote target; in fact, it usually is the "magic" 42000 ...
> 
> In extended-remote (w/ multiprocess extensions on), we do know the PID,
> because the TID's are in the form pPID.TID.  With regular remote, we only
> know the PID on "attach", because the user typed it, otherwise we fall back to
> the magic 42000.  But why not simply fix this?  We can query the remote
> end for the current process's ID, with target remote, and use that pid if
> supported, otherwise fall back to the current magic 42000 use.   All the
> options so far require new packets, so this doesn't seem to make it worse.
> The tdep code in question is handling linux specific bits, so it can
> bail out on the magic 42000 safely.

I'm wondering: How can I distinguish the "magic 42000" from
a regular PID 42000 ?

> Another option, perhaps the cleanest,
> is to start allowing the multiprocess thread id extensions with
> plain "target remote".  GDB currently only sends "multiprocess+" qSupported
> feature if connecting in extended-remote mode.  I can help and try this is
> you'd like.

Yes, this does sound like an interesting approach.

> > While in some cases, the (a) remote PID may be encoded into the GDB
> > TID field,I cannot use this in -tdep code either, because when used
> > with the native target, the TID is never a PID/LWP.
> 
> Not sure what example you're referring to.  :-(

Well, GDB's "ptid_t" contains three fields: pid, lwp, and tid.  From what
I recall, these are used somewhat differently on different targets.

In particular, with Linux native targets, "pid" is what getpid () returns;
"lwp" is the Linux task ID -- which is equal to the pid for single-threaded
processes, and "tid" is the value of "pthread_t" for the thread.

Now, with the remote target, "pid" seems to be the magic 42000; "lwp" is
never used, and "tid" is used for the thread ID used with the remote
protocol -- and when using gdbserver, the latter is actually the LWP ID
 / Linux task ID.


What I was trying to say with the statement above is: if I knew the LWP
ID, I could use this to access /proc, since there is a /proc/... entry
for all LWP IDs as well as for the main PID.  And in fact, at least
for multi-threaded processes, I *do* know the LWP ID, since it is in fact
used as the TID field of the ptid_t with remote/gdbserver targets.

The problem is, with the native target, the TID field is used to hold
the "pthread_t" value, *not* the LWP ID.  Since -tdep code needs to
work with either target, I cannot really interpret that field in any
way ...                                                                                                                             


Bye,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]