This is the mail archive of the
gdb-prs@sources.redhat.com
mailing list for the GDB project.
Re: gdb/633: fully qualified pathnames in solib_map_sections() and remote debugging
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: nobody at sources dot redhat dot com
- Cc: gdb-prs at sources dot redhat dot com,
- Date: 6 Aug 2002 13:28:03 -0000
- Subject: Re: gdb/633: fully qualified pathnames in solib_map_sections() and remote debugging
- Reply-to: Daniel Jacobowitz <drow at mvista dot com>
The following reply was made to PR gdb/633; it has been noted by GNATS.
From: Daniel Jacobowitz <drow@mvista.com>
To: jorma.laaksonen@hut.fi
Cc: gdb-gnats@sources.redhat.com, gdb@sources.redhat.com
Subject: Re: gdb/633: fully qualified pathnames in solib_map_sections() and remote debugging
Date: Tue, 6 Aug 2002 09:20:47 -0400
On Tue, Aug 06, 2002 at 10:06:34AM -0000, jorma.laaksonen@hut.fi wrote:
>
> >Number: 633
> >Category: gdb
> >Synopsis: fully qualified pathnames in solib_map_sections() and remote debugging
> >Confidential: no
> >Severity: non-critical
> >Priority: medium
> >Responsible: unassigned
> >State: open
> >Class: sw-bug
> >Submitter-Id: net
> >Arrival-Date: Tue Aug 06 03:08:01 PDT 2002
> >Closed-Date:
> >Last-Modified:
> >Originator: jorma.laaksonen@hut.fi
> >Release: gdb-5.2
> >Organization:
> >Environment:
> --host=i686-pc-linux-gnu --target=arm-linux
> >Description:
> When debugging remotely an application that runs
> in another type of platform, solib_map_sections() of solib.c gets called with fully qualified pathnames
> that are correct in the target system but not necessarily
> in the host system. Or, the host system's solib versions
> are of incorrect file format for the cross-target gdb.
>
> When such a solib doesn't exist in host's filesystem,
> a loop of errors like
>
> > Error while mapping shared library sections:
> > /usr/lib/libxxx.so.1: No such file or directory.
>
> is entered.
> >How-To-Repeat:
>
> >Fix:
> Add a variable that specifies search path for solibs
> while debugging remotely ???
There already is one :) Two in fact. The normal solution to this is
to set solib-absolute-prefix to point at an image of the target
filesystem.
GLOBAL FUNCTION
solib_open -- Find a shared library file and open it.
SYNOPSIS
int solib_open (char *in_patname, char **found_pathname);
DESCRIPTION
Global variable SOLIB_ABSOLUTE_PREFIX is used as a prefix directory
to search for shared libraries if they have an absolute path.
Global variable SOLIB_SEARCH_PATH is used as a prefix directory
(or set of directories, as in LD_LIBRARY_PATH) to search for all
shared libraries if not found in SOLIB_ABSOLUTE_PREFIX.
Search order:
* If path is absolute, look in SOLIB_ABSOLUTE_PREFIX.
* If path is absolute or relative, look for it literally (unmodified).
* Look in SOLIB_SEARCH_PATH.
* Look in inferior's $PATH.
* Look in inferior's $LD_LIBRARY_PATH.
I think the search order needs some revision though:
- A cross debugger should not search $PATH or $LD_LIBRARY_PATH
- A cross debugger may, or may not, want to look for the unmodified
path; I suspect that we only want to look for unmodified relative
paths, not unmodified absolute ones.
With those changes you would have to explicitly specify the path to
DSOs in a cross debugger via solib-absolute-prefix and
solib-search-path, and GDB would stop picking up the host libpthread.so
and making gdbserver segfault... any comments from the list?
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer