aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog11
-rw-r--r--gdb/NEWS7
-rw-r--r--gdb/doc/ChangeLog5
-rw-r--r--gdb/doc/gdb.texinfo9
-rw-r--r--gdb/infcmd.c33
-rw-r--r--gdb/testsuite/ChangeLog5
-rw-r--r--gdb/testsuite/gdb.base/finish.exp16
-rw-r--r--gdb/valprint.c3
-rw-r--r--gdb/valprint.h3
9 files changed, 87 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index f122f5b..16c1d0c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,14 @@
+2019-05-29 Tom Tromey <tromey@adacore.com>
+
+ * NEWS: Add entry.
+ * infcmd.c (print_return_value_1): Handle finish_print
+ option.
+ (show_print_finish): New function.
+ (_initialize_infcmd): Add "set/show print finish" commands.
+ * valprint.c (user_print_options): Initialize new member.
+ * valprint.h (struct value_print_options) <finish_print>: New
+ member.
+
2019-05-28 Tom Tromey <tromey@adacore.com>
* ada-lang.c (ada_remove_Xbn_suffix)
diff --git a/gdb/NEWS b/gdb/NEWS
index 6546b72..ab582c0 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -39,6 +39,13 @@ show may-call-functions
an error when a command (such as print expression) calls a function
in the program.
+set print finish [on|off]
+show print finish
+ This controls whether the `finish' command will display the value
+ that is returned by the current function. When `off', the value is
+ still entered into the value history, but it is not printed. The
+ default is `on'.
+
set print max-depth
show print max-depth
Allows deeply nested structures to be simplified when printing by
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index c01ef29..c075d74 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,3 +1,8 @@
+2019-05-29 Tom Tromey <tromey@adacore.com>
+
+ * gdb.texinfo (Continuing and Stepping): Document new
+ commands.
+
2019-05-22 Alan Hayward <alan.hayward@arm.com>
* gdb.texinfo (Shell Commands): Add debugredirect.
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 3c4535e..f2d8710 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -5599,6 +5599,15 @@ abbreviated as @code{fin}.
Contrast this with the @code{return} command (@pxref{Returning,
,Returning from a Function}).
+@kindex set print finish
+@kindex show print finish
+@item set print finish @r{[}on|off@r{]}
+@itemx show print finish
+By default the @code{finish} command will show the value that is
+returned by the function. This can be disabled using @code{set print
+finish off}. When disabled, the value is still entered into the value
+history (@pxref{Value History}), but not displayed.
+
@kindex until
@kindex u @r{(@code{until})}
@cindex run until specified location
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 178f89e..1dfbe23 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -1621,10 +1621,14 @@ print_return_value_1 (struct ui_out *uiout, struct return_value_info *rv)
uiout->text (" = ");
get_user_print_options (&opts);
- string_file stb;
-
- value_print (rv->value, &stb, &opts);
- uiout->field_stream ("return-value", stb);
+ if (opts.finish_print)
+ {
+ string_file stb;
+ value_print (rv->value, &stb, &opts);
+ uiout->field_stream ("return-value", stb);
+ }
+ else
+ uiout->field_string ("return-value", _("<not displayed>"));
uiout->text ("\n");
}
else
@@ -3096,6 +3100,19 @@ info_proc_cmd_all (const char *args, int from_tty)
info_proc_cmd_1 (args, IP_ALL, from_tty);
}
+/* Implement `show print finish'. */
+
+static void
+show_print_finish (struct ui_file *file, int from_tty,
+ struct cmd_list_element *c,
+ const char *value)
+{
+ fprintf_filtered (file, _("\
+Printing of return value after `finish' is %s.\n"),
+ value);
+}
+
+
/* This help string is used for the run, start, and starti commands.
It is defined as a macro to prevent duplication. */
@@ -3420,4 +3437,12 @@ List files opened by the specified process."),
add_cmd ("all", class_info, info_proc_cmd_all, _("\
List all available info about the specified process."),
&info_proc_cmdlist);
+
+ add_setshow_boolean_cmd ("finish", class_support,
+ &user_print_options.finish_print, _("\
+Set whether `finish' prints the return value."), _("\
+Show whether `finish' prints the return value."), NULL,
+ NULL,
+ show_print_finish,
+ &setprintlist, &showprintlist);
}
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index ba657cc..f795ba0 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-05-29 Tom Tromey <tromey@adacore.com>
+
+ * gdb.base/finish.exp (finish_no_print): New proc.
+ (finish_tests): Call it.
+
2019-05-24 Tom de Vries <tdevries@suse.de>
* gdb.dwarf2/gdb-add-index.exp: New file.
diff --git a/gdb/testsuite/gdb.base/finish.exp b/gdb/testsuite/gdb.base/finish.exp
index 3bdc5d4..56f3c10 100644
--- a/gdb/testsuite/gdb.base/finish.exp
+++ b/gdb/testsuite/gdb.base/finish.exp
@@ -86,6 +86,21 @@ proc finish_abbreviation { abbrev } {
"Testing the \"$abbrev\" abbreviation for \"finish\""
}
+# Test "set print finish off".
+proc finish_no_print {} {
+ global decimal
+
+ if {![runto "int_func"]} {
+ untested "couldn't run to main"
+ return
+ }
+ gdb_test_no_output "set print finish off"
+ gdb_test "finish" \
+ "Value returned is \\\$$decimal = <not displayed>"
+ gdb_test "print \$" " = 1" \
+ "Ensure return value was properly saved"
+}
+
proc finish_tests { } {
global gdb_prompt skip_float_test
@@ -105,6 +120,7 @@ proc finish_tests { } {
finish_1 "double"
}
finish_abbreviation "fin"
+ finish_no_print
}
set prev_timeout $timeout
diff --git a/gdb/valprint.c b/gdb/valprint.c
index b9d8878..4c3d67a 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -111,7 +111,8 @@ struct value_print_options user_print_options =
0, /* raw */
0, /* summary */
1, /* symbol_print */
- PRINT_MAX_DEPTH_DEFAULT /* max_depth */
+ PRINT_MAX_DEPTH_DEFAULT, /* max_depth */
+ 1 /* finish_print */
};
/* Initialize *OPTS to be a copy of the user print options. */
diff --git a/gdb/valprint.h b/gdb/valprint.h
index e5cc947..0bd3f19 100644
--- a/gdb/valprint.h
+++ b/gdb/valprint.h
@@ -95,6 +95,9 @@ struct value_print_options
/* Maximum print depth when printing nested aggregates. */
int max_depth;
+
+ /* Whether "finish" should print the value. */
+ int finish_print;
};
/* The global print options set by the user. In general this should