From ba5f0d88f312fa47d20c5d196e41477cb24e6180 Mon Sep 17 00:00:00 2001 From: Orjan Friberg Date: Tue, 4 Dec 2001 09:34:56 +0000 Subject: 2001-12-04 Orjan Friberg * 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 | 6 ++++++ gdb/solib.c | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 617f6d9..4289a2f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2001-12-04 Orjan Friberg + + * 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 * serial.h: Add a note to serial_open. diff --git a/gdb/solib.c b/gdb/solib.c index 853fab8..ddf3171 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -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) -- cgit v1.1