Fix 17170.
* maint.c (count_symtabs_and_blocks): Handle NULL current_program_space. (report_command_stats): Check global enabled flag in addition to recorded enabled flag. (make_command_stats_cleanup): Handle msg_type == 0, startup. testsuite/ * gdb.base/maint.exp: Update testing of per-command stats.
This commit is contained in:
parent
93c3fd0ec8
commit
b8b8facf90
|
@ -1,3 +1,11 @@
|
|||
2014-07-17 Doug Evans <dje@google.com>
|
||||
|
||||
* maint.c (count_symtabs_and_blocks): Handle NULL
|
||||
current_program_space.
|
||||
(report_command_stats): Check global enabled flag in addition to
|
||||
recorded enabled flag.
|
||||
(make_command_stats_cleanup): Handle msg_type == 0, startup.
|
||||
|
||||
2014-07-16 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* linux-nat.c (kill_callback): Use kill_lwp, not kill.
|
||||
|
|
38
gdb/maint.c
38
gdb/maint.c
|
@ -830,13 +830,19 @@ count_symtabs_and_blocks (int *nr_symtabs_ptr, int *nr_primary_symtabs_ptr,
|
|||
int nr_primary_symtabs = 0;
|
||||
int nr_blocks = 0;
|
||||
|
||||
ALL_SYMTABS (o, s)
|
||||
/* When collecting statistics during startup, this is called before
|
||||
pretty much anything in gdb has been initialized, and thus
|
||||
current_program_space may be NULL. */
|
||||
if (current_program_space != NULL)
|
||||
{
|
||||
++nr_symtabs;
|
||||
if (s->primary)
|
||||
ALL_SYMTABS (o, s)
|
||||
{
|
||||
++nr_primary_symtabs;
|
||||
nr_blocks += BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (s));
|
||||
++nr_symtabs;
|
||||
if (s->primary)
|
||||
{
|
||||
++nr_primary_symtabs;
|
||||
nr_blocks += BLOCKVECTOR_NBLOCKS (BLOCKVECTOR (s));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -856,7 +862,7 @@ report_command_stats (void *arg)
|
|||
struct cmd_stats *start_stats = (struct cmd_stats *) arg;
|
||||
int msg_type = start_stats->msg_type;
|
||||
|
||||
if (start_stats->time_enabled)
|
||||
if (start_stats->time_enabled && per_command_time)
|
||||
{
|
||||
long cmd_time = get_run_time () - start_stats->start_cpu_time;
|
||||
struct timeval now_wall_time, delta_wall_time, wait_time;
|
||||
|
@ -877,7 +883,7 @@ report_command_stats (void *arg)
|
|||
(long) delta_wall_time.tv_usec);
|
||||
}
|
||||
|
||||
if (start_stats->space_enabled)
|
||||
if (start_stats->space_enabled && per_command_space)
|
||||
{
|
||||
#ifdef HAVE_SBRK
|
||||
char *lim = (char *) sbrk (0);
|
||||
|
@ -894,7 +900,7 @@ report_command_stats (void *arg)
|
|||
#endif
|
||||
}
|
||||
|
||||
if (start_stats->symtab_enabled)
|
||||
if (start_stats->symtab_enabled && per_command_symtab)
|
||||
{
|
||||
int nr_symtabs, nr_primary_symtabs, nr_blocks;
|
||||
|
||||
|
@ -920,8 +926,14 @@ make_command_stats_cleanup (int msg_type)
|
|||
{
|
||||
struct cmd_stats *new_stat;
|
||||
|
||||
/* Early exit if we're not reporting any stats. */
|
||||
if (!per_command_time
|
||||
/* Early exit if we're not reporting any stats. It can be expensive to
|
||||
compute the pre-command values so don't collect them at all if we're
|
||||
not reporting stats. Alas this doesn't work in the startup case because
|
||||
we don't know yet whether we will be reporting the stats. For the
|
||||
startup case collect the data anyway (it should be cheap at this point),
|
||||
and leave it to the reporter to decide whether to print them. */
|
||||
if (msg_type != 0
|
||||
&& !per_command_time
|
||||
&& !per_command_space
|
||||
&& !per_command_symtab)
|
||||
return make_cleanup (null_cleanup, 0);
|
||||
|
@ -930,7 +942,7 @@ make_command_stats_cleanup (int msg_type)
|
|||
|
||||
new_stat->msg_type = msg_type;
|
||||
|
||||
if (per_command_space)
|
||||
if (msg_type == 0 || per_command_space)
|
||||
{
|
||||
#ifdef HAVE_SBRK
|
||||
char *lim = (char *) sbrk (0);
|
||||
|
@ -939,14 +951,14 @@ make_command_stats_cleanup (int msg_type)
|
|||
#endif
|
||||
}
|
||||
|
||||
if (per_command_time)
|
||||
if (msg_type == 0 || per_command_time)
|
||||
{
|
||||
new_stat->start_cpu_time = get_run_time ();
|
||||
gettimeofday (&new_stat->start_wall_time, NULL);
|
||||
new_stat->time_enabled = 1;
|
||||
}
|
||||
|
||||
if (per_command_symtab)
|
||||
if (msg_type == 0 || per_command_symtab)
|
||||
{
|
||||
int nr_symtabs, nr_primary_symtabs, nr_blocks;
|
||||
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2014-07-17 Doug Evans <dje@google.com>
|
||||
|
||||
* gdb.base/maint.exp: Update testing of per-command stats.
|
||||
|
||||
2014-07-16 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* gdb.trace/tfile.c: Include unistd.h and stdint.h.
|
||||
|
|
|
@ -130,10 +130,11 @@ gdb_expect {
|
|||
# tests here!!
|
||||
gdb_test_no_output "maint check-symtabs"
|
||||
|
||||
# Test per-command stats.
|
||||
gdb_test_no_output "maint set per-command on"
|
||||
|
||||
gdb_test "maint set per-command off" \
|
||||
gdb_test "pwd" \
|
||||
"Command execution time: \[0-9.\]+ \\(cpu\\), \[0-9.\]+ \\(wall\\)\[\r\n\]+Space used: $decimal \\(\\+$decimal for this command\\)\[\r\n\]+#symtabs: $decimal \\(\\+$decimal\\), #primary symtabs: $decimal \\(\\+$decimal\\), #blocks: $decimal \\(\\+$decimal\\)"
|
||||
gdb_test_no_output "maint set per-command off"
|
||||
|
||||
gdb_test "maint demangle" \
|
||||
"\"maintenance demangle\" takes an argument to demangle\\."
|
||||
|
|
Loading…
Reference in New Issue