diff options
author | Mark Kettenis <kettenis@gnu.org> | 2005-01-12 20:52:18 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2005-01-12 20:52:18 +0000 |
commit | 42a6e6a0ae5197d22b260eb611c9da92d2e8828d (patch) | |
tree | f8dc73beccdd9feaa8ce6c0b1fab4efe40f8c5c3 /gdb/solib.c | |
parent | fbd1b305fd9d99a2f66d5394063c8d0ed379179f (diff) | |
download | gdb-42a6e6a0ae5197d22b260eb611c9da92d2e8828d.zip gdb-42a6e6a0ae5197d22b260eb611c9da92d2e8828d.tar.gz gdb-42a6e6a0ae5197d22b260eb611c9da92d2e8828d.tar.bz2 |
* solib.h Update copyright year.
(struct so_list): Forward declaration.
(solib_read_symbols): New prototype.
* solib.c (solib_read_symbols): New function.
(solib_add): Call solib_read_symbols to read in symbols.
(update_solib_list): Call observer_notify_solib_loaded.
Diffstat (limited to 'gdb/solib.c')
-rw-r--r-- | gdb/solib.c | 61 |
1 files changed, 37 insertions, 24 deletions
diff --git a/gdb/solib.c b/gdb/solib.c index df59835..aeb92af 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -1,7 +1,8 @@ /* Handle shared libraries for GDB, the GNU Debugger. Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003, 2005 + Free Software Foundation, Inc. This file is part of GDB. @@ -370,6 +371,33 @@ symbol_add_stub (void *arg) return (1); } +/* Read in symbols for shared object SO. If FROM_TTY is non-zero, be + chatty about it. Return non-zero if any symbols were actually + loaded. */ + +int +solib_read_symbols (struct so_list *so, int from_tty) +{ + if (so->symbols_loaded) + { + if (from_tty) + printf_unfiltered ("Symbols already loaded for %s\n", so->so_name); + } + else + { + if (catch_errors (symbol_add_stub, so, + "Error while reading shared library symbols:\n", + RETURN_MASK_ALL)) + { + if (from_tty) + printf_unfiltered ("Loaded symbols for %s\n", so->so_name); + so->symbols_loaded = 1; + return 1; + } + } + + return 0; +} /* LOCAL FUNCTION @@ -480,8 +508,8 @@ update_solib_list (int from_tty, struct target_ops *target) /* If it's not on the inferior's list, remove it from GDB's tables. */ else { - /* Notify any observer that the SO has been unloaded - before we remove it from the gdb tables. */ + /* Notify any observer that the shared object has been + unloaded before we remove it from GDB's tables. */ observer_notify_solib_unloaded (gdb); *gdb_link = gdb->next; @@ -534,6 +562,10 @@ update_solib_list (int from_tty, struct target_ops *target) count * sizeof (i->sections[0])); } } + + /* Notify any observer that the shared object has been + loaded now that we've added it to GDB's tables. */ + observer_notify_solib_loaded (i); } } } @@ -585,27 +617,8 @@ solib_add (char *pattern, int from_tty, struct target_ops *target, int readsyms) if (! pattern || re_exec (gdb->so_name)) { any_matches = 1; - - if (gdb->symbols_loaded) - { - if (from_tty) - printf_unfiltered ("Symbols already loaded for %s\n", - gdb->so_name); - } - else if (readsyms) - { - if (catch_errors - (symbol_add_stub, gdb, - "Error while reading shared library symbols:\n", - RETURN_MASK_ALL)) - { - if (from_tty) - printf_unfiltered ("Loaded symbols for %s\n", - gdb->so_name); - gdb->symbols_loaded = 1; - loaded_any_symbols = 1; - } - } + if (readsyms && solib_read_symbols (gdb, from_tty)) + loaded_any_symbols = 1; } if (from_tty && pattern && ! any_matches) |