* lib/gdb.exp (build_id_debug_filename_get): Improve check for
[deliverable/binutils-gdb.git] / gdb / solib.c
index f522812d427930b9a9341920d64e76500347ce30..a72e6c57319e00d9517ae5df8e7a576c90c05310 100644 (file)
@@ -7,7 +7,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -16,9 +16,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
 
@@ -176,6 +174,17 @@ solib_open (char *in_pathname, char **found_pathname)
   /* Now see if we can open it.  */
   found_file = open (temp_pathname, O_RDONLY | O_BINARY, 0);
 
+  /* We try to find the library in various ways.  After each attempt
+     (except for the one above), either found_file >= 0 and
+     temp_pathname is a malloc'd string, or found_file < 0 and
+     temp_pathname does not point to storage that needs to be
+     freed.  */
+
+    if (found_file < 0)
+      temp_pathname = NULL;
+    else
+      temp_pathname = xstrdup (temp_pathname);
+
   /* If the search in gdb_sysroot failed, and the path name is
      absolute at this point, make it relative.  (openp will try and open the
      file according to its absolute path otherwise, which is not what we want.)
@@ -224,8 +233,13 @@ solib_open (char *in_pathname, char **found_pathname)
 
   /* Done.  If not found, tough luck.  Return found_file and 
      (optionally) found_pathname.  */
-  if (found_pathname != NULL && temp_pathname != NULL)
-    *found_pathname = xstrdup (temp_pathname);
+  if (temp_pathname)
+    {
+      if (found_pathname != NULL)
+       *found_pathname = temp_pathname;
+      else
+       xfree (temp_pathname);
+    }
   return found_file;
 }
 
@@ -838,7 +852,7 @@ clear_solib (void)
      So: disable breakpoints only if we're using ELF shared libs.  */
   if (exec_bfd != NULL
       && bfd_get_flavour (exec_bfd) != bfd_target_aout_flavour)
-    disable_breakpoints_in_shlibs (1);
+    disable_breakpoints_in_shlibs ();
 
   while (so_list_head)
     {
This page took 0.043124 seconds and 4 git commands to generate.