From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14518 invoked by alias); 24 Jul 2012 16:12:00 -0000 Received: (qmail 14288 invoked by uid 22791); 24 Jul 2012 16:11:54 -0000 X-SWARE-Spam-Status: No, hits=-4.3 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL X-Spam-Check-By: sourceware.org Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 24 Jul 2012 16:11:36 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1Sthhs-0006wp-74 from Yao_Qi@mentor.com for gdb-patches@sourceware.org; Tue, 24 Jul 2012 09:11:32 -0700 Received: from SVR-ORW-FEM-05.mgc.mentorg.com ([147.34.97.43]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Tue, 24 Jul 2012 09:11:33 -0700 Received: from qiyao.dyndns.org.dyndns.org (147.34.91.1) by svr-orw-fem-05.mgc.mentorg.com (147.34.97.43) with Microsoft SMTP Server id 14.1.289.1; Tue, 24 Jul 2012 09:11:27 -0700 From: Yao Qi To: Subject: [PATCH 5/6] new add_setshow_boolean_cmd_with_notify and circular-trace-buffer. Date: Tue, 24 Jul 2012 16:12:00 -0000 Message-ID: <1343146252-22558-6-git-send-email-yao@codesourcery.com> In-Reply-To: <1343146252-22558-1-git-send-email-yao@codesourcery.com> References: <1343146252-22558-1-git-send-email-yao@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain 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: 2012-07/txt/msg00493.txt.bz2 Hi, Similar to previous patch, this patch is to add a new function add_setshow_boolean_cmd_with_notif, and register command "circular-trace-buffer" as an example to boolean command. A new test case is added for it. gdb: 2012-07-24 Yao Qi * cli/cli-decode.c (add_setshow_auto_boolean_cmd): Move 'boolean_enums' out. (add_setshow_boolean_cmd_with_notif): New. * command.h (extern void add_setshow_boolean_cmd): Declare it. * tracepoint.c (_initialize_tracepoint): Call add_setshow_boolean_cmd_with_notif. gdb/testsuite: 2012-07-24 Yao Qi * gdb.mi/mi-cmd-opt-changed.exp (test_command_option_change): Test for command 'circular-trace-buffer'. --- gdb/cli/cli-decode.c | 26 +++++++++++++++++++++++++- gdb/command.h | 10 ++++++++++ gdb/testsuite/gdb.mi/mi-cmd-opt-changed.exp | 17 +++++++++++++++++ gdb/tracepoint.c | 12 ++++++------ 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c index 5d314db..b8dfb6c 100644 --- a/gdb/cli/cli-decode.c +++ b/gdb/cli/cli-decode.c @@ -486,6 +486,7 @@ add_setshow_auto_boolean_cmd (char *name, c->enums = auto_boolean_enums; } +static const char *boolean_enums[] = { "on", "off", NULL }; /* Add element named NAME to both the set and show command LISTs (the list for set/show or some sublist thereof). CLASS is as in add_cmd. VAR is address of the variable which will contain the @@ -499,7 +500,6 @@ add_setshow_boolean_cmd (char *name, enum command_class class, int *var, struct cmd_list_element **set_list, struct cmd_list_element **show_list) { - static const char *boolean_enums[] = { "on", "off", NULL }; struct cmd_list_element *c; add_setshow_cmd_full (name, class, var_boolean, var, @@ -510,6 +510,30 @@ add_setshow_boolean_cmd (char *name, enum command_class class, int *var, c->enums = boolean_enums; } +/* Same as add_setshow_boolean_cmd except that observer 'command_option_change' + will be notified if command option is changed. */ + +void +add_setshow_boolean_cmd_with_notif (char *name, enum command_class class, + int *var, + const char *set_doc, const char *show_doc, + const char *help_doc, + cmd_sfunc_ftype *set_func, + show_value_ftype *show_func, + struct cmd_list_element **set_list, + struct cmd_list_element **show_list) +{ + struct cmd_list_element *c; + + add_setshow_cmd_full (name, class, var_boolean, var, + set_doc, show_doc, help_doc, + set_func, show_func, + set_list, show_list, + &c, NULL); + c->enums = boolean_enums; + c->notify_observer_p = 1; +} + /* Add element named NAME to both the set and show command LISTs (the list for set/show or some sublist thereof). */ void diff --git a/gdb/command.h b/gdb/command.h index 30c0eb2..c581997 100644 --- a/gdb/command.h +++ b/gdb/command.h @@ -277,6 +277,16 @@ extern void add_setshow_boolean_cmd (char *name, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list); +extern void add_setshow_boolean_cmd_with_notif (char *name, + enum command_class class, + int *var, + const char *set_doc, + const char *show_doc, + const char *help_doc, + cmd_sfunc_ftype *set_func, + show_value_ftype *show_func, + struct cmd_list_element **set_list, + struct cmd_list_element **show_list); extern void add_setshow_filename_cmd (char *name, enum command_class class, diff --git a/gdb/testsuite/gdb.mi/mi-cmd-opt-changed.exp b/gdb/testsuite/gdb.mi/mi-cmd-opt-changed.exp index a733017..bedc2d7 100644 --- a/gdb/testsuite/gdb.mi/mi-cmd-opt-changed.exp +++ b/gdb/testsuite/gdb.mi/mi-cmd-opt-changed.exp @@ -53,6 +53,23 @@ proc test_command_option_change { } { with_test_prefix "cmd option" { "\\&\"set scheduler-locking step\\\\n\"\r\n\\^done" \ "\"set scheduler-locking stepr\" no event" + + foreach command { "circular-trace-buffer" } { + + # The default value of each command option may be different, so we first + # set it to 'off', and this may or may not trigger MI notification. + mi_gdb_test "set ${command} off" ".*\\^done" "\"set ${command}\" warmup" + + foreach boolean_opt { "on" "off" } { + mi_gdb_test "set ${command} ${boolean_opt}" \ + ".*=option-changed,option=\"${command}\",value=\"${boolean_opt}\".*\\^done" \ + "\"set ${command} ${boolean_opt}\"" + } + mi_gdb_test "set ${command} off" \ + "\\&\"set ${command} off\\\\n\"\r\n\\^done" \ + "\"set ${command}\" no event" + } + mi_gdb_exit }} diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 8c8d4a8..d09faf8 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -5344,17 +5344,17 @@ trace data collected in the meantime."), &setlist, &showlist); - add_setshow_boolean_cmd ("circular-trace-buffer", no_class, - &circular_trace_buffer, _("\ + add_setshow_boolean_cmd_with_notif ("circular-trace-buffer", no_class, + &circular_trace_buffer, _("\ Set target's use of circular trace buffer."), _("\ Show target's use of circular trace buffer."), _("\ Use this to make the trace buffer into a circular buffer,\n\ which will discard traceframes (oldest first) instead of filling\n\ up and stopping the trace run."), - set_circular_trace_buffer, - NULL, - &setlist, - &showlist); + set_circular_trace_buffer, + NULL, + &setlist, + &showlist); add_setshow_string_cmd ("trace-user", class_trace, &trace_user, _("\ -- 1.7.7.6