aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorKris Warkentin <kewarken@qnx.com>2003-02-24 19:11:04 +0000
committerKris Warkentin <kewarken@qnx.com>2003-02-24 19:11:04 +0000
commit2610b0bff45198901e9816974317481c62d68e1e (patch)
tree3015f1655c24d17b4411398a4af599801eaf4ca1 /gdb
parent07c6e936588ef5f135c8e254361ad393e916c8ea (diff)
downloadgdb-2610b0bff45198901e9816974317481c62d68e1e.zip
gdb-2610b0bff45198901e9816974317481c62d68e1e.tar.gz
gdb-2610b0bff45198901e9816974317481c62d68e1e.tar.bz2
added target specific solib find hook
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/solib.c5
-rw-r--r--gdb/solist.h8
3 files changed, 20 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index d181a53..82ab0d3 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,12 @@
2003-02-24 Kris Warkentin <kewarken@qnx.com>
+ * solib.c (solib_open): call target defined search function after
+ failing with solib-search-path
+ * solist.h (target_so_ops): add find_and_open_solib function hook,
+ create define TARGET_SO_FIND_AND_OPEN_SOLIB
+
+2003-02-24 Kris Warkentin <kewarken@qnx.com>
+
* MAINTAINERS: Add myself to Write After section
2003-02-23 Stephane Carrez <stcarrez@nerim.fr>
diff --git a/gdb/solib.c b/gdb/solib.c
index da71798..289b84f 100644
--- a/gdb/solib.c
+++ b/gdb/solib.c
@@ -160,6 +160,11 @@ solib_open (char *in_pathname, char **found_pathname)
1, lbasename (in_pathname), O_RDONLY, 0,
&temp_pathname);
+ /* If not found, try to use target supplied solib search method */
+ if (found_file < 0 && TARGET_SO_FIND_AND_OPEN_SOLIB != NULL)
+ found_file = TARGET_SO_FIND_AND_OPEN_SOLIB
+ (in_pathname, O_RDONLY, &temp_pathname);
+
/* If not found, next search the inferior's $PATH environment variable. */
if (found_file < 0 && solib_search_path != NULL)
found_file = openp (get_in_environ (inferior_environ, "PATH"),
diff --git a/gdb/solist.h b/gdb/solist.h
index dd1100c..8e5c432 100644
--- a/gdb/solist.h
+++ b/gdb/solist.h
@@ -99,6 +99,12 @@ struct target_so_ops
/* Determine if PC lies in the dynamic symbol resolution code of
the run time loader */
int (*in_dynsym_resolve_code) (CORE_ADDR pc);
+
+ /* Extra hook for finding and opening a solib. Convenience function
+ for remote debuggers finding host libs */
+ int (*find_and_open_solib) (char *soname,
+ unsigned o_flags, char **temp_pathname);
+
};
void free_so (struct so_list *so);
@@ -122,5 +128,7 @@ extern struct target_so_ops *current_target_so_ops;
(current_target_so_ops->open_symbol_file_object)
#define TARGET_SO_IN_DYNSYM_RESOLVE_CODE \
(current_target_so_ops->in_dynsym_resolve_code)
+#define TARGET_SO_FIND_AND_OPEN_SOLIB \
+ (current_target_so_ops->find_and_open_solib)
#endif