forked from Imagelibrary/binutils-gdb
* 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:
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"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user