2001-12-04 Orjan Friberg <orjanf@axis.com>
authorOrjan Friberg <orjanf@axis.com>
Tue, 4 Dec 2001 09:34:56 +0000 (09:34 +0000)
committerOrjan Friberg <orjanf@axis.com>
Tue, 4 Dec 2001 09:34:56 +0000 (09:34 +0000)
* solib.c (solib_open): Make path relative if search for absolute path
failed.  If search for relative path in solib_search_path failed, fall
back to search for basename only.

gdb/ChangeLog
gdb/solib.c

index 617f6d969b2eb85c210e7736177dd3651c5738ec..4289a2f4bc5423c4425350679c97813f093755ce 100644 (file)
@@ -1,3 +1,9 @@
+2001-12-04  Orjan Friberg  <orjanf@axis.com>
+
+       * solib.c (solib_open): Make path relative if search for absolute path
+       failed.  If search for relative path in solib_search_path failed, fall
+       back to search for basename only.
+
 2001-12-03  Martin M. Hunt  <hunt@redhat.com>
 
        * serial.h: Add a note to serial_open.
index 853fab82bef2f8de6d687cf27f282ba56b1587b0..ddf317146b752e16428f2022b645d960dca88afb 100644 (file)
@@ -131,10 +131,33 @@ solib_open (char *in_pathname, char **found_pathname)
       found_file = open (temp_pathname, O_RDONLY, 0);
     }
 
+  /* If the search in solib_absolute_prefix 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.)
+     Affects subsequent searches for this solib.  */
+  if (found_file < 0 && IS_ABSOLUTE_PATH (in_pathname))
+    {
+      /* First, get rid of any drive letters etc.  */
+      while (!IS_DIR_SEPARATOR (*in_pathname))
+        in_pathname++;
+
+      /* Next, get rid of all leading dir separators.  */
+      while (IS_DIR_SEPARATOR (*in_pathname))
+        in_pathname++;
+    }
+  
   /* If not found, next search the solib_search_path (if any).  */
   if (found_file < 0 && solib_search_path != NULL)
     found_file = openp (solib_search_path,
                        1, in_pathname, O_RDONLY, 0, &temp_pathname);
+  
+  /* If not found, next search the solib_search_path (if any) for the basename
+     only (ignoring the path).  This is to allow reading solibs from a path
+     that differs from the opened path.  */
+  if (found_file < 0 && solib_search_path != NULL)
+    found_file = openp (solib_search_path, 
+                        1, lbasename (in_pathname), O_RDONLY, 0,
+                        &temp_pathname);
 
   /* If not found, next search the inferior's $PATH environment variable. */
   if (found_file < 0 && solib_search_path != NULL)