From: Kevin Buettner <kevinb@redhat.com>
To: gdb-patches@sources.redhat.com
Cc: Daniel Jacobowitz <drow@false.org>
Subject: Re: [RFC] Generic support for qGetTLSAddr packet
Date: Wed, 08 Dec 2004 00:38:00 -0000 [thread overview]
Message-ID: <20041207172410.36b8e046.kevinb@redhat.com> (raw)
In-Reply-To: <20041207170050.03bd5a85.kevinb@redhat.com>
On Tue, 7 Dec 2004 17:00:50 -0700
Kevin Buettner <kevinb@redhat.com> wrote:
> On Mon, 6 Dec 2004 18:03:55 -0500
> Daniel Jacobowitz <drow@false.org> wrote:
>
> > On Mon, Dec 06, 2004 at 11:37:18PM +0100, Mark Kettenis wrote:
> > > That said, I don't understand why there's any need for the remote code
> > > to get so deep into the core GDB code. I don't see the big picture
> > > yet, but my initial reaction is that this must be wrong. Why does the
> > > remote protocol need to know more than a native GDB?
> >
> > Because shared libraries are handled by GDB, and not by gdbserver.
> > Take a look at thread_db_get_thread_local_address; there's a call
> > to svr4_fetch_objfile_link_map in it, which gdbserver can't do
> > (unless we were to add ELF header support to it... yuck).
>
> Yes, this is exactly right.
>
> > That said, I wonder if this query should be handled uniquely by
> > remote.c, or by GNU/Linux specific code using an xfer-partial
> > mechanism. I haven't thought about the details yet.
>
> I've given this some thought since yesterday.
>
> This approach would define a new enum target_object (maybe
> TARGET_OBJECT_TLS_ADDR) and use to_xfer_partial() to handle the
> lookup of thread local addresses. The target method
> to_get_thread_local_address() would be eliminated entirely.
>
> As I indicated in my reply to Mark yesterday, we need three
> things to fetch a thread-local address. We need a thread id,
> an offset (which is supplied by the debug information), and
> some representation of the load module.
>
> The interface for to_xfer_partial is as follows:
>
> LONGEST (*to_xfer_partial) (struct target_ops *ops,
> enum target_object object, const char *annex,
> void *readbuf, const void *writebuf,
> ULONGEST offset, LONGEST len);
>
> This interface does not make it easy to pass the three TLS related
> parameters noted above. One of them (probably the TLS offset) could
> be passed as to_xfer_partial's ``offset'' parameter. The other two
> would have to be encoded in some way and passed as ``annex''. Each
> implementation of to_xfer_partial() would have to implement some
> decoding logic in order make use of the two encoded parameters.
>
> Using to_xfer_partial() doesn't really solve the remote protocol
> problem either. remote.c would still need to detect
> TARGET_OBJECT_TLS_ADDR and construct a suitable qPart packet.
>
> The problem of the stub not having the load module representation
> in an easy to use form would still exist too.
>
> The only advantage that I can think of with this approach is that it
> reduces the number of target_ops methods. (And I don't find this to
> be all that compelling.) The disadvantage is that it complicates the
> encoding and decoding of the parameters necessary for fetching a TLS
> address. As noted above, it doesn't help one way or another with
> encoding a suitable packet for the remote protocol. In order to avoid
> putting an undue burden on the stub, we'd still need much of the
> machinery from my current patch proposal.
>
> So, unless I completely misunderstood what you had in mind, I'm not
> in favor of the to_xfer_partial approach.
It's just occurred to me that the encoding of thread-id and
load-module into annex could also handle any necessary OS/ABI related
translations of the load module. This means that that we wouldn't
need two separate code paths which both call
svr4_fetch_objfile_link_map().
Of course, the load module translation could also be done (assuming an
interface change) prior to the call to_get_thread_local_address().
I think this would address both Mark's and Andrew's comments about
remote.c doing somewhat more than expected.
I'll mull it over some more...
Kevin
next prev parent reply other threads:[~2004-12-08 0:24 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-12-06 21:57 Kevin Buettner
2004-12-06 22:51 ` Mark Kettenis
2004-12-06 23:06 ` Daniel Jacobowitz
2004-12-08 0:24 ` Kevin Buettner
2004-12-08 0:38 ` Kevin Buettner [this message]
2004-12-08 1:39 ` Daniel Jacobowitz
2004-12-06 23:46 ` Kevin Buettner
2004-12-12 18:17 ` 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=20041207172410.36b8e046.kevinb@redhat.com \
--to=kevinb@redhat.com \
--cc=drow@false.org \
--cc=gdb-patches@sources.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