From: Mathieu Lacage <Mathieu.Lacage@sophia.inria.fr>
To: Daniel Jacobowitz <drow@false.org>
Cc: gdb@sourceware.org
Subject: Re: gdb and dynamic loader namespaces
Date: Tue, 09 Jan 2007 07:58:00 -0000 [thread overview]
Message-ID: <1168329428.21818.61.camel@garfield.inria.fr> (raw)
In-Reply-To: <20070108151510.GA14359@nevyn.them.org>
On Mon, 2007-01-08 at 10:15 -0500, Daniel Jacobowitz wrote:
> On Mon, Jan 08, 2007 at 04:09:58PM +0100, Mathieu Lacage wrote:
> > So, I tried to figure out how I could fix this in gdb: a bit of
> > debugging shows that gdb is notified of dlmopen calls through the
> > r_debug structure since "set stop-on-solib-events 1" triggers correctly
> > an event upon dlmopen. The question then is why gdb does not add the new
> > binary to its map. Maybe someone more knowledgeable than me about the
> > layout of the gdb code source could point me to the piece of code which
> > updates and manipulates the gdb map of binaries used during symbol
> > lookup ? (I am using an x86 linux system)
>
> It's in solib-svr4.c. Look especially at current_sos and compare that
> to where glibc adds things in namespaces. I doubt they're on the same
> list, and in fact they may not even be listed in the public part of
> struct r_debug.
They are not, indeed in the public part of r_debug. My understanding is
that the rtld_global data structure (see sysdeps/generic/ldsodefs.h)
contains an array of struct link_namespaces, each of which contains a
struct r_debug. The first entry in this array is supposed to represent
the LD_ID_BASE which is the default namespace: it is not super clear to
me what is the relationship between the struct r_debug embedded in the
associated struct link_namespace and the global _r_debug variable used
to hold the process struct r_debug. The latter seems to be the default
value used to initialize the dynamic loader's DT_DEBUG entry which you
use for all your debugging needs in solib-svr4.c.
The question then is how can we get access to the link_map of each
namespace from the parent process ? We could perform a lookup for the
rtld_global data structure and then, use an offset from there to get the
required data. I suspect you won't be thrilled by that though. Do you
have any better idea ? Maybe I should ask this question on a glibc ML: I
would be surprised if no one had ever planned debugger support for this
feature.
Mathieu
--
next prev parent reply other threads:[~2007-01-09 7:58 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-08 15:11 Mathieu Lacage
2007-01-08 15:15 ` Daniel Jacobowitz
2007-01-08 16:45 ` mathieu lacage
2007-01-08 17:57 ` Daniel Jacobowitz
2007-01-09 7:58 ` Mathieu Lacage [this message]
2007-01-09 13:41 ` Daniel Jacobowitz
2007-03-20 13:59 ` mathieu lacage
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=1168329428.21818.61.camel@garfield.inria.fr \
--to=mathieu.lacage@sophia.inria.fr \
--cc=drow@false.org \
--cc=gdb@sourceware.org \
/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