2005-01-12 Mark Kettenis <kettenis@gnu.org>
+ * 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.
+
* i386bsd-nat.c: Update copyright year. Don't include
<sys/param.h> and <sys/user.h>.
(register_u_addr, kernel_u_size): Remove functions.
/* 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.
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
/* 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;
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);
}
}
}
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)
/* Shared library declarations for GDB, the GNU Debugger.
- Copyright 1992, 1993, 1995, 1998, 1999, 2000, 2001, 2003
+
+ Copyright 1992, 1993, 1995, 1998, 1999, 2000, 2001, 2003, 2005
Free Software Foundation, Inc.
This file is part of GDB.
#define SOLIB_H
/* Forward decl's for prototypes */
+struct so_list;
struct target_ops;
/* Called when we free all symtabs, to free the shared library information
solib_add (filename, from_tty, targ, readsyms)
extern void solib_add (char *, int, struct target_ops *, int);
+extern int solib_read_symbols (struct so_list *, int);
/* Function to be called when the inferior starts up, to discover the names
of shared libraries that are dynamically linked, the base addresses to