From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13279 invoked by alias); 20 Oct 2009 22:31:56 -0000 Received: (qmail 13270 invoked by uid 22791); 20 Oct 2009 22:31:55 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from smtp-outbound-2.vmware.com (HELO smtp-outbound-2.vmware.com) (65.115.85.73) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 20 Oct 2009 22:31:51 +0000 Received: from mailhost4.vmware.com (mailhost4.vmware.com [10.16.67.124]) by smtp-outbound-2.vmware.com (Postfix) with ESMTP id DF92C3402E; Tue, 20 Oct 2009 15:31:49 -0700 (PDT) Received: from [10.20.94.141] (msnyder-server.eng.vmware.com [10.20.94.141]) by mailhost4.vmware.com (Postfix) with ESMTP id D44E8C9D02; Tue, 20 Oct 2009 15:31:49 -0700 (PDT) Message-ID: <4ADE38DA.8040803@vmware.com> Date: Tue, 20 Oct 2009 22:31:00 -0000 From: Michael Snyder User-Agent: Thunderbird 1.5.0.12 (X11/20080411) MIME-Version: 1.0 To: Pedro Alves CC: "gdb-patches@sourceware.org" , Hui Zhu Subject: Re: [RFA] Expand "info record" References: <4AD358E7.50009@vmware.com> <4AD4BF46.7050206@vmware.com> <4ADE1310.3030203@vmware.com> <200910202154.04566.pedro@codesourcery.com> In-Reply-To: <200910202154.04566.pedro@codesourcery.com> Content-Type: multipart/mixed; boundary="------------020902020909080407080508" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-10/txt/msg00481.txt.bz2 This is a multi-part message in MIME format. --------------020902020909080407080508 Content-Type: text/plain; charset=iso-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1095 Pedro Alves wrote: > On Tuesday 20 October 2009 20:44:16, Michael Snyder wrote: >> + unsigned long long insn_num; > > ULONGEST > >> + (p != NULL) && (p->type != record_end); > > Superfluous parens. > >> + printf_filtered (_("Lowest recorded instruction number is %llu.\n"), >> + p->u.end.insn_num); > > pulongest OK to all. >> + /* 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". > Given this post inc: >> + rec->u.end.insn_num = record_insn_count++; No, the post inc implies that the count is actually one greater than the last insn that used it. Yes? > The subtraction looks suspicious. > > Could you add a comment to record_insn_num and > record_insn_count's definitions explaining what they are and > how they're different, if it doesn't become obvious? Yep, done, see attached. Thanks! --------------020902020909080407080508 Content-Type: text/plain; name="info2.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="info2.txt" Content-length: 4877 Index: record.c =================================================================== RCS file: /cvs/src/src/gdb/record.c,v retrieving revision 1.25 diff -u -p -b -w -r1.25 record.c --- record.c 19 Oct 2009 09:51:41 -0000 1.25 +++ record.c 20 Oct 2009 22:19:19 -0000 @@ -71,6 +71,7 @@ struct record_reg_entry struct record_end_entry { enum target_signal sigval; + ULONGEST insn_num; }; enum record_type @@ -107,8 +108,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; @@ -279,7 +285,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; } } @@ -308,7 +317,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. */ } @@ -435,6 +443,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); @@ -665,6 +674,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; } @@ -1362,8 +1372,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")); @@ -1385,16 +1395,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; @@ -1412,10 +1412,48 @@ 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; + + /* 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 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 %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"), + record_insn_count ? + pulongest (record_insn_count - 1) : "0"); + + /* Display log count. */ + printf_filtered (_("Log contains %d instructions.\n"), record_insn_num); + } + else + { + printf_filtered (_("Process record is not active, or " + "there is no log yet.\n")); + } + + /* Display max log size. */ + printf_filtered (_("Max logged instructions is %d.\n"), + record_insn_max_num); } void @@ -1485,7 +1523,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); } --------------020902020909080407080508--