From db0fec5c4881dc2e65eeba47cd574379c03a4cf4 Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Fri, 8 Nov 2013 10:43:23 -0800 Subject: [PATCH] Change "set debug symtab-create" to take a verbosity level. * NEWS: Mention that "set debug symtab-create" now accepts a verbosity level. * buildsym.c (end_symtab_from_static_block): Call set_symtab_primary to set the symtab's primary flag. * jit.c (finalize_symtab): Ditto. * mdebugread.c (psymtab_to_symtab_1): Ditto. * symfile.c (allocate_symtab): Only print debugging messages for symtab_create_debug levels 2 and higher. * symtab.c (symtab_create_debug): Change type to unsigned int. (set_symtab_primary): New function. (_initialize_symtab): Change "set debug symtab-create" to a zuinteger option. * symtab.h (set_symtab_primary): Declare. (symtab_create_debug): Update decl. doc/ * gdb.texinfo (Debugging Output): Update text for "set debug symtab-create". --- gdb/ChangeLog | 17 +++++++++++++++++ gdb/NEWS | 4 ++++ gdb/buildsym.c | 5 ++--- gdb/doc/ChangeLog | 5 +++++ gdb/doc/gdb.texinfo | 4 +++- gdb/jit.c | 2 +- gdb/mdebugread.c | 2 +- gdb/symfile.c | 4 +++- gdb/symtab.c | 34 ++++++++++++++++++++++++++-------- gdb/symtab.h | 5 ++++- 10 files changed, 66 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4d1c26d0167..2be522144e7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,20 @@ +2013-11-08 Doug Evans + + * NEWS: Mention that "set debug symtab-create" now accepts a + verbosity level. + * buildsym.c (end_symtab_from_static_block): Call set_symtab_primary + to set the symtab's primary flag. + * jit.c (finalize_symtab): Ditto. + * mdebugread.c (psymtab_to_symtab_1): Ditto. + * symfile.c (allocate_symtab): Only print debugging messages for + symtab_create_debug levels 2 and higher. + * symtab.c (symtab_create_debug): Change type to unsigned int. + (set_symtab_primary): New function. + (_initialize_symtab): Change "set debug symtab-create" to a + zuinteger option. + * symtab.h (set_symtab_primary): Declare. + (symtab_create_debug): Update decl. + 2013-11-08 Tom Tromey * aix-thread.c (aix_thread_detach): Update. diff --git a/gdb/NEWS b/gdb/NEWS index 779cf30f47c..fff16e0847f 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -116,6 +116,10 @@ show startup-with-shell trace-buffer-size -1" and "set height unlimited" is now an alias for "set height 0". +* The "set debug symtab-create" debugging option of GDB has been changed to + accept a verbosity level. 0 means "off", 1 provides basic debugging + output, and values of 2 or greater provides more verbose output. + * New command-line options --configuration Display the details of GDB configure-time options. diff --git a/gdb/buildsym.c b/gdb/buildsym.c index cee0cc54c88..68a667a9256 100644 --- a/gdb/buildsym.c +++ b/gdb/buildsym.c @@ -1231,8 +1231,7 @@ end_symtab_from_static_block (struct block *static_block, /* All symtabs for the main file and the subfiles share a blockvector, so we need to clear primary for everything but the main file. */ - - symtab->primary = 0; + set_symtab_primary (symtab, 0); } else { @@ -1280,7 +1279,7 @@ end_symtab_from_static_block (struct block *static_block, /* Set this for the main source file. */ if (symtab) { - symtab->primary = 1; + set_symtab_primary (symtab, 1); if (symtab->blockvector) { diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 3894647d262..8b1fee456d3 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2013-11-08 Doug Evans + + * gdb.texinfo (Debugging Output): Update text for + "set debug symtab-create". + 2013-11-07 Phil Muldoon * gdb.texinfo (Commands In Python): Document COMPLETE_EXPRESSION diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 6a1ed8d628b..5059243a330 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -22731,7 +22731,9 @@ Show the current state of symbol file debugging messages. @item set debug symtab-create @cindex symbol table creation Turns on or off display of debugging messages related to symbol table creation. -The default is off. +The default is 0 (off). +A value of 1 provides basic information. +A value greater than 1 provides more verbose information. @item show debug symtab-create Show the current state of symbol table creation debugging. @item set debug target diff --git a/gdb/jit.c b/gdb/jit.c index ba0be5e440e..3daa9faa0fc 100644 --- a/gdb/jit.c +++ b/gdb/jit.c @@ -665,7 +665,7 @@ finalize_symtab (struct gdb_symtab *stab, struct objfile *objfile) /* (begin, end) will contain the PC range this entire blockvector spans. */ - symtab->primary = 1; + set_symtab_primary (symtab, 1); BLOCKVECTOR_MAP (symtab->blockvector) = NULL; begin = stab->blocks->begin; end = stab->blocks->end; diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 5549610b171..0e6109af3cf 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -4334,7 +4334,7 @@ psymtab_to_symtab_1 (struct objfile *objfile, } pop_parse_stack (); - st->primary = 1; + set_symtab_primary (st, 1); sort_blocks (st); } diff --git a/gdb/symfile.c b/gdb/symfile.c index e0a234cd97c..13071897a6f 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -2891,7 +2891,9 @@ allocate_symtab (const char *filename, struct objfile *objfile) symtab->next = objfile->symtabs; objfile->symtabs = symtab; - if (symtab_create_debug) + /* This can be very verbose with lots of headers. + Only print at higher debug levels. */ + if (symtab_create_debug >= 2) { /* Be a bit clever with debugging messages, and don't print objfile every time, only when it changes. */ diff --git a/gdb/symtab.c b/gdb/symtab.c index 3660f1ab6c8..8eb4eb4251f 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -106,7 +106,7 @@ void _initialize_symtab (void); /* */ /* When non-zero, print debugging messages related to symtab creation. */ -int symtab_create_debug = 0; +unsigned int symtab_create_debug = 0; /* Non-zero if a file may be known by two different basenames. This is the uncommon case, and significantly slows down gdb. @@ -174,6 +174,22 @@ search_domain_name (enum search_domain e) } } +/* Set the primary field in SYMTAB. */ + +void +set_symtab_primary (struct symtab *symtab, int primary) +{ + symtab->primary = primary; + + if (symtab_create_debug && primary) + { + fprintf_unfiltered (gdb_stdlog, + "Created primary symtab %s for %s.\n", + host_address_to_string (symtab), + symtab_to_filename_for_display (symtab)); + } +} + /* See whether FILENAME matches SEARCH_NAME using the rule that we advertise to the user. (The manual's description of linespecs describes what we advertise). Returns true if they match, false @@ -5273,13 +5289,15 @@ one base name, and gdb will do file name comparisons more efficiently."), NULL, NULL, &setlist, &showlist); - add_setshow_boolean_cmd ("symtab-create", no_class, &symtab_create_debug, - _("Set debugging of symbol table creation."), - _("Show debugging of symbol table creation."), _("\ -When enabled, debugging messages are printed when building symbol tables."), - NULL, - NULL, - &setdebuglist, &showdebuglist); + add_setshow_zuinteger_cmd ("symtab-create", no_class, &symtab_create_debug, + _("Set debugging of symbol table creation."), + _("Show debugging of symbol table creation."), _("\ +When enabled (non-zero), debugging messages are printed when building\n\ +symbol tables. A value of 1 (one) normally provides enough information.\n\ +A value greater than 1 provides more verbose information."), + NULL, + NULL, + &setdebuglist, &showdebuglist); observer_attach_executable_changed (symtab_observer_executable_changed); } diff --git a/gdb/symtab.h b/gdb/symtab.h index 3d3c05caf30..7cc66673e75 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -941,6 +941,9 @@ struct symtab #define LINETABLE(symtab) (symtab)->linetable #define SYMTAB_PSPACE(symtab) (symtab)->objfile->pspace +/* Call this to set the "primary" field in struct symtab. */ +extern void set_symtab_primary (struct symtab *, int primary); + typedef struct symtab *symtab_ptr; DEF_VEC_P (symtab_ptr); @@ -1335,7 +1338,7 @@ void fixup_section (struct general_symbol_info *ginfo, struct objfile *lookup_objfile_from_block (const struct block *block); -extern int symtab_create_debug; +extern unsigned int symtab_create_debug; extern int basenames_may_differ; -- 2.30.2