From patchwork Fri Nov 11 18:18:45 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Burgess X-Patchwork-Id: 17415 Received: (qmail 105195 invoked by alias); 11 Nov 2016 18:19:10 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 105079 invoked by uid 89); 11 Nov 2016 18:19:10 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL, BAYES_00, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=no version=3.3.2 spammy=loose, radix, gdb_assert, logged X-HELO: mail-wm0-f42.google.com Received: from mail-wm0-f42.google.com (HELO mail-wm0-f42.google.com) (74.125.82.42) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 11 Nov 2016 18:19:01 +0000 Received: by mail-wm0-f42.google.com with SMTP id f82so106295680wmf.1 for ; Fri, 11 Nov 2016 10:19:00 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+R9r7Zxz5xbYpUYH1hcwjKYgpv7p1dBNERvcXiWd2pc=; b=ilatuV+gLRONhOPATczh1HMpL9xOkkPY0T/8xU5LbakMrQD3WKDxTjmv8OClyM5mLS lvpd89/fRFyXbe6pOInYdgj/IyFVZYoi1noKPPhTEvzh+xxYeb8PW5qeChR+moSTROdh 6VezNslQDknr++itAnkrTUsvPuVEdII8uDrbRahvGu4x1O495AhbYDYZ28ll4h9XPpqh gbZaObm7hOrmZf5oCG/HmzS0fcKiFcOdU4p/I3q53kArON+Aqdqbjk4os/Z4Y768kKaR kRnb6SYsRsQsYGaUxuZ8XViu8vYq2BR7ywQwtqTzWFOWuwmgHj5J6GhtU7NKZki0c1dW zlRA== X-Gm-Message-State: ABUngvcgu4CWsCnOQfmp16YhoSvrP7zcchaXO0iNXeKjJddiSIeV0uyVnlLzKvkcd+pRTw== X-Received: by 10.28.232.213 with SMTP id f82mr31538230wmi.85.1478888338862; Fri, 11 Nov 2016 10:18:58 -0800 (PST) Received: from localhost (host86-164-199-110.range86-164.btcentralplus.com. [86.164.199.110]) by smtp.gmail.com with ESMTPSA id i15sm12765740wjs.16.2016.11.11.10.18.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 11 Nov 2016 10:18:58 -0800 (PST) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Andrew Burgess Subject: [PATCH 2/2] gdb: Simplify variable set hooks Date: Fri, 11 Nov 2016 18:18:45 +0000 Message-Id: <1478888325-32039-3-git-send-email-andrew.burgess@embecosm.com> In-Reply-To: <1478888325-32039-1-git-send-email-andrew.burgess@embecosm.com> References: <1478888325-32039-1-git-send-email-andrew.burgess@embecosm.com> X-IsSubscribed: yes Now the the variable set-hook mechanism supports automatic rollback of the variable value if the set-hook throws an error, simplify existing cases where we manually performed roll-back within the set-hook. gdb/ChangeLog: * dcache.c (set_dcache_size): Don't change value on error path. (set_dcache_line_size): Likewise. * record.c (record_insn_history_size_setshow_var): Remove. (record_call_history_size_setshow_var): Remove. (validate_history_size): Simplify to just the error check. (set_record_insn_history_size): Update call to validate_history_size. (set_record_call_history_size): Likewise. (_initialize_record): Remove use of *_setshow_var. * symtab.c (new_symbol_cache_size): Remove. (symbol_cache_size): Update comment. (set_symbol_cache_size_handler): Simplify error check. (_initialize_symtab): Remove use of new_symbol_cache_size. * valprint.c (input_radix_1): Remove. (set_input_radix): Remove use of input_radix_1. (set_input_radix_1): Likewise. (output_radix_1): Remove. (set_output_radix): Remove use of output_radix_1. (set_output_radix_1): Likewise. (_initialize_valprint): Remove use of output_radix_1 and input_radix_1. * value.c (set_max_value_size): Simplify error case. gdb/testsuite/ChangeLog: * gdb.base/max-value-size.exp: Update expected output. --- gdb/ChangeLog | 25 +++++++++++++++++++ gdb/dcache.c | 12 +++------ gdb/record.c | 41 ++++++------------------------- gdb/symtab.c | 23 ++++------------- gdb/testsuite/ChangeLog | 4 +++ gdb/testsuite/gdb.base/max-value-size.exp | 4 +-- gdb/valprint.c | 31 ++++++----------------- gdb/value.c | 6 +---- 8 files changed, 56 insertions(+), 90 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3cb115f..d142b75 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,30 @@ 2016-11-11 Andrew Burgess + * dcache.c (set_dcache_size): Don't change value on error path. + (set_dcache_line_size): Likewise. + * record.c (record_insn_history_size_setshow_var): Remove. + (record_call_history_size_setshow_var): Remove. + (validate_history_size): Simplify to just the error check. + (set_record_insn_history_size): Update call to + validate_history_size. + (set_record_call_history_size): Likewise. + (_initialize_record): Remove use of *_setshow_var. + * symtab.c (new_symbol_cache_size): Remove. + (symbol_cache_size): Update comment. + (set_symbol_cache_size_handler): Simplify error check. + (_initialize_symtab): Remove use of new_symbol_cache_size. + * valprint.c (input_radix_1): Remove. + (set_input_radix): Remove use of input_radix_1. + (set_input_radix_1): Likewise. + (output_radix_1): Remove. + (set_output_radix): Remove use of output_radix_1. + (set_output_radix_1): Likewise. + (_initialize_valprint): Remove use of output_radix_1 and + input_radix_1. + * value.c (set_max_value_size): Simplify error case. + +2016-11-11 Andrew Burgess + * cli/cli-setshow.c: Add exceptions.h include. (do_set_comment): When installing a settings new value, don't loose the previous value until the set-hook has been called. If diff --git a/gdb/dcache.c b/gdb/dcache.c index cb43068..053b1de 100644 --- a/gdb/dcache.c +++ b/gdb/dcache.c @@ -652,10 +652,7 @@ set_dcache_size (char *args, int from_tty, struct cmd_list_element *c) { if (dcache_size == 0) - { - dcache_size = DCACHE_DEFAULT_SIZE; - error (_("Dcache size must be greater than 0.")); - } + error (_("Dcache size must be greater than 0.")); target_dcache_invalidate (); } @@ -665,11 +662,8 @@ set_dcache_line_size (char *args, int from_tty, { if (dcache_line_size < 2 || (dcache_line_size & (dcache_line_size - 1)) != 0) - { - unsigned d = dcache_line_size; - dcache_line_size = DCACHE_DEFAULT_LINE_SIZE; - error (_("Invalid dcache line size: %u (must be power of 2)."), d); - } + error (_("Invalid dcache line size: %u (must be power of 2)."), + dcache_line_size); target_dcache_invalidate (); } diff --git a/gdb/record.c b/gdb/record.c index 34ebd1b..6b0811b 100644 --- a/gdb/record.c +++ b/gdb/record.c @@ -35,18 +35,9 @@ unsigned int record_debug = 0; /* The number of instructions to print in "record instruction-history". */ static unsigned int record_insn_history_size = 10; -/* The variable registered as control variable in the "record - instruction-history" command. Necessary for extra input - validation. */ -static unsigned int record_insn_history_size_setshow_var; - /* The number of functions to print in "record function-call-history". */ static unsigned int record_call_history_size = 10; -/* The variable registered as control variable in the "record - call-history" command. Necessary for extra input validation. */ -static unsigned int record_call_history_size_setshow_var; - struct cmd_list_element *record_cmdlist = NULL; struct cmd_list_element *record_goto_cmdlist = NULL; struct cmd_list_element *set_record_cmdlist = NULL; @@ -690,23 +681,13 @@ cmd_record_call_history (char *arg, int from_tty) /* Helper for "set record instruction-history-size" and "set record function-call-history-size" input validation. COMMAND_VAR is the - variable registered in the command as control variable. *SETTING - is the real setting the command allows changing. */ + variable registered in the command as control variable. */ static void -validate_history_size (unsigned int *command_var, unsigned int *setting) +validate_history_size (unsigned int command_var) { - if (*command_var != UINT_MAX && *command_var > INT_MAX) - { - unsigned int new_value = *command_var; - - /* Restore previous value. */ - *command_var = *setting; - error (_("integer %u out of range"), new_value); - } - - /* Commit new value. */ - *setting = *command_var; + if (command_var != UINT_MAX && command_var > INT_MAX) + error (_("integer %u out of range"), command_var); } /* Called by do_setshow_command. We only want values in the @@ -717,8 +698,7 @@ static void set_record_insn_history_size (char *args, int from_tty, struct cmd_list_element *c) { - validate_history_size (&record_insn_history_size_setshow_var, - &record_insn_history_size); + validate_history_size (record_insn_history_size); } /* Called by do_setshow_command. We only want values in the @@ -729,8 +709,7 @@ static void set_record_call_history_size (char *args, int from_tty, struct cmd_list_element *c) { - validate_history_size (&record_call_history_size_setshow_var, - &record_call_history_size); + validate_history_size (record_call_history_size); } /* Provide a prototype to silence -Wmissing-prototypes. */ @@ -750,7 +729,7 @@ _initialize_record (void) &showdebuglist); add_setshow_uinteger_cmd ("instruction-history-size", no_class, - &record_insn_history_size_setshow_var, _("\ + &record_insn_history_size, _("\ Set number of instructions to print in \"record instruction-history\"."), _("\ Show number of instructions to print in \"record instruction-history\"."), _("\ A size of \"unlimited\" means unlimited instructions. The default is 10."), @@ -758,7 +737,7 @@ A size of \"unlimited\" means unlimited instructions. The default is 10."), &set_record_cmdlist, &show_record_cmdlist); add_setshow_uinteger_cmd ("function-call-history-size", no_class, - &record_call_history_size_setshow_var, _("\ + &record_call_history_size, _("\ Set number of function to print in \"record function-call-history\"."), _("\ Show number of functions to print in \"record function-call-history\"."), _("\ A size of \"unlimited\" means unlimited lines. The default is 10."), @@ -855,8 +834,4 @@ from the first argument.\n\ The number of functions to print can be defined with \"set record \ function-call-history-size\"."), &record_cmdlist); - - /* Sync command control variables. */ - record_insn_history_size_setshow_var = record_insn_history_size; - record_call_history_size_setshow_var = record_call_history_size; } diff --git a/gdb/symtab.c b/gdb/symtab.c index 430bc8d..b5352fc 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -212,12 +212,7 @@ unsigned int symtab_create_debug = 0; /* When non-zero, print debugging messages related to symbol lookup. */ unsigned int symbol_lookup_debug = 0; -/* The size of the cache is staged here. */ -static unsigned int new_symbol_cache_size = DEFAULT_SYMBOL_CACHE_SIZE; - -/* The current value of the symbol cache size. - This is saved so that if the user enters a value too big we can restore - the original value from here. */ +/* The current value of the symbol cache size. */ static unsigned int symbol_cache_size = DEFAULT_SYMBOL_CACHE_SIZE; /* Non-zero if a file may be known by two different basenames. @@ -1285,17 +1280,9 @@ static void set_symbol_cache_size_handler (char *args, int from_tty, struct cmd_list_element *c) { - if (new_symbol_cache_size > MAX_SYMBOL_CACHE_SIZE) - { - /* Restore the previous value. - This is the value the "show" command prints. */ - new_symbol_cache_size = symbol_cache_size; - - error (_("Symbol cache size is too large, max is %u."), - MAX_SYMBOL_CACHE_SIZE); - } - symbol_cache_size = new_symbol_cache_size; - + if (symbol_cache_size > MAX_SYMBOL_CACHE_SIZE) + error (_("Symbol cache size is too large, max is %u."), + MAX_SYMBOL_CACHE_SIZE); set_symbol_cache_size (symbol_cache_size); } @@ -6222,7 +6209,7 @@ When enabled (non-zero), symbol lookups are logged."), &setdebuglist, &showdebuglist); add_setshow_zuinteger_cmd ("symbol-cache-size", no_class, - &new_symbol_cache_size, + &symbol_cache_size, _("Set the size of the symbol cache."), _("Show the size of the symbol cache."), _("\ The size of the symbol cache.\n\ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 01f737e..14bf74d 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2016-11-11 Andrew Burgess + * gdb.base/max-value-size.exp: Update expected output. + +2016-11-11 Andrew Burgess + * gdb.base/dcache-line-set-error.exp: New file. 2016-11-09 Pedro Alves diff --git a/gdb/testsuite/gdb.base/max-value-size.exp b/gdb/testsuite/gdb.base/max-value-size.exp index 63a97a0..e179f2f 100644 --- a/gdb/testsuite/gdb.base/max-value-size.exp +++ b/gdb/testsuite/gdb.base/max-value-size.exp @@ -90,8 +90,8 @@ set_and_check_max_value_size "unlimited" # Check that we can't set the maximum size stupidly low. gdb_test "set max-value-size 1" \ - "max-value-size set too low, increasing to \[0-9\]+ bytes" + "max-value-size 1 bytes is too low" gdb_test "set max-value-size 0" \ - "max-value-size set too low, increasing to \[0-9\]+ bytes" + "max-value-size 0 bytes is too low" gdb_test "set max-value-size -5" \ "only -1 is allowed to set as unlimited" diff --git a/gdb/valprint.c b/gdb/valprint.c index c0cdb34..9f8b233 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -2955,11 +2955,6 @@ val_print_string (struct type *elttype, const char *encoding, } -/* The 'set input-radix' command writes to this auxiliary variable. - If the requested radix is valid, INPUT_RADIX is updated; otherwise, - it is left unchanged. */ - -static unsigned input_radix_1 = 10; /* Validate an input or output radix setting, and make sure the user knows what they really did here. Radix setting is confusing, e.g. @@ -2968,7 +2963,7 @@ static unsigned input_radix_1 = 10; static void set_input_radix (char *args, int from_tty, struct cmd_list_element *c) { - set_input_radix_1 (from_tty, input_radix_1); + set_input_radix_1 (from_tty, input_radix); } static void @@ -2982,12 +2977,9 @@ set_input_radix_1 (int from_tty, unsigned radix) (FIXME). */ if (radix < 2) - { - input_radix_1 = input_radix; - error (_("Nonsense input radix ``decimal %u''; input radix unchanged."), - radix); - } - input_radix_1 = input_radix = radix; + error (_("Nonsense input radix ``decimal %u''; input radix unchanged."), + radix); + input_radix = radix; if (from_tty) { printf_filtered (_("Input radix now set to " @@ -2996,16 +2988,10 @@ set_input_radix_1 (int from_tty, unsigned radix) } } -/* The 'set output-radix' command writes to this auxiliary variable. - If the requested radix is valid, OUTPUT_RADIX is updated, - otherwise, it is left unchanged. */ - -static unsigned output_radix_1 = 10; - static void set_output_radix (char *args, int from_tty, struct cmd_list_element *c) { - set_output_radix_1 (from_tty, output_radix_1); + set_output_radix_1 (from_tty, output_radix); } static void @@ -3025,12 +3011,11 @@ set_output_radix_1 (int from_tty, unsigned radix) user_print_options.output_format = 'o'; /* octal */ break; default: - output_radix_1 = output_radix; error (_("Unsupported output radix ``decimal %u''; " "output radix unchanged."), radix); } - output_radix_1 = output_radix = radix; + output_radix = radix; if (from_tty) { printf_filtered (_("Output radix now set to " @@ -3208,7 +3193,7 @@ Show printing of symbol names when printing pointers."), show_symbol_print, &setprintlist, &showprintlist); - add_setshow_zuinteger_cmd ("input-radix", class_support, &input_radix_1, + add_setshow_zuinteger_cmd ("input-radix", class_support, &input_radix, _("\ Set default input radix for entering numbers."), _("\ Show default input radix for entering numbers."), NULL, @@ -3216,7 +3201,7 @@ Show default input radix for entering numbers."), NULL, show_input_radix, &setlist, &showlist); - add_setshow_zuinteger_cmd ("output-radix", class_support, &output_radix_1, + add_setshow_zuinteger_cmd ("output-radix", class_support, &output_radix, _("\ Set default output radix for printing of values."), _("\ Show default output radix for printing of values."), NULL, diff --git a/gdb/value.c b/gdb/value.c index 62c5e37..11ce828 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -987,11 +987,7 @@ set_max_value_size (char *args, int from_tty, gdb_assert (max_value_size == -1 || max_value_size >= 0); if (max_value_size > -1 && max_value_size < MIN_VALUE_FOR_MAX_VALUE_SIZE) - { - max_value_size = MIN_VALUE_FOR_MAX_VALUE_SIZE; - error (_("max-value-size set too low, increasing to %d bytes"), - max_value_size); - } + error (_("max-value-size %d bytes is too low"), max_value_size); } /* Implement the "show max-value-size" command. */