This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFA] Expand "info record"


Hi Hui,

This patch expands on the output of "info record" so that it looks like this:

(gdb) info rec
Lowest  recorded instruction number is 0.
Current instruction number is 46.
Highest recorded instruction number is 1016.
Max logged instructions is 200000


What do you think? Michael

2009-10-12  Michael Snyder  <msnyder@vmware.com>
	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);
 }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]