From 1f31650a613dfe2ba24b6c61b7f6af54267e109d Mon Sep 17 00:00:00 2001 From: Vladimir Prus Date: Thu, 12 Mar 2009 20:08:04 +0000 Subject: [PATCH] Include token in ^running notification for CLI commands. * mi/mi-main.c (mi_execute_command): Set current_token here. (mi_cmd_execute): Do not set current_token here. --- gdb/ChangeLog | 7 +++++++ gdb/mi/mi-main.c | 11 ++++++++--- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.mi/mi-cli.exp | 20 ++++++++++++++++++-- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9e6ecda692d..2aeca94bcdc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2009-03-12 Vladimir Prus + + Include token in ^running notification for CLI commands. + + * mi/mi-main.c (mi_execute_command): Set current_token here. + (mi_cmd_execute): Do not set current_token here. + 2009-03-12 Vladimir Prus Fix MI timings. diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 2873b4d6d8e..97a136b043e 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -1137,11 +1137,15 @@ mi_cmd_list_target_features (char *command, char **argv, int argc) static void captured_mi_execute_command (struct ui_out *uiout, void *data) { + struct cleanup *cleanup; struct mi_parse *context = (struct mi_parse *) data; if (do_timings) current_command_ts = context->cmd_start; + current_token = xstrdup (context->token); + cleanup = make_cleanup (free_current_contents, ¤t_token); + running_result_record_printed = 0; switch (context->op) { @@ -1216,6 +1220,8 @@ captured_mi_execute_command (struct ui_out *uiout, void *data) } + do_cleanups (cleanup); + return; } @@ -1310,10 +1316,9 @@ mi_cmd_execute (struct mi_parse *parse) { struct cleanup *cleanup; int i; - free_all_values (); - current_token = xstrdup (parse->token); - cleanup = make_cleanup (free_current_contents, ¤t_token); + free_all_values (); + cleanup = make_cleanup (null_cleanup, NULL); if (parse->frame != -1 && parse->thread == -1) error (_("Cannot specify --frame without --thread")); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 50e61ce0731..9407f9f04c1 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-03-12 Vladimir Prus + + * gdb.mi/mi-cli.exp: Verify that CLI commands that run inferior + include the token in ^running and frame info in *stopped. + 2009-03-05 Paul Pluzhnikov * solib-display.exp: New file. diff --git a/gdb/testsuite/gdb.mi/mi-cli.exp b/gdb/testsuite/gdb.mi/mi-cli.exp index b469acbbfb9..8427edfbc71 100644 --- a/gdb/testsuite/gdb.mi/mi-cli.exp +++ b/gdb/testsuite/gdb.mi/mi-cli.exp @@ -155,8 +155,24 @@ mi_execute_to "exec-continue" "breakpoint-hit" "main" "" ".*basics.c" \ $line_main_hello { "" "disp=\"del\"" } \ "-exec-continue to line $line_main_hello" -mi_execute_to "exec-next" "end-stepping-range" "main" "" ".*basics.c" $line_main_return "" \ - "-exec-next to line $line_main_return" +# Test that the token is output even for CLI commands +# Also test that *stopped includes frame information. +mi_gdb_test "34 next" \ + ".*34\\\^running.*\\*running,thread-id=\"all\"" \ + "34 next: run" + +gdb_expect { + -re "~\[^\r\n\]+\r\n" { + verbose -log "Hi there" + } +} + +# Note that the output does not include stop reason. This is fine. +# The purpose of *stopped notification for CLI command is to make +# sure that frontend knows that inferior is stopped, and knows where. +# Supplementary information is not necessary. +mi_expect_stop "" "main" "" ".*basics.c" $line_main_return "" \ + "34 next: stop" mi_gdb_test "-interpreter-exec console \"list\"" \ "\~\"$line_main_return\[\\\\t ]*callme \\(1\\);\\\\n\".*\\^done" \ -- 2.30.2