2009-10-12 Michael Snyder Elaborate "info record". * record.c (struct record_end_entry): New field 'insn_num'. (record_insn_count): New variable. (record_open): Initialize record_insn_count. (info_record_command): Display contents of record log as lowest, current, and highest instruction counts. (show_record_insn_number): Delete. (_initialize_record): Remove add_cmd show_record_insn_number. Index: record.c =================================================================== RCS file: /cvs/src/src/gdb/record.c,v retrieving revision 1.20 diff -u -p -r1.20 record.c --- record.c 27 Sep 2009 02:49:34 -0000 1.20 +++ record.c 12 Oct 2009 16:25:38 -0000 @@ -62,6 +62,7 @@ struct record_mem_entry struct record_end_entry { enum target_signal sigval; + unsigned long long insn_num; }; enum record_type @@ -100,6 +101,7 @@ static struct record_entry *record_arch_ static int record_stop_at_limit = 1; static int record_insn_max_num = DEFAULT_RECORD_INSN_MAX_NUM; static int record_insn_num = 0; +static unsigned long long record_insn_count; /* The target_ops of process record. */ static struct target_ops record_ops; @@ -322,6 +324,7 @@ record_arch_list_add_end (void) rec->next = NULL; rec->type = record_end; rec->u.end.sigval = TARGET_SIGNAL_0; + rec->u.end.insn_num = record_insn_count++; record_arch_list_add (rec); @@ -552,6 +555,7 @@ record_open (char *name, int from_tty) /* Reset */ record_insn_num = 0; + record_insn_count = 0; record_list = &record_first; record_list->next = NULL; } @@ -1269,16 +1273,6 @@ set_record_insn_max_num (char *args, int } } -/* Print the current index into the record log (number of insns recorded - so far). */ - -static void -show_record_insn_number (char *ignore, int from_tty) -{ - printf_unfiltered (_("Record instruction number is %d.\n"), - record_insn_num); -} - static struct cmd_list_element *record_cmdlist, *set_record_cmdlist, *show_record_cmdlist, *info_record_cmdlist; @@ -1299,7 +1293,31 @@ show_record_command (char *args, int fro static void info_record_command (char *args, int from_tty) { - cmd_show_list (info_record_cmdlist, from_tty, ""); + struct record_entry *p; + + /* Find entry for first actual instruction in the log. */ + for (p = record_first.next; + (p != NULL) && (p->type != record_end); + p = p->next) + ; + + /* Display instruction number for first instruction in the log. */ + if (p != NULL && p->type == record_end) + printf_filtered (_("Lowest recorded instruction number is %llu.\n"), + p->u.end.insn_num); + + /* If we are not at the end of the log, display where we are. */ + if (record_list->next != NULL && record_list->type == record_end) + printf_filtered (_("Current instruction number is %llu.\n"), + record_list->u.end.insn_num); + + /* Display instruction number for last instruction in the log. */ + printf_filtered (_("Highest recorded instruction number is %llu.\n"), + record_insn_count ? record_insn_count - 1 : 0); + + /* Display max log size. */ + printf_filtered (_("Max logged instructions is %d\n"), + record_insn_max_num); } void @@ -1369,7 +1387,4 @@ Set the maximum number of instructions t record/replay buffer. Zero means unlimited. Default is 200000."), set_record_insn_max_num, NULL, &set_record_cmdlist, &show_record_cmdlist); - add_cmd ("insn-number", class_obscure, show_record_insn_number, - _("Show the current number of instructions in the " - "record/replay buffer."), &info_record_cmdlist); }