This is the mail archive of the gdb@sources.redhat.com 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: solib-search-path not honoured after program start


On Feb 19,  2:58pm, Kris Warkentin wrote:

> > At first glance, the problem seems to be that update_solib_list() only
> > considers mapping newly found shared libraries and not ones that were
> > previously known, but which could not be found.
> > 
> > It might not be too hard to change things so that it attempts to map
> > previously unmappable libraries, but I wonder what should happen to
> > already mapped and/or loaded shared libraries when solib-search-path
> > is changed.  If changing the search path (or the absolute prefix)
> > would cause different libraries to be found (than were found
> > previously), should the old ones be unmapped/discarded?  (I suspect
> > the answer is yes.)
> > 
> > If so, maybe the right way to fix this problem is to have the
> > "set solib-search-path" and "set solib-absolute-prefix" commands
> > simply unload all known shared libraries and then invoke solib_add().
> 
> What do you think of this?
[patch elided]

Your patch corresponds to my "at first glance" comment above.  While
it might provide some short term relief for the problem that you're
seeing, it doesn't address the problem of libraries needing to be
reloaded when the search path or absolute prefix is changed.  Would
you mind trying the following patch instead?

	* solib.c (reload_shared_libraries): New function.
	(_initialize_solib): Add command callbacks for
	``set solib-search-path'' and ``set solib-absolute-prefix''.

Index: solib.c
===================================================================
RCS file: /cvs/src/src/gdb/solib.c,v
retrieving revision 1.53
diff -u -p -r1.53 solib.c
--- solib.c	18 Jan 2003 15:55:52 -0000	1.53
+++ solib.c	19 Feb 2003 21:08:42 -0000
@@ -844,6 +844,13 @@ no_shared_libraries (char *ignored, int 
   do_clear_solib (NULL);
 }
 
+static void
+reload_shared_libraries (char *ignored, int from_tty)
+{
+  no_shared_libraries (NULL, from_tty);
+  solib_add (NULL, from_tty, NULL, auto_solib_add);
+}
+
 void
 _initialize_solib (void)
 {
@@ -873,6 +880,7 @@ inferior.  Otherwise, symbols must be lo
 For other (relative) files, you can add values using `set solib-search-path'.",
 		   &setlist);
   add_show_from_set (c, &showlist);
+  set_cmd_cfunc (c, reload_shared_libraries);
   set_cmd_completer (c, filename_completer);
 
   /* Set the default value of "solib-absolute-prefix" from the sysroot, if
@@ -885,5 +893,6 @@ For other (relative) files, you can add 
 This takes precedence over the environment variables PATH and LD_LIBRARY_PATH.",
 		   &setlist);
   add_show_from_set (c, &showlist);
+  set_cmd_cfunc (c, reload_shared_libraries);
   set_cmd_completer (c, filename_completer);
 }


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