* NEWS: Add note on "info sharedlibrary".
Remove note on "set print symbol-loading". * main.c (captured_main): Pass !batch for from_tty when calling symbol_file_add_main. * objfiles.h (objfile_has_partial_symbols): Declare. (objfile_has_full_symbols): Declare. * objfiles.c (objfile_has_partial_symbols): New function. (have_partial_symbols): Use it. (objfile_has_full_symbols): New function. (have_full_symbols): Use it. * solib.c: Include interps.h. (solib_read_symbols): Back out patch of 2008-07-10. Add test for info_verbose for symbol loading messages for consistency with symfile.c. (info_sharedlibrary_command): Handle optional parameter of regex of libraries to list. Inform user of libraries without debugging info. Rewrite to use ui_out routines to format output. * symfile.c (print_symbol_loading): Delete. (symbol_file_add_with_addrs_or_offsets): Back out patch of 2008-07-10. Print "no debugging symbols found" only if from_tty || info_verbose; and only check file being loaded, not all files. (reread_symbols): Test file being loaded for whether it has symbols, not all files. (__initialize_symfile): Delete `set print symbol-loading'. * symfile.h (print_symbol_loading): Delete. * doc/gdb.texinfo (Symbols): Delete `set print symbol-loading'. (Files): Add note on new optional regex arg to `info sharedlibrary'.
This commit is contained in:
parent
b96fec5e99
commit
55333a841d
@ -1,3 +1,31 @@
|
||||
2009-08-27 Doug Evans <dje@google.com>
|
||||
|
||||
* NEWS: Add note on "info sharedlibrary".
|
||||
Remove note on "set print symbol-loading".
|
||||
* main.c (captured_main): Pass !batch for from_tty when calling
|
||||
symbol_file_add_main.
|
||||
* objfiles.h (objfile_has_partial_symbols): Declare.
|
||||
(objfile_has_full_symbols): Declare.
|
||||
* objfiles.c (objfile_has_partial_symbols): New function.
|
||||
(have_partial_symbols): Use it.
|
||||
(objfile_has_full_symbols): New function.
|
||||
(have_full_symbols): Use it.
|
||||
* solib.c: Include interps.h.
|
||||
(solib_read_symbols): Back out patch of 2008-07-10.
|
||||
Add test for info_verbose for symbol loading messages for
|
||||
consistency with symfile.c.
|
||||
(info_sharedlibrary_command): Handle optional parameter of regex of
|
||||
libraries to list. Inform user of libraries without debugging info.
|
||||
Rewrite to use ui_out routines to format output.
|
||||
* symfile.c (print_symbol_loading): Delete.
|
||||
(symbol_file_add_with_addrs_or_offsets): Back out patch of 2008-07-10.
|
||||
Print "no debugging symbols found" only if from_tty || info_verbose;
|
||||
and only check file being loaded, not all files.
|
||||
(reread_symbols): Test file being loaded for whether it has symbols,
|
||||
not all files.
|
||||
(__initialize_symfile): Delete `set print symbol-loading'.
|
||||
* symfile.h (print_symbol_loading): Delete.
|
||||
|
||||
2009-08-27 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* varobj.c (varobj_create): Error if the specified frame was not found
|
||||
|
7
gdb/NEWS
7
gdb/NEWS
@ -48,6 +48,9 @@ remote targets. To use this feature, specify a system root that begins
|
||||
with the `remote:' prefix, either via the `set sysroot' command or via
|
||||
the `--with-sysroot' configure-time option.
|
||||
|
||||
* "info sharedlibrary" now takes an optional regex of libraries to show,
|
||||
and it now reports if a shared library has no debugging information.
|
||||
|
||||
* Commands `set debug-file-directory', `set solib-search-path' and `set args'
|
||||
now complete on file names.
|
||||
|
||||
@ -278,10 +281,6 @@ set sh calling-convention
|
||||
show sh calling-convention
|
||||
Control the calling convention used when calling SH target functions.
|
||||
|
||||
set print symbol-loading
|
||||
show print symbol-loading
|
||||
Control printing of symbol loading messages.
|
||||
|
||||
set debug timestamp
|
||||
show debug timestamp
|
||||
Control display of timestamps with GDB debugging output.
|
||||
|
@ -1,3 +1,8 @@
|
||||
2009-08-27 Doug Evans <dje@google.com>
|
||||
|
||||
* gdb.texinfo (Symbols): Delete `set print symbol-loading'.
|
||||
(Files): Add note on new optional regex arg to `info sharedlibrary'.
|
||||
|
||||
2009-08-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
|
||||
|
||||
* gdbint.texinfo (Releasing GDB): Fix confusing sentence
|
||||
|
@ -12637,22 +12637,6 @@ is printed as follows:
|
||||
@item show opaque-type-resolution
|
||||
Show whether opaque types are resolved or not.
|
||||
|
||||
@kindex set print symbol-loading
|
||||
@cindex print messages when symbols are loaded
|
||||
@item set print symbol-loading
|
||||
@itemx set print symbol-loading on
|
||||
@itemx set print symbol-loading off
|
||||
The @code{set print symbol-loading} command allows you to enable or
|
||||
disable printing of messages when @value{GDBN} loads symbols.
|
||||
By default, these messages will be printed, and normally this is what
|
||||
you want. Disabling these messages is useful when debugging applications
|
||||
with lots of shared libraries where the quantity of output can be more
|
||||
annoying than useful.
|
||||
|
||||
@kindex show print symbol-loading
|
||||
@item show print symbol-loading
|
||||
Show whether messages will be printed when @value{GDBN} loads symbols.
|
||||
|
||||
@kindex maint print symbols
|
||||
@cindex symbol dump
|
||||
@kindex maint print psymbols
|
||||
@ -13525,9 +13509,11 @@ command:
|
||||
@table @code
|
||||
@kindex info sharedlibrary
|
||||
@kindex info share
|
||||
@item info share
|
||||
@itemx info sharedlibrary
|
||||
Print the names of the shared libraries which are currently loaded.
|
||||
@item info share @var{regex}
|
||||
@itemx info sharedlibrary @var{regex}
|
||||
Print the names of the shared libraries which are currently loaded
|
||||
that match @var{regex}. If @var{regex} is omitted then print
|
||||
all shared libraries that are loaded.
|
||||
|
||||
@kindex sharedlibrary
|
||||
@kindex share
|
||||
|
@ -801,14 +801,14 @@ Excess command line arguments ignored. (%s%s)\n"),
|
||||
open it, better only print one error message.
|
||||
catch_command_errors returns non-zero on success! */
|
||||
if (catch_command_errors (exec_file_attach, execarg, !batch, RETURN_MASK_ALL))
|
||||
catch_command_errors (symbol_file_add_main, symarg, 0, RETURN_MASK_ALL);
|
||||
catch_command_errors (symbol_file_add_main, symarg, !batch, RETURN_MASK_ALL);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (execarg != NULL)
|
||||
catch_command_errors (exec_file_attach, execarg, !batch, RETURN_MASK_ALL);
|
||||
if (symarg != NULL)
|
||||
catch_command_errors (symbol_file_add_main, symarg, 0, RETURN_MASK_ALL);
|
||||
catch_command_errors (symbol_file_add_main, symarg, !batch, RETURN_MASK_ALL);
|
||||
}
|
||||
|
||||
if (corearg && pidarg)
|
||||
|
@ -700,6 +700,22 @@ objfile_relocate (struct objfile *objfile, struct section_offsets *new_offsets)
|
||||
breakpoint_re_set ();
|
||||
}
|
||||
|
||||
/* Return non-zero if OBJFILE has partial symbols. */
|
||||
|
||||
int
|
||||
objfile_has_partial_symbols (struct objfile *objfile)
|
||||
{
|
||||
return objfile->psymtabs != NULL;
|
||||
}
|
||||
|
||||
/* Return non-zero if OBJFILE has full symbols. */
|
||||
|
||||
int
|
||||
objfile_has_full_symbols (struct objfile *objfile)
|
||||
{
|
||||
return objfile->symtabs != NULL;
|
||||
}
|
||||
|
||||
/* Many places in gdb want to test just to see if we have any partial
|
||||
symbols available. This function returns zero if none are currently
|
||||
available, nonzero otherwise. */
|
||||
@ -711,10 +727,8 @@ have_partial_symbols (void)
|
||||
|
||||
ALL_OBJFILES (ofp)
|
||||
{
|
||||
if (ofp->psymtabs != NULL)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (objfile_has_partial_symbols (ofp))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -730,10 +744,8 @@ have_full_symbols (void)
|
||||
|
||||
ALL_OBJFILES (ofp)
|
||||
{
|
||||
if (ofp->symtabs != NULL)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (objfile_has_full_symbols (ofp))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -472,6 +472,10 @@ extern void free_all_objfiles (void);
|
||||
|
||||
extern void objfile_relocate (struct objfile *, struct section_offsets *);
|
||||
|
||||
extern int objfile_has_partial_symbols (struct objfile *objfile);
|
||||
|
||||
extern int objfile_has_full_symbols (struct objfile *objfile);
|
||||
|
||||
extern int have_partial_symbols (void);
|
||||
|
||||
extern int have_full_symbols (void);
|
||||
|
128
gdb/solib.c
128
gdb/solib.c
@ -46,6 +46,7 @@
|
||||
#include "readline/readline.h"
|
||||
#include "remote.h"
|
||||
#include "solib.h"
|
||||
#include "interps.h"
|
||||
|
||||
/* Architecture-specific operations. */
|
||||
|
||||
@ -472,12 +473,12 @@ solib_read_symbols (struct so_list *so, int flags)
|
||||
|
||||
if (so->symbols_loaded)
|
||||
{
|
||||
if (from_tty)
|
||||
if (from_tty || info_verbose)
|
||||
printf_unfiltered (_("Symbols already loaded for %s\n"), so->so_name);
|
||||
}
|
||||
else if (so->abfd == NULL)
|
||||
{
|
||||
if (from_tty)
|
||||
if (from_tty || info_verbose)
|
||||
printf_unfiltered (_("Symbol file not found for %s\n"), so->so_name);
|
||||
}
|
||||
else
|
||||
@ -493,7 +494,7 @@ solib_read_symbols (struct so_list *so, int flags)
|
||||
"Error while reading shared library symbols:\n");
|
||||
return 0;
|
||||
}
|
||||
if (from_tty && print_symbol_loading)
|
||||
if (from_tty || info_verbose)
|
||||
printf_unfiltered (_("Loaded symbols for %s\n"), so->so_name);
|
||||
so->symbols_loaded = 1;
|
||||
return 1;
|
||||
@ -784,52 +785,117 @@ solib_add (char *pattern, int from_tty, struct target_ops *target, int readsyms)
|
||||
DESCRIPTION
|
||||
|
||||
Walk through the shared library list and print information
|
||||
about each attached library.
|
||||
about each attached library matching PATTERN. If PATTERN is elided,
|
||||
print them all.
|
||||
*/
|
||||
|
||||
static void
|
||||
info_sharedlibrary_command (char *ignore, int from_tty)
|
||||
info_sharedlibrary_command (char *pattern, int from_tty)
|
||||
{
|
||||
struct so_list *so = NULL; /* link map state variable */
|
||||
int header_done = 0;
|
||||
int so_missing_debug_info = 0;
|
||||
int addr_width;
|
||||
int nr_libs;
|
||||
struct cleanup *table_cleanup;
|
||||
struct gdbarch *gdbarch = target_gdbarch;
|
||||
|
||||
if (pattern)
|
||||
{
|
||||
char *re_err = re_comp (pattern);
|
||||
|
||||
if (re_err)
|
||||
error (_("Invalid regexp: %s"), re_err);
|
||||
}
|
||||
|
||||
/* "0x", a little whitespace, and two hex digits per byte of pointers. */
|
||||
addr_width = 4 + (gdbarch_ptr_bit (target_gdbarch) / 4);
|
||||
addr_width = 4 + (gdbarch_ptr_bit (gdbarch) / 4);
|
||||
|
||||
update_solib_list (from_tty, 0);
|
||||
|
||||
for (so = so_list_head; so; so = so->next)
|
||||
/* make_cleanup_ui_out_table_begin_end needs to know the number of
|
||||
rows, so we need to make two passes over the libs. */
|
||||
|
||||
for (nr_libs = 0, so = so_list_head; so; so = so->next)
|
||||
{
|
||||
if (so->so_name[0])
|
||||
{
|
||||
if (!header_done)
|
||||
{
|
||||
printf_unfiltered ("%-*s%-*s%-12s%s\n", addr_width, "From",
|
||||
addr_width, "To", "Syms Read",
|
||||
"Shared Object Library");
|
||||
header_done++;
|
||||
}
|
||||
|
||||
printf_unfiltered ("%-*s", addr_width,
|
||||
so->addr_high != 0
|
||||
? hex_string_custom (
|
||||
(LONGEST) so->addr_low,
|
||||
addr_width - 4)
|
||||
: "");
|
||||
printf_unfiltered ("%-*s", addr_width,
|
||||
so->addr_high != 0
|
||||
? hex_string_custom (
|
||||
(LONGEST) so->addr_high,
|
||||
addr_width - 4)
|
||||
: "");
|
||||
printf_unfiltered ("%-12s", so->symbols_loaded ? "Yes" : "No");
|
||||
printf_unfiltered ("%s\n", so->so_name);
|
||||
if (pattern && ! re_exec (so->so_name))
|
||||
continue;
|
||||
++nr_libs;
|
||||
}
|
||||
}
|
||||
if (so_list_head == NULL)
|
||||
|
||||
table_cleanup =
|
||||
make_cleanup_ui_out_table_begin_end (uiout, 4, nr_libs,
|
||||
"SharedLibraryTable");
|
||||
|
||||
/* The "- 1" is because ui_out adds one space between columns. */
|
||||
ui_out_table_header (uiout, addr_width - 1, ui_left, "from", "From");
|
||||
ui_out_table_header (uiout, addr_width - 1, ui_left, "to", "To");
|
||||
ui_out_table_header (uiout, 12 - 1, ui_left, "syms-read", "Syms Read");
|
||||
ui_out_table_header (uiout, 0, ui_noalign,
|
||||
"name", "Shared Object Library");
|
||||
|
||||
ui_out_table_body (uiout);
|
||||
|
||||
for (so = so_list_head; so; so = so->next)
|
||||
{
|
||||
printf_unfiltered (_("No shared libraries loaded at this time.\n"));
|
||||
struct cleanup *lib_cleanup;
|
||||
|
||||
if (! so->so_name[0])
|
||||
continue;
|
||||
if (pattern && ! re_exec (so->so_name))
|
||||
continue;
|
||||
|
||||
lib_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, "lib");
|
||||
|
||||
if (so->addr_high != 0)
|
||||
{
|
||||
ui_out_field_core_addr (uiout, "from", gdbarch, so->addr_low);
|
||||
ui_out_field_core_addr (uiout, "to", gdbarch, so->addr_high);
|
||||
}
|
||||
else
|
||||
{
|
||||
ui_out_field_skip (uiout, "from");
|
||||
ui_out_field_skip (uiout, "to");
|
||||
}
|
||||
|
||||
if (! ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ()))
|
||||
&& so->symbols_loaded
|
||||
&& !objfile_has_partial_symbols (so->objfile)
|
||||
&& !objfile_has_full_symbols (so->objfile))
|
||||
{
|
||||
so_missing_debug_info = 1;
|
||||
ui_out_field_string (uiout, "syms-read", "Yes (*)");
|
||||
}
|
||||
else
|
||||
ui_out_field_string (uiout, "syms-read",
|
||||
so->symbols_loaded ? "Yes" : "No");
|
||||
|
||||
ui_out_field_string (uiout, "name", so->so_name);
|
||||
|
||||
ui_out_text (uiout, "\n");
|
||||
|
||||
do_cleanups (lib_cleanup);
|
||||
}
|
||||
|
||||
do_cleanups (table_cleanup);
|
||||
|
||||
if (nr_libs == 0)
|
||||
{
|
||||
if (pattern)
|
||||
ui_out_message (uiout, 0,
|
||||
_("No shared libraries matched.\n"));
|
||||
else
|
||||
ui_out_message (uiout, 0,
|
||||
_("No shared libraries loaded at this time.\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (so_missing_debug_info)
|
||||
ui_out_message (uiout, 0,
|
||||
_("(*): Shared library is missing debugging information.\n"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -171,13 +171,6 @@ Dynamic symbol table reloading multiple times in one run is %s.\n"),
|
||||
value);
|
||||
}
|
||||
|
||||
/* If non-zero, gdb will notify the user when it is loading symbols
|
||||
from a file. This is almost always what users will want to have happen;
|
||||
but for programs with lots of dynamically linked libraries, the output
|
||||
can be more noise than signal. */
|
||||
|
||||
int print_symbol_loading = 1;
|
||||
|
||||
/* If non-zero, shared library symbols will be added automatically
|
||||
when the inferior is created, new libraries are loaded, or when
|
||||
attaching to the inferior. This is almost always what users will
|
||||
@ -989,12 +982,9 @@ symbol_file_add_with_addrs_or_offsets (bfd *abfd,
|
||||
deprecated_pre_add_symbol_hook (name);
|
||||
else
|
||||
{
|
||||
if (print_symbol_loading)
|
||||
{
|
||||
printf_unfiltered (_("Reading symbols from %s..."), name);
|
||||
wrap_here ("");
|
||||
gdb_flush (gdb_stdout);
|
||||
}
|
||||
printf_unfiltered (_("Reading symbols from %s..."), name);
|
||||
wrap_here ("");
|
||||
gdb_flush (gdb_stdout);
|
||||
}
|
||||
}
|
||||
syms_from_objfile (objfile, addrs, offsets, num_offsets,
|
||||
@ -1007,7 +997,7 @@ symbol_file_add_with_addrs_or_offsets (bfd *abfd,
|
||||
|
||||
if ((flags & OBJF_READNOW) || readnow_symbol_files)
|
||||
{
|
||||
if ((from_tty || info_verbose) && print_symbol_loading)
|
||||
if (from_tty || info_verbose)
|
||||
{
|
||||
printf_unfiltered (_("expanding to full symbols..."));
|
||||
wrap_here ("");
|
||||
@ -1049,15 +1039,12 @@ symbol_file_add_with_addrs_or_offsets (bfd *abfd,
|
||||
xfree (debugfile);
|
||||
}
|
||||
|
||||
if (!have_partial_symbols () && !have_full_symbols ()
|
||||
&& print_symbol_loading)
|
||||
if ((from_tty || info_verbose)
|
||||
&& !objfile_has_partial_symbols (objfile)
|
||||
&& !objfile_has_full_symbols (objfile))
|
||||
{
|
||||
wrap_here ("");
|
||||
printf_unfiltered (_("(no debugging symbols found)"));
|
||||
if (from_tty || info_verbose)
|
||||
printf_unfiltered ("...");
|
||||
else
|
||||
printf_unfiltered ("\n");
|
||||
printf_unfiltered (_("(no debugging symbols found)..."));
|
||||
wrap_here ("");
|
||||
}
|
||||
|
||||
@ -1066,10 +1053,7 @@ symbol_file_add_with_addrs_or_offsets (bfd *abfd,
|
||||
if (deprecated_post_add_symbol_hook)
|
||||
deprecated_post_add_symbol_hook ();
|
||||
else
|
||||
{
|
||||
if (print_symbol_loading)
|
||||
printf_unfiltered (_("done.\n"));
|
||||
}
|
||||
printf_unfiltered (_("done.\n"));
|
||||
}
|
||||
|
||||
/* We print some messages regardless of whether 'from_tty ||
|
||||
@ -2438,7 +2422,8 @@ reread_symbols (void)
|
||||
zero is OK since dbxread.c also does what it needs to do if
|
||||
objfile->global_psymbols.size is 0. */
|
||||
(*objfile->sf->sym_read) (objfile, 0);
|
||||
if (!have_partial_symbols () && !have_full_symbols ())
|
||||
if (!objfile_has_partial_symbols (objfile)
|
||||
&& !objfile_has_full_symbols (objfile))
|
||||
{
|
||||
wrap_here ("");
|
||||
printf_unfiltered (_("(no debugging symbols found)\n"));
|
||||
@ -4207,12 +4192,4 @@ the global debug-file directory prepended."),
|
||||
NULL,
|
||||
show_debug_file_directory,
|
||||
&setlist, &showlist);
|
||||
|
||||
add_setshow_boolean_cmd ("symbol-loading", no_class,
|
||||
&print_symbol_loading, _("\
|
||||
Set printing of symbol loading messages."), _("\
|
||||
Show printing of symbol loading messages."), NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
&setprintlist, &showprintlist);
|
||||
}
|
||||
|
@ -284,13 +284,6 @@ extern char *obconcat (struct obstack *obstackp, const char *, const char *,
|
||||
|
||||
/* Variables */
|
||||
|
||||
/* If non-zero, gdb will notify the user when it is loading symbols
|
||||
from a file. This is almost always what users will want to have happen;
|
||||
but for programs with lots of dynamically linked libraries, the output
|
||||
can be more noise than signal. */
|
||||
|
||||
extern int print_symbol_loading;
|
||||
|
||||
/* If non-zero, shared library symbols will be added automatically
|
||||
when the inferior is created, new libraries are loaded, or when
|
||||
attaching to the inferior. This is almost always what users will
|
||||
|
Loading…
x
Reference in New Issue
Block a user