aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorStu Grossman <grossman@cygnus>1996-07-17 06:41:25 +0000
committerStu Grossman <grossman@cygnus>1996-07-17 06:41:25 +0000
commit76420d4630b6d072ec8dba3add80c76adfe7bd08 (patch)
tree3adab4b02907455af6cb01f90414dc7a7e2ce2b9 /gdb
parent647e52ea3a4b9ced141f6bd1b8c88174193c337c (diff)
downloadfsf-binutils-gdb-76420d4630b6d072ec8dba3add80c76adfe7bd08.zip
fsf-binutils-gdb-76420d4630b6d072ec8dba3add80c76adfe7bd08.tar.gz
fsf-binutils-gdb-76420d4630b6d072ec8dba3add80c76adfe7bd08.tar.bz2
* command.c (do_setshow_command): Don't segfault when showing
var_string and var_string_noescape vars that are NULL. From the fsf: * solib.c (solib_absolute_prefix, solib_search_path): New variables. (_initialize_solib): Add set/show commands for those variables. (solib_map_sections): Implement searching using them.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog11
-rw-r--r--gdb/command.c9
-rw-r--r--gdb/solib.c58
3 files changed, 72 insertions, 6 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3f744e9..05f9e81 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+Tue Jul 16 23:37:25 1996 Stu Grossman (grossman@critters.cygnus.com)
+
+ * command.c (do_setshow_command): Don't segfault when showing
+ var_string and var_string_noescape vars that are NULL.
+
Mon Jul 15 16:55:48 1996 Doug Evans <dje@canuck.cygnus.com>
* win32-nat.c (handle_load_dll): dos_path_to_unix_path renamed to
@@ -421,6 +426,12 @@ Tue May 28 11:14:58 1996 Tom Tromey <tromey@creche.cygnus.com>
* aclocal.m4 (CY_AC_PATH_TCLH): Don't use AC_TRY_RUN.
(CY_AC_PATH_TKH): Don't use AC_TRY_RUN.
+Sun May 26 16:56:35 1996 Miles Bader <miles@gnu.ai.mit.edu>
+
+ * solib.c (solib_absolute_prefix, solib_search_path): New variables.
+ (_initialize_solib): Add set/show commands for those variables.
+ (solib_map_sections): Implement searching using them.
+
Sun May 26 14:14:49 1996 Fred Fish <fnf@cygnus.com>
Changes from: David Mosberger-Tang <davidm@azstarnet.com>
diff --git a/gdb/command.c b/gdb/command.c
index a5477dd..9afbf82 100644
--- a/gdb/command.c
+++ b/gdb/command.c
@@ -1273,9 +1273,11 @@ do_setshow_command (arg, from_tty, c)
case var_string:
{
unsigned char *p;
+
fputs_filtered ("\"", gdb_stdout);
- for (p = *(unsigned char **) c->var; *p != '\0'; p++)
- gdb_printchar (*p, gdb_stdout, '"');
+ if (*(unsigned char **)c->var)
+ for (p = *(unsigned char **) c->var; *p != '\0'; p++)
+ gdb_printchar (*p, gdb_stdout, '"');
fputs_filtered ("\"", gdb_stdout);
}
break;
@@ -1283,7 +1285,8 @@ do_setshow_command (arg, from_tty, c)
case var_filename:
case var_enum:
fputs_filtered ("\"", gdb_stdout);
- fputs_filtered (*(char **) c->var, gdb_stdout);
+ if (*(char **)c->var)
+ fputs_filtered (*(char **) c->var, gdb_stdout);
fputs_filtered ("\"", gdb_stdout);
break;
case var_boolean:
diff --git a/gdb/solib.c b/gdb/solib.c
index 9e50c16..b8fffd7 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -198,6 +198,15 @@ solib_add_common_symbols PARAMS ((struct rtc_symb *));
#endif
+/* If non-zero, this is a prefix that will be added to the front of the name
+ shared libraries with an absolute filename for loading. */
+static char *solib_absolute_prefix = NULL;
+
+/* If non-empty, this is a search path for loading non-absolute shared library
+ symbol files. This takes precedence over the environment variables PATH
+ and LD_LIBRARY_PATH. */
+static char *solib_search_path = NULL;
+
/*
LOCAL FUNCTION
@@ -237,10 +246,38 @@ solib_map_sections (so)
bfd *abfd;
filename = tilde_expand (so -> so_name);
- old_chain = make_cleanup (free, filename);
- scratch_chan = openp (get_in_environ (inferior_environ, "PATH"),
- 1, filename, O_RDONLY, 0, &scratch_pathname);
+ if (solib_absolute_prefix && ROOTED_P (filename))
+ /* Prefix shared libraries with absolute filenames with
+ SOLIB_ABSOLUTE_PREFIX. */
+ {
+ char *pfxed_fn;
+ int pfx_len;
+
+ pfx_len = strlen (solib_absolute_prefix);
+
+ /* Remove trailing slashes. */
+ while (pfx_len > 0 && SLASH_P (solib_absolute_prefix[pfx_len - 1]))
+ pfx_len--;
+
+ pfxed_fn = xmalloc (pfx_len + strlen (filename) + 1);
+ strcpy (pfxed_fn, solib_absolute_prefix);
+ strcat (pfxed_fn, filename);
+ free (filename);
+
+ filename = pfxed_fn;
+ }
+
+ old_chain = make_cleanup (free, filename);
+
+ scratch_chan = -1;
+
+ if (solib_search_path)
+ scratch_chan = openp (solib_search_path,
+ 1, filename, O_RDONLY, 0, &scratch_pathname);
+ if (scratch_chan < 0)
+ scratch_chan = openp (get_in_environ (inferior_environ, "PATH"),
+ 1, filename, O_RDONLY, 0, &scratch_pathname);
if (scratch_chan < 0)
{
scratch_chan = openp (get_in_environ
@@ -1707,5 +1744,20 @@ must be loaded manually, using `sharedlibrary'.",
&setlist),
&showlist);
+ add_show_from_set
+ (add_set_cmd ("solib-absolute-prefix", class_support, var_filename,
+ (char *) &solib_absolute_prefix,
+ "Set prefix for loading absolute shared library symbol files.\n
+For other (relative) files, you can add values using `set solib-search-path'.",
+ &setlist),
+ &showlist);
+ add_show_from_set
+ (add_set_cmd ("solib-search-path", class_support, var_string,
+ (char *) &solib_search_path,
+ "Set the search path for loading non-absolute shared library symbol files.\n
+This takes precedence over the environment variables PATH and LD_LIBRARY_PATH.",
+ &setlist),
+ &showlist);
+
#endif /* HAVE_LINK_H */
}