Handle missing shared libraries during the examination of a core
authorPeter Schauer <Peter.Schauer@mytum.de>
Wed, 22 Apr 1998 20:17:44 +0000 (20:17 +0000)
committerPeter Schauer <Peter.Schauer@mytum.de>
Wed, 22 Apr 1998 20:17:44 +0000 (20:17 +0000)
dump gracefully.
* solib.c (find_solib):  Use catch_errors around call to
solib_map_sections. Use warning instead of error if reading of
the shared library name fails.
(solib_map_sections):  Change return and argument types to make
it callable from catch_errors.
(symbol_add_stub):  Avoid GDB core dump if solib->abfd is NULL.
* irix5-nat.c, osfsolib.c (xfer_link_map_member, solib_map_sections,
symbol_add_stub):  Ditto.

gdb/ChangeLog
gdb/irix5-nat.c
gdb/osfsolib.c
gdb/solib.c

index 803c79848c4b35c255918cdbfd7056be9f44aba9..6a3da23d40fee155284133c939d2ec37290b989e 100644 (file)
@@ -1,3 +1,16 @@
+Wed Apr 22 12:58:23 1998 Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       Handle missing shared libraries during the examination of a core
+       dump gracefully.
+       * solib.c (find_solib):  Use catch_errors around call to
+       solib_map_sections. Use warning instead of error if reading of
+       the shared library name fails.
+       (solib_map_sections):  Change return and argument types to make
+       it callable from catch_errors.
+       (symbol_add_stub):  Avoid GDB core dump if solib->abfd is NULL.
+       * irix5-nat.c, osfsolib.c (xfer_link_map_member, solib_map_sections,
+       symbol_add_stub):  Ditto.
+
 Wed Apr 22 14:34:49 1998  Michael Meissner  <meissner@cygnus.com>
 
        * Makefile.in (INTL*): Add support to link in the intl library,
index 4ba686a8a1790d6ed4946f043c63ee2bcc034c47..6ea5deafed7b4a489792eda3921b25fd337d07b7 100644 (file)
@@ -1,5 +1,5 @@
 /* Native support for the SGI Iris running IRIX version 5, for GDB.
-   Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
+   Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998
    Free Software Foundation, Inc.
    Contributed by Alessandro Forin(af@cs.cmu.edu) at CMU
    and by Per Bothner(bothner@cs.wisc.edu) at U.Wisconsin.
@@ -352,8 +352,8 @@ xfer_link_map_member PARAMS ((struct so_list *, struct link_map *));
 static CORE_ADDR
 locate_base PARAMS ((void));
 
-static void
-solib_map_sections PARAMS ((struct so_list *));
+static int
+solib_map_sections PARAMS ((char *));
 
 /*
 
@@ -363,7 +363,7 @@ LOCAL FUNCTION
 
 SYNOPSIS
 
-       static void solib_map_sections (struct so_list *so)
+       static int solib_map_sections (struct so_list *so)
 
 DESCRIPTION
 
@@ -382,10 +382,11 @@ FIXMES
        expansion stuff?).
  */
 
-static void
-solib_map_sections (so)
-     struct so_list *so;
+static int
+solib_map_sections (arg)
+     char *arg;
 {
+  struct so_list *so = (struct so_list *) arg; /* catch_errors bogon */
   char *filename;
   char *scratch_pathname;
   int scratch_chan;
@@ -447,6 +448,8 @@ solib_map_sections (so)
 
   /* Free the file names, close the file now.  */
   do_cleanups (old_chain);
+
+  return (1);
 }
 
 /*
@@ -731,7 +734,9 @@ xfer_link_map_member (so_list_ptr, lm)
 #endif
     }
 
-  solib_map_sections (so_list_ptr);
+  catch_errors (solib_map_sections, (char *) so_list_ptr,
+               "Error while mapping shared library sections:\n",
+               RETURN_MASK_ALL);
 }
 
 
@@ -810,7 +815,7 @@ symbol_add_stub (arg)
 
   if (so -> textsection)
     text_addr = so -> textsection -> addr;
-  else
+  else if (so -> abfd != NULL)
     {
       asection *lowest_sect;
 
index ea0720846a3961e8b73267b61e1a1d66aaa113a1..21b423b956529119048e5eb742d289fffb38b52a 100644 (file)
@@ -1,5 +1,5 @@
 /* Handle OSF/1 shared libraries for GDB, the GNU Debugger.
-   Copyright 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+   Copyright 1993, 1994, 1995, 1996, 1998 Free Software Foundation, Inc.
    
 This file is part of GDB.
 
@@ -193,8 +193,8 @@ next_link_map_member PARAMS ((struct so_list *));
 static void
 xfer_link_map_member PARAMS ((struct so_list *, struct link_map *));
 
-static void
-solib_map_sections PARAMS ((struct so_list *));
+static int
+solib_map_sections PARAMS ((char *));
 
 /*
 
@@ -204,7 +204,7 @@ LOCAL FUNCTION
 
 SYNOPSIS
 
-       static void solib_map_sections (struct so_list *so)
+       static int solib_map_sections (struct so_list *so)
 
 DESCRIPTION
 
@@ -223,10 +223,11 @@ FIXMES
        expansion stuff?).
  */
 
-static void
-solib_map_sections (so)
-     struct so_list *so;
+static int
+solib_map_sections (arg)
+     char *arg;
 {
+  struct so_list *so = (struct so_list *) arg; /* catch_errors bogon */
   char *filename;
   char *scratch_pathname;
   int scratch_chan;
@@ -288,6 +289,8 @@ solib_map_sections (so)
 
   /* Free the file names, close the file now.  */
   do_cleanups (old_chain);
+
+  return (1);
 }
 
 /*
@@ -485,7 +488,9 @@ xfer_link_map_member (so_list_ptr, lm)
        }
 #endif
 
-      solib_map_sections (so_list_ptr);
+      catch_errors (solib_map_sections, (char *) so_list_ptr,
+                   "Error while mapping shared library sections:\n",
+                   RETURN_MASK_ALL);
     }
 }
 
@@ -570,7 +575,7 @@ symbol_add_stub (arg)
 
   if (so -> textsection)
     text_addr = so -> textsection -> addr;
-  else
+  else if (so -> abfd != NULL)
     {
       asection *lowest_sect;
 
index 71faffd1ef4f0028056d8ee3e973a472f6f1b7c8..3f6e73002358c6f410de960e056c7eeb866dd791 100644 (file)
@@ -186,8 +186,8 @@ first_link_map_member PARAMS ((void));
 static CORE_ADDR
 locate_base PARAMS ((void));
 
-static void
-solib_map_sections PARAMS ((struct so_list *));
+static int
+solib_map_sections PARAMS ((char *));
 
 #ifdef SVR4_SHARED_LIBS
 
@@ -224,7 +224,7 @@ LOCAL FUNCTION
 
 SYNOPSIS
 
-       static void solib_map_sections (struct so_list *so)
+       static int solib_map_sections (struct so_list *so)
 
 DESCRIPTION
 
@@ -243,10 +243,11 @@ FIXMES
        expansion stuff?).
  */
 
-static void
-solib_map_sections (so)
-     struct so_list *so;
+static int
+solib_map_sections (arg)
+     char *arg;
 {
+  struct so_list *so = (struct so_list *) arg; /* catch_errors bogon */
   char *filename;
   char *scratch_pathname;
   int scratch_chan;
@@ -343,6 +344,8 @@ solib_map_sections (so)
 
   /* Free the file names, close the file now.  */
   do_cleanups (old_chain);
+
+  return (1);
 }
 
 #ifndef SVR4_SHARED_LIBS
@@ -986,12 +989,17 @@ find_solib (so_list_ptr)
          target_read_string ((CORE_ADDR) LM_NAME (new), &buffer,
                              MAX_PATH_SIZE - 1, &errcode);
          if (errcode != 0)
-           error ("find_solib: Can't read pathname for load map: %s\n",
-                  safe_strerror (errcode));
+           {
+             warning ("find_solib: Can't read pathname for load map: %s\n",
+                      safe_strerror (errcode));
+             return (so_list_next);
+           }
          strncpy (new -> so_name, buffer, MAX_PATH_SIZE - 1);
          new -> so_name[MAX_PATH_SIZE - 1] = '\0';
          free (buffer);
-         solib_map_sections (new);
+         catch_errors (solib_map_sections, (char *) new,
+                       "Error while mapping shared library sections:\n",
+                       RETURN_MASK_ALL);
        }      
     }
   return (so_list_next);
@@ -1008,7 +1016,7 @@ symbol_add_stub (arg)
 
   if (so -> textsection)
     text_addr = so -> textsection -> addr;
-  else
+  else if (so -> abfd != NULL)
     {
       asection *lowest_sect;