This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: Chicken-or-egg problem with shared libraries
- From: Daniel Jacobowitz <drow at false dot org>
- To: PAUL GILLIAM <pgilliam at us dot ibm dot com>
- Cc: gdb at sources dot redhat dot com
- Date: Tue, 23 May 2006 18:11:14 -0400
- Subject: Re: Chicken-or-egg problem with shared libraries
- References: <1148418266.315.45.camel@dufur.beaverton.ibm.com>
On Tue, May 23, 2006 at 02:04:26PM -0700, PAUL GILLIAM wrote:
> In solib-svr4.c (enable_break), GDB tries to set a breakpoint in the
> dynamic loader (at "_dl_debug_state") so that shared objects can be
> tracked as they are loaded and unloaded.
>
> The problem (on gnu/linux PowerPC64 at least) is that the dynamic loader
> is it's self a shared object and its minimal symbols are not loaded when
> "enable_break" is called.
>
> I have two ideas for fixing this: 1) pre-load the dynamic loaders
> minimal symbols so that when "enable_break()" is called,
> "_dl_debug_state" will be found and all is well and 2) allow
> "enable_break()" to set a pending breakpoint.
I don't think you really understand the problem you're trying to fix -
what is it, by the way? Is it related to Alan's comment earlier
about the function descriptor lookup?
Here's how it works today:
bfd_get_section_contents (exec_bfd, interp_sect,
buf, 0, interp_sect_size);
tmp_fd = solib_open (buf, &tmp_pathname);
if (tmp_fd >= 0)
tmp_bfd = bfd_fopen (tmp_pathname, gnutarget, FOPEN_RB, tmp_fd);
sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep, SEC_CODE);
if (sym_addr != 0)
break;
--
Daniel Jacobowitz
CodeSourcery