* 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.
This commit is contained in:
Mark Kettenis 2005-01-12 20:52:18 +00:00
parent fbd1b305fd
commit 42a6e6a0ae
3 changed files with 48 additions and 25 deletions

View File

@ -1,5 +1,12 @@
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.

View File

@ -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,28 +617,9 @@ 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;
if (readsyms && solib_read_symbols (gdb, from_tty))
loaded_any_symbols = 1;
}
}
}
if (from_tty && pattern && ! any_matches)
printf_unfiltered

View File

@ -1,5 +1,6 @@
/* 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.
@ -23,6 +24,7 @@
#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
@ -38,6 +40,7 @@ extern void clear_solib (void);
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