From 6fc1c7733ea454110cfcb02be7d9b4b0f12eca91 Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Mon, 17 Sep 2012 08:42:14 +0000 Subject: [PATCH] gdb/ * cli/cli-decode.c (add_setshow_zuinteger_unlimited_cmd): New. Update comment to add_setshow_integer_cmd. * cli/cli-setshow.c (do_set_command): Handle case 'var_zuinteger_unlimited'. (do_show_command): Likewise. * cli/cli-cmds.c (init_cmds): Call add_setshow_zuinteger_unlimited_cmd for command 'remotetimeout'. * command.h (enum var_types): New zuinteger_unlimited. Update comment to var_integer. * source.c (_initialize_source): Call add_setshow_zuinteger_unlimited_cmd for command 'set listsize'. gdb/doc/ * gdb.texinfo (List): Describe the meaning of 0 and -1 in 'set listsize'. gdb/testsuite/ * gdb.base/list.exp (set_listsize): Don't set arg to "unlimited" when it is less than 0. --- gdb/ChangeLog | 14 ++++++++++++++ gdb/cli/cli-cmds.c | 9 +++++---- gdb/cli/cli-decode.c | 22 +++++++++++++++++++++- gdb/cli/cli-setshow.c | 30 +++++++++++++++++++++++++++++- gdb/command.h | 18 +++++++++++++++++- gdb/doc/ChangeLog | 5 +++++ gdb/doc/gdb.texinfo | 2 ++ gdb/source.c | 8 ++++---- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.base/list.exp | 2 +- 10 files changed, 103 insertions(+), 12 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1cc4babb32..f73ad65869 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2012-09-17 Yao Qi + + * cli/cli-decode.c (add_setshow_zuinteger_unlimited_cmd): New. + Update comment to add_setshow_integer_cmd. + * cli/cli-setshow.c (do_set_command): Handle case + 'var_zuinteger_unlimited'. + (do_show_command): Likewise. + * cli/cli-cmds.c (init_cmds): Call add_setshow_zuinteger_unlimited_cmd + for command 'remotetimeout'. + * command.h (enum var_types): New zuinteger_unlimited. Update comment + to var_integer. + * source.c (_initialize_source): Call add_setshow_zuinteger_unlimited_cmd + for command 'set listsize'. + 2012-09-17 Siddhesh Poyarekar * infrun.c (restore_infcall_suspend_state): Eliminate single-use diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index d3473d5195..2e988045d0 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -1826,14 +1826,15 @@ is displayed."), show_remote_debug, &setdebuglist, &showdebuglist); - add_setshow_integer_cmd ("remotetimeout", no_class, &remote_timeout, _("\ + add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class, + &remote_timeout, _("\ Set timeout limit to wait for target to respond."), _("\ Show timeout limit to wait for target to respond."), _("\ This value is used to set the time limit for gdb to wait for a response\n\ from the target."), - NULL, - show_remote_timeout, - &setlist, &showlist); + NULL, + show_remote_timeout, + &setlist, &showlist); add_prefix_cmd ("debug", no_class, set_debug, _("Generic command for setting gdb debugging flags"), diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c index 4752a829ed..6e0f0dee47 100644 --- a/gdb/cli/cli-decode.c +++ b/gdb/cli/cli-decode.c @@ -632,7 +632,8 @@ add_setshow_optional_filename_cmd (char *name, enum command_class class, /* 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 - value. SET_DOC and SHOW_DOC are the documentation strings. */ + value. SET_DOC and SHOW_DOC are the documentation strings. This + function is only used in Python API. Please don't use it elsewhere. */ void add_setshow_integer_cmd (char *name, enum command_class class, int *var, @@ -692,6 +693,25 @@ add_setshow_zinteger_cmd (char *name, enum command_class class, NULL, NULL); } +void +add_setshow_zuinteger_unlimited_cmd (char *name, + enum command_class class, + unsigned 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) +{ + add_setshow_cmd_full (name, class, var_zuinteger_unlimited, var, + set_doc, show_doc, help_doc, + set_func, show_func, + set_list, show_list, + NULL, 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 diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c index 89e095a953..9d8cb2ea51 100644 --- a/gdb/cli/cli-setshow.c +++ b/gdb/cli/cli-setshow.c @@ -379,6 +379,26 @@ do_set_command (char *arg, int from_tty, struct cmd_list_element *c) } } break; + case var_zuinteger_unlimited: + { + LONGEST val; + + if (arg == NULL) + error_no_arg (_("integer to set it to.")); + val = parse_and_eval_long (arg); + + if (val >= INT_MAX) + error (_("integer %s out of range"), plongest (val)); + else if (val < -1) + error (_("only -1 is allowed to set as unlimited")); + + if (*(int *) c->var != val) + { + *(int *) c->var = val; + option_changed = 1; + } + } + break; default: error (_("gdb internal error: bad var_type in do_setshow_command")); } @@ -478,6 +498,7 @@ do_set_command (char *arg, int from_tty, struct cmd_list_element *c) break; case var_integer: case var_zinteger: + case var_zuinteger_unlimited: { char s[64]; @@ -562,7 +583,14 @@ do_show_command (char *arg, int from_tty, struct cmd_list_element *c) else fprintf_filtered (stb, "%d", *(int *) c->var); break; - + case var_zuinteger_unlimited: + { + if (*(int *) c->var == -1) + fputs_filtered ("unlimited", stb); + else + fprintf_filtered (stb, "%u", *(int *) c->var); + } + break; default: error (_("gdb internal error: bad var_type in do_show_command")); } diff --git a/gdb/command.h b/gdb/command.h index 88895bb04d..b88bd8b7e8 100644 --- a/gdb/command.h +++ b/gdb/command.h @@ -77,7 +77,8 @@ typedef enum var_types /* Like var_uinteger but signed. *VAR is an int. The user can type 0 to mean "unlimited", which is stored in *VAR as - INT_MAX. */ + INT_MAX. The only remaining use of it is the Python API. + Don't use it elsewhere. */ var_integer, /* String which the user enters with escapes (e.g. the user types @@ -99,6 +100,9 @@ typedef enum var_types /* ZeroableUnsignedInteger. *VAR is an unsigned int. Zero really means zero. */ var_zuinteger, + /* ZeroableUnsignedInteger with unlimited value. *VAR is an unsigned + int, but its range is [0, INT_MAX]. -1 stands for unlimited. */ + var_zuinteger_unlimited, /* Enumerated type. Can only have one of the specified values. *VAR is a char pointer to the name of the element that we find. */ @@ -354,6 +358,18 @@ extern void add_setshow_zuinteger_cmd (char *name, struct cmd_list_element **set_list, struct cmd_list_element **show_list); +extern void + add_setshow_zuinteger_unlimited_cmd (char *name, + enum command_class class, + unsigned 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); + /* Do a "show" command for each thing on a command list. */ extern void cmd_show_list (struct cmd_list_element *, int, char *); diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 17ab90012a..adcd4ff7b2 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2012-09-17 Yao Qi + + * gdb.texinfo (List): Describe the meaning of 0 and -1 in + 'set listsize'. + 2012-09-13 Jan Kratochvil Eli Zaretskii diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 2d49e13509..dc8860af02 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -6706,6 +6706,8 @@ the @code{list} command. You can change this using @code{set listsize}: @item set listsize @var{count} Make the @code{list} command display @var{count} source lines (unless the @code{list} argument explicitly specifies some other number). +Setting @var{count} to -1 means there's no limit and 0 means suppress +display of source lines. @kindex show listsize @item show listsize diff --git a/gdb/source.c b/gdb/source.c index 0ff0782d45..31e104fe40 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -1965,12 +1965,12 @@ The matching line number is also stored as the value of \"$_\".")); add_com_alias ("?", "reverse-search", class_files, 0); } - add_setshow_integer_cmd ("listsize", class_support, &lines_to_list, _("\ + add_setshow_zuinteger_unlimited_cmd ("listsize", class_support, + &lines_to_list, _("\ Set number of source lines gdb will list by default."), _("\ Show number of source lines gdb will list by default."), NULL, - NULL, - show_lines_to_list, - &setlist, &showlist); + NULL, show_lines_to_list, + &setlist, &showlist); add_cmd ("substitute-path", class_files, set_substitute_path_command, _("\ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 7fa1747275..b458aba487 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-09-17 Yao Qi + + * gdb.base/list.exp (set_listsize): Don't set arg to "unlimited" + when it is less than 0. + 2012-09-17 Jan Kratochvil PR 14119 diff --git a/gdb/testsuite/gdb.base/list.exp b/gdb/testsuite/gdb.base/list.exp index 6b5b207d4b..9acb1c37ce 100644 --- a/gdb/testsuite/gdb.base/list.exp +++ b/gdb/testsuite/gdb.base/list.exp @@ -62,7 +62,7 @@ proc set_listsize { arg } { if [gdb_test "set listsize $arg" ".*" "setting listsize to $arg #$set_listsize_count"] { return 0; } - if { $arg <= 0 } { + if { $arg < 0 } { set arg "unlimited"; } -- 2.34.1