2009-06-16 Paul Pluzhnikov <ppluzhnikov@google.com>

* solib.c (symbol_add_stub): New FLAGS parameter.
	(solib_read_symbols): FROM_TTY -> FLAGS, call symbol_add_stub
	directly.
	(solib_add): Defer breakpoint_re_set until after all solibs.
	* bsd-uthread.c (bsd_uthread_solib_loaded): Adjust.
	* rs6000-nat.c (objfile_symbol_add): Adjust.
	* symfile.c (syms_from_objfile): Merge parameters into ADD_FLAGS.
	(new_symfile_objfile): Likewise.
	(symbol_file_add_with_addrs_or_offsets): Likewise.
	(symbol_file_add_from_bfd): Likewise.
	(symbol_file_add): Likewise.
	* symfile.h (enum symfile_add_flags): New. Adjust prototypes.
	* symfile-mem.c (symbol_file_add_from_memory): Adjust.
	* windows-nat.c (safe_symbol_file_add_stub): Adjust.
	* machoread.c (macho_oso_symfile, macho_symfile_read): Adjust.
This commit is contained in:
Paul Pluzhnikov 2009-06-16 18:49:25 +00:00
parent 19ef5c713c
commit 7eedccfa2a
10 changed files with 120 additions and 76 deletions

View file

@ -448,39 +448,37 @@ master_so_list (void)
return so_list_head;
}
/* A small stub to get us past the arg-passing pinhole of catch_errors. */
static int
symbol_add_stub (void *arg)
static void
symbol_add_stub (struct so_list *so, int flags)
{
struct so_list *so = (struct so_list *) arg; /* catch_errs bogon */
struct section_addr_info *sap;
/* Have we already loaded this shared object? */
ALL_OBJFILES (so->objfile)
{
if (strcmp (so->objfile->name, so->so_name) == 0)
return 1;
return;
}
sap = build_section_addr_info_from_section_table (so->sections,
so->sections_end);
so->objfile = symbol_file_add_from_bfd (so->abfd, so->from_tty,
sap, 0, OBJF_SHARED | OBJF_KEEPBFD);
so->objfile = symbol_file_add_from_bfd (so->abfd, flags,
sap, OBJF_SHARED | OBJF_KEEPBFD);
free_section_addr_info (sap);
return (1);
return;
}
/* 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
/* Read in symbols for shared object SO. If SYMFILE_VERBOSE is set in FLAGS,
be chatty about it. Return non-zero if any symbols were actually
loaded. */
int
solib_read_symbols (struct so_list *so, int from_tty)
solib_read_symbols (struct so_list *so, int flags)
{
const int from_tty = flags & SYMFILE_VERBOSE;
if (so->symbols_loaded)
{
if (from_tty)
@ -493,15 +491,21 @@ solib_read_symbols (struct so_list *so, int from_tty)
}
else
{
if (catch_errors (symbol_add_stub, so,
"Error while reading shared library symbols:\n",
RETURN_MASK_ALL))
{
if (from_tty && print_symbol_loading)
printf_unfiltered (_("Loaded symbols for %s\n"), so->so_name);
so->symbols_loaded = 1;
return 1;
}
volatile struct gdb_exception exception;
TRY_CATCH (exception, RETURN_MASK_ALL)
{
symbol_add_stub (so, flags);
}
if (exception.reason != 0)
{
exception_fprintf (gdb_stderr, exception,
"Error while reading shared library symbols:\n");
return 0;
}
if (from_tty && print_symbol_loading)
printf_unfiltered (_("Loaded symbols for %s\n"), so->so_name);
so->symbols_loaded = 1;
return 1;
}
return 0;
@ -736,6 +740,8 @@ solib_add (char *pattern, int from_tty, struct target_ops *target, int readsyms)
{
int any_matches = 0;
int loaded_any_symbols = 0;
const int flags =
SYMFILE_DEFER_BP_RESET | (from_tty ? SYMFILE_VERBOSE : 0);
for (gdb = so_list_head; gdb; gdb = gdb->next)
if (! pattern || re_exec (gdb->so_name))
@ -749,10 +755,13 @@ solib_add (char *pattern, int from_tty, struct target_ops *target, int readsyms)
(readsyms || libpthread_solib_p (gdb));
any_matches = 1;
if (add_this_solib && solib_read_symbols (gdb, from_tty))
if (add_this_solib && solib_read_symbols (gdb, flags))
loaded_any_symbols = 1;
}
if (loaded_any_symbols)
breakpoint_re_set ();
if (from_tty && pattern && ! any_matches)
printf_unfiltered
("No loaded shared libraries match the pattern `%s'.\n", pattern);