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]

Re: [RFA] Expand "info record"


Thanks Michael.

With change:
 static struct target_ops record_ops;
@@ -338,7 +344,10 @@ record_list_release_following (struct re
     {
       rec = tmp->next;
       if (record_entry_release (tmp) == record_end)
+	{
 	record_insn_num--;
+	  record_insn_count--;
+	}
       tmp = rec;
     }
 }
@@ -367,7 +376,6 @@ record_list_release_first (void)
       /* tmp is now isolated, and can be deleted.  */
       if (record_entry_release (tmp) == record_end)
 	{
-	  record_insn_num--;
 	  break;	/* End loop at first record_end.  */
 	}
To:
 static struct target_ops record_ops;
@@ -338,7 +344,10 @@ record_list_release_following (struct re
     {
       rec = tmp->next;
       if (record_entry_release (tmp) == record_end)
+	{
 	  record_insn_num--;
+	  record_insn_count--;
+	}
       tmp = rec;
     }
 }
@@ -367,7 +376,6 @@ record_list_release_first (void)
       /* tmp is now isolated, and can be deleted.  */
       if (record_entry_release (tmp) == record_end)
- 	{
-	  record_insn_num--;
 	  break;	/* End loop at first record_end.  */
- 	}

Just some format change.

I am OK with this patch.

Thanks.
Hui


On Wed, Oct 21, 2009 at 09:31, Michael Snyder <msnyder@vmware.com> wrote:
> Pedro Alves wrote:
>>
>> On Tuesday 20 October 2009 23:25:30, Michael Snyder wrote:
>>
>>>>> + ? ? ?/* 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);
>>>>
>>>> Why the conditional subtraction?
>>>
>>> Because I don't want it to say "-1".
>>
>> Okay, that much is obvious, but how can you reach here
>> with record_insn_count == 0, given that you check if you
>> have a log at all a bit above?
>
> Maybe not -- but I'm a belt-and-suspenders guy.
> I don't believe in not checking for something just because
> it "can't happen". ?What if somebody changed the check above?
>
> [...]
>>
>> Can't we explicitly say that we're in recording/live vs replay
>> mode, or something?
>
> Yeah, you've convinced me. ?Thanks for the prodding,
> and please see new revision. ?I'll make that conditional
> go away too. ? ;-)
>
>
> 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.27
> diff -u -p -b -w -r1.27 record.c
> --- record.c ? ?20 Oct 2009 23:06:13 -0000 ? ? ?1.27
> +++ record.c ? ?21 Oct 2009 01:33:30 -0000
> @@ -91,6 +91,7 @@ struct record_reg_entry
> ?struct record_end_entry
> ?{
> ? enum target_signal sigval;
> + ?ULONGEST insn_num;
> ?};
>
> ?enum record_type
> @@ -166,8 +167,13 @@ static struct record_entry *record_arch_
>
> ?/* 1 ask user. 0 auto delete the last struct record_entry. ?*/
> ?static int record_stop_at_limit = 1;
> +/* Maximum allowed number of insns in execution log. ?*/
> ?static unsigned int record_insn_max_num = DEFAULT_RECORD_INSN_MAX_NUM;
> +/* Actual count of insns presently in execution log. ?*/
> ?static int record_insn_num = 0;
> +/* Count of insns logged so far (may be larger
> + ? than count of insns presently in execution log). ?*/
> +static ULONGEST record_insn_count;
>
> ?/* The target_ops of process record. ?*/
> ?static struct target_ops record_ops;
> @@ -338,7 +344,10 @@ record_list_release_following (struct re
> ? ? {
> ? ? ? rec = tmp->next;
> ? ? ? if (record_entry_release (tmp) == record_end)
> + ? ? ? {
> ? ? ? ?record_insn_num--;
> + ? ? ? ? record_insn_count--;
> + ? ? ? }
> ? ? ? tmp = rec;
> ? ? }
> ?}
> @@ -367,7 +376,6 @@ record_list_release_first (void)
> ? ? ? /* tmp is now isolated, and can be deleted. ?*/
> ? ? ? if (record_entry_release (tmp) == record_end)
> ? ? ? ?{
> - ? ? ? ? record_insn_num--;
> ? ? ? ? ?break; ? ? ? ?/* End loop at first record_end. ?*/
> ? ? ? ?}
>
> @@ -494,6 +502,7 @@ record_arch_list_add_end (void)
>
> ? rec = record_end_alloc ();
> ? rec->u.end.sigval = TARGET_SIGNAL_0;
> + ?rec->u.end.insn_num = ++record_insn_count;
>
> ? record_arch_list_add (rec);
>
> @@ -800,6 +809,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;
> ?}
> @@ -1458,8 +1468,8 @@ cmd_record_stop (char *args, int from_tt
> ? if (current_target.to_stratum == record_stratum)
> ? ? {
> ? ? ? unpush_target (&record_ops);
> - ? ? ?printf_unfiltered (_("Process record is stoped and all execution "
> - ? ? ? ? ? ? ? ? ? ? ? ? ? "log is deleted.\n"));
> + ? ? ?printf_unfiltered (_("Process record is stopped and all execution "
> + ? ? ? ? ? ? ? ? ? ? ? ? ? "logs are deleted.\n"));
> ? ? }
> ? else
> ? ? printf_unfiltered (_("Process record is not started.\n"));
> @@ -1481,16 +1491,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;
>
> @@ -1508,10 +1508,59 @@ show_record_command (char *args, int fro
> ? cmd_show_list (show_record_cmdlist, from_tty, "");
> ?}
>
> +/* Display some statistics about the execution log. ?*/
> +
> ?static void
> ?info_record_command (char *args, int from_tty)
> ?{
> - ?cmd_show_list (info_record_cmdlist, from_tty, "");
> + ?struct record_entry *p;
> +
> + ?if (current_target.to_stratum == record_stratum)
> + ? ?{
> + ? ? ?if (RECORD_IS_REPLAY)
> + ? ? ? printf_filtered (_("Replay mode:\n"));
> + ? ? ?else
> + ? ? ? printf_filtered (_("Record mode:\n"));
> +
> + ? ? ?/* Find entry for first actual instruction in the log. ?*/
> + ? ? ?for (p = record_first.next;
> + ? ? ? ? ?p != NULL && p->type != record_end;
> + ? ? ? ? ?p = p->next)
> + ? ? ? ;
> +
> + ? ? ?/* Do we have a log at all? ?*/
> + ? ? ?if (p != NULL && p->type == record_end)
> + ? ? ? {
> + ? ? ? ? /* Display instruction number for first instruction in the log.
> ?*/
> + ? ? ? ? printf_filtered (_("Lowest recorded instruction number is %s.\n"),
> + ? ? ? ? ? ? ? ? ? ? ? ? ?pulongest (p->u.end.insn_num));
> +
> + ? ? ? ? /* If in replay mode, display where we are in the log. ?*/
> + ? ? ? ? if (RECORD_IS_REPLAY)
> + ? ? ? ? ? printf_filtered (_("Current instruction number is %s.\n"),
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ?pulongest (record_list->u.end.insn_num));
> +
> + ? ? ? ? /* Display instruction number for last instruction in the log. ?*/
> + ? ? ? ? printf_filtered (_("Highest recorded instruction number is
> %s.\n"),
> + ? ? ? ? ? ? ? ? ? ? ? ? ?pulongest (record_insn_count));
> +
> + ? ? ? ? /* Display log count. ?*/
> + ? ? ? ? printf_filtered (_("Log contains %d instructions.\n"),
> + ? ? ? ? ? ? ? ? ? ? ? ? ?record_insn_num);
> + ? ? ? }
> + ? ? ?else
> + ? ? ? {
> + ? ? ? ? printf_filtered (_("No instructions have been logged.\n"));
> + ? ? ? }
> + ? ?}
> + ?else
> + ? ?{
> + ? ? ?printf_filtered (_("target record is not active.\n"));
> + ? ?}
> +
> + ?/* Display max log size. ?*/
> + ?printf_filtered (_("Max logged instructions is %d.\n"),
> + ? ? ? ? ? ? ? ? ?record_insn_max_num);
> ?}
>
> ?void
> @@ -1581,7 +1630,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]