summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@gnu.org>2004-01-25 21:00:18 +0000
committerMark Kettenis <kettenis@gnu.org>2004-01-25 21:00:18 +0000
commit5330c89d75e7846b82ef75b4720ed211c95e7911 (patch)
tree575da9f64e0f6960dadc6256b180b5823577c4d2
parent85ca8afd887ea7eb915f903562d7043e65965087 (diff)
downloadgdb-5330c89d75e7846b82ef75b4720ed211c95e7911.tar.gz
* infcmd.c (print_return_value): Plug memory leak; delete
ui_stream object. Rename argument `structure_return' to `struct_return'.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/infcmd.c36
2 files changed, 23 insertions, 19 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index ada362d14cf..b20f0e9ebf6 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2004-01-25 Mark Kettenis <kettenis@gnu.org>
+ * infcmd.c (print_return_value): Plug memory leak; delete
+ ui_stream object. Rename argument `structure_return' to
+ `struct_return'.
+
+2004-01-25 Mark Kettenis <kettenis@gnu.org>
+
* infcmd.c (print_return_value): Wrap long lines.
(finish_command_continuation, finish_command): Remove unused
variable `funcaddr'. Fix some coding-standards problems.
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 9efa1939d5c..ebf7f39bc9f 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -1050,22 +1050,16 @@ advance_command (char *arg, int from_tty)
/* Print the result of a function at the end of a 'finish' command. */
static void
-print_return_value (int structure_return, struct type *value_type)
+print_return_value (int struct_return, struct type *value_type)
{
+ struct cleanup *old_chain;
+ struct ui_stream *stb;
struct value *value;
- static struct ui_stream *stb = NULL;
- if (!structure_return)
+ if (!struct_return)
{
+ /* The return value can be found in the inferior's registers. */
value = register_value_being_returned (value_type, stop_registers);
- stb = ui_out_stream_new (uiout);
- ui_out_text (uiout, "Value returned is ");
- ui_out_field_fmt (uiout, "gdb-result-var", "$%d",
- record_latest_value (value));
- ui_out_text (uiout, " = ");
- value_print (value, stb->stream, 0, Val_no_prettyprint);
- ui_out_field_stream (uiout, "return-value", stb);
- ui_out_text (uiout, "\n");
}
/* FIXME: 2003-09-27: When returning from a nested inferior function
call, it's possible (with no help from the architecture vector)
@@ -1110,15 +1104,19 @@ print_return_value (int structure_return, struct type *value_type)
EXTRACT_RETURN_VALUE (value_type, stop_registers,
VALUE_CONTENTS_RAW (value));
}
- stb = ui_out_stream_new (uiout);
- ui_out_text (uiout, "Value returned is ");
- ui_out_field_fmt (uiout, "gdb-result-var", "$%d",
- record_latest_value (value));
- ui_out_text (uiout, " = ");
- value_print (value, stb->stream, 0, Val_no_prettyprint);
- ui_out_field_stream (uiout, "return-value", stb);
- ui_out_text (uiout, "\n");
}
+
+ /* Print it. */
+ stb = ui_out_stream_new (uiout);
+ old_chain = make_cleanup_ui_out_stream_delete (stb);
+ ui_out_text (uiout, "Value returned is ");
+ ui_out_field_fmt (uiout, "gdb-result-var", "$%d",
+ record_latest_value (value));
+ ui_out_text (uiout, " = ");
+ value_print (value, stb->stream, 0, Val_no_prettyprint);
+ ui_out_field_stream (uiout, "return-value", stb);
+ ui_out_text (uiout, "\n");
+ do_cleanups (old_chain);
}
/* Stuff that needs to be done by the finish command after the target