From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7154 invoked by alias); 5 Oct 2015 11:54:11 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 7141 invoked by uid 89); 5 Oct 2015 11:54:09 -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,SPF_HELO_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Mon, 05 Oct 2015 11:54:08 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 7DE8991E95 for ; Mon, 5 Oct 2015 11:47:09 +0000 (UTC) Received: from x220.tallawa.org (ovpn-113-80.phx2.redhat.com [10.3.113.80]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t95Bl8UH004694; Mon, 5 Oct 2015 07:47:09 -0400 From: Cleber Rosa To: gdb-patches@sourceware.org Cc: areis@redhat.com, palves@redhat.com, Cleber Rosa Subject: [PATCH 4/4] GDB/MI: inferior standard I/O redirection Date: Mon, 05 Oct 2015 11:54:00 -0000 Message-Id: <1444045617-14526-5-git-send-email-crosa@redhat.com> In-Reply-To: <1444045617-14526-1-git-send-email-crosa@redhat.com> References: <1444045617-14526-1-git-send-email-crosa@redhat.com> X-SW-Source: 2015-10/txt/msg00034.txt.bz2 This introduces the following MI commands: * -inferior-stdin-set * -inferior-stdin-show * -inferior-stdout-set * -inferior-stdout-show * -inferior-stderr-set * -inferior-stderr-show Which are the MI version of the inferior standard I/O redirection commands: * set inferior-stdin (aliased as stdin) * show inferior-stdin * set inferior-stdout (aliased as stdout) * show inferior-stdout * set inferior-stderr (aliased as stderr) gdb/doc/ChangeLog: 2015-10-05 Cleber Rosa * gdb.texinfo (info): Add documentation about the -inferior-stdin-set, inferior-stdin-show, -inferior-stdout-set, inferior-stdout-show, -inferior-stderr-set, inferior-stderr-show commands. gdb/ChangeLog: 2015-10-05 Cleber Rosa * mi/mi-cmd-env.c (mi_cmd_inferior_std_show_helper): New utility function. (mi_cmd_inferior_stdin_set): New function. (mi_cmd_inferior_stdin_show): Likewise. (mi_cmd_inferior_stdout_set): Likewise. (mi_cmd_inferior_stdout_show): Likewise. (mi_cmd_inferior_stderr_set): Likewise. (mi_cmd_inferior_stderr_show): Likewise. * mi/mi-cmds.c (struct mi_cmds): Add inferior-stdin-set, inferior-stdin-show, inferior-stdout-set, inferior-stdout-show, inferior-stderr-set, inferior-stderr-show. * mi/mi-cmds.h: Add mi_cmd_inferior_stdin_set, mi_cmd_inferior_stdin_show, mi_cmd_inferior_stdout_set,mi_cmd_inferior_stdout_show, mi_cmd_inferior_stderr_set and mi_cmd_inferior_stderr_show declarations. gdb/testsuite/ChangeLog: 2015-10-05 Cleber Rosa * gdb.mi/mi-basics.exp (test_setshow_inferior_std): New tests for commands -inferior-stdin-set, -inferior-stdin-show, -inferior-stdin-set, -inferior-stdin-show, -inferior-stdin-set and -inferior-stdin-show. --- gdb/doc/gdb.texinfo | 153 +++++++++++++++++++++++++++++++++++++ gdb/mi/mi-cmd-env.c | 77 +++++++++++++++++++ gdb/mi/mi-cmds.c | 6 ++ gdb/mi/mi-cmds.h | 6 ++ gdb/testsuite/gdb.mi/mi-basics.exp | 62 +++++++++++++++ 5 files changed, 304 insertions(+) diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 39d5a1c..d6f77a8 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -32144,6 +32144,159 @@ The corresponding @value{GDBN} command is @samp{show inferior-tty}. (gdb) @end smallexample +@subheading The @code{-inferior-stdin-set} Command +@findex -inferior-stdin-set + +@subheading Synopsis + +@smallexample +-inferior-stdin-set /tmp/answers +@end smallexample + +Set standard input for future runs of the program being debugged. + +@subheading @value{GDBN} Command + +The corresponding @value{GDBN} command is @samp{set inferior-stdin} /tmp/answers. + +@subheading Example + +@smallexample +(gdb) +-inferior-stdin-set /tmp/answers +^done +(gdb) +@end smallexample + +@subheading The @code{-inferior-stdin-show} Command +@findex -inferior-stdin-show + +@subheading Synopsis + +@smallexample +-inferior-stdin-show +@end smallexample + +Show standard input to be used on future runs of program being debugged. + +@subheading @value{GDBN} Command + +The corresponding @value{GDBN} command is @samp{show inferior-stdin}. + +@subheading Example + +@smallexample +(gdb) +-inferior-stdin-set /tmp/answers +^done +(gdb) +-inferior-stdin-show +^done,inferior_stdin="/tmp/answers" +(gdb) +@end smallexample + +@subheading The @code{-inferior-stdout-set} Command +@findex -inferior-stdout-set + +@subheading Synopsis + +@smallexample +-inferior-stdout-set /tmp/output +@end smallexample + +Set standard output for future runs of the program being debugged. + +@subheading @value{GDBN} Command + +The corresponding @value{GDBN} command is @samp{set inferior-stdout} /tmp/output. + +@subheading Example + +@smallexample +(gdb) +-inferior-stdout-set /tmp/output +^done +(gdb) +@end smallexample + +@subheading The @code{-inferior-stdout-show} Command +@findex -inferior-stdout-show + +@subheading Synopsis + +@smallexample +-inferior-stdout-show +@end smallexample + +Show standard output to be used on future runs of program being debugged. + +@subheading @value{GDBN} Command + +The corresponding @value{GDBN} command is @samp{show inferior-stdout}. + +@subheading Example + +@smallexample +(gdb) +-inferior-stdout-set /tmp/output +^done +(gdb) +-inferior-stdout-show +^done,inferior_stdout="/tmp/output" +(gdb) +@end smallexample + +@subheading The @code{-inferior-stderr-set} Command +@findex -inferior-stderr-set + +@subheading Synopsis + +@smallexample +-inferior-stderr-set /dev/null +@end smallexample + +Set standard error for future runs of the program being debugged. + +@subheading @value{GDBN} Command + +The corresponding @value{GDBN} command is @samp{set inferior-stderr} /dev/null. + +@subheading Example + +@smallexample +(gdb) +-inferior-stderr-set /dev/null +^done +(gdb) +@end smallexample + +@subheading The @code{-inferior-stderr-show} Command +@findex -inferior-stderr-show + +@subheading Synopsis + +@smallexample +-inferior-stderr-show +@end smallexample + +Show standard error to be used on future runs of program being debugged. + +@subheading @value{GDBN} Command + +The corresponding @value{GDBN} command is @samp{show inferior-stderr}. + +@subheading Example + +@smallexample +(gdb) +-inferior-stderr-set /dev/null +^done +(gdb) +-inferior-stderr-show +^done,inferior_stderr="/dev/null" +(gdb) +@end smallexample + @subheading The @code{-enable-timings} Command @findex -enable-timings diff --git a/gdb/mi/mi-cmd-env.c b/gdb/mi/mi-cmd-env.c index fad9297..610070d 100644 --- a/gdb/mi/mi-cmd-env.c +++ b/gdb/mi/mi-cmd-env.c @@ -268,6 +268,83 @@ mi_cmd_inferior_tty_show (char *command, char **argv, int argc) "inferior_tty_terminal", inferior_io_terminal); } +/* Helper function to simplify mi_cmd_inferior_std{in,out,err}_show. */ + +static void +mi_cmd_inferior_std_show_helper(char *command, + char **argv, + int argc, + char *field_name, + const char *inferior_std_name) +{ + if ( !mi_valid_noargs ("-inferior-stdin-show", argc, argv)) + error (_("%s: Usage: No args"), command); + + if (inferior_std_name) + ui_out_field_string (current_uiout, + field_name, inferior_std_name); +} + +/* Set the inferior stdin file name. */ + +void +mi_cmd_inferior_stdin_set (char *command, char **argv, int argc) +{ + set_inferior_io_stdin (argv[0]); +} + +/* Print the inferior stdin file name. */ + +void +mi_cmd_inferior_stdin_show (char *command, char **argv, int argc) +{ + mi_cmd_inferior_std_show_helper("-inferior-stdin-show", + argv, + argc, + "inferior_stdin", + get_inferior_io_stdin ()); +} + +/* Set the inferior stdout file name. */ + +void +mi_cmd_inferior_stdout_set (char *command, char **argv, int argc) +{ + set_inferior_io_stdout (argv[0]); +} + +/* Print the inferior stdout file name. */ + +void +mi_cmd_inferior_stdout_show (char *command, char **argv, int argc) +{ + mi_cmd_inferior_std_show_helper("-inferior-stdout-show", + argv, + argc, + "inferior_stdout", + get_inferior_io_stdout ()); +} + +/* Set the inferior stderr file name. */ + +void +mi_cmd_inferior_stderr_set (char *command, char **argv, int argc) +{ + set_inferior_io_stderr (argv[0]); +} + +/* Print the inferior stderr file name. */ + +void +mi_cmd_inferior_stderr_show (char *command, char **argv, int argc) +{ + mi_cmd_inferior_std_show_helper("-inferior-stderr-show", + argv, + argc, + "inferior_stderr", + get_inferior_io_stderr ()); +} + void _initialize_mi_cmd_env (void) { diff --git a/gdb/mi/mi-cmds.c b/gdb/mi/mi-cmds.c index 2d8af2f..388b5b1 100644 --- a/gdb/mi/mi-cmds.c +++ b/gdb/mi/mi-cmds.c @@ -123,6 +123,12 @@ static struct mi_cmd mi_cmds[] = DEF_MI_CMD_CLI ("gdb-version", "show version", 0), DEF_MI_CMD_MI ("inferior-tty-set", mi_cmd_inferior_tty_set), DEF_MI_CMD_MI ("inferior-tty-show", mi_cmd_inferior_tty_show), + DEF_MI_CMD_MI ("inferior-stdin-set", mi_cmd_inferior_stdin_set), + DEF_MI_CMD_MI ("inferior-stdin-show", mi_cmd_inferior_stdin_show), + DEF_MI_CMD_MI ("inferior-stdout-set", mi_cmd_inferior_stdout_set), + DEF_MI_CMD_MI ("inferior-stdout-show", mi_cmd_inferior_stdout_show), + DEF_MI_CMD_MI ("inferior-stderr-set", mi_cmd_inferior_stderr_set), + DEF_MI_CMD_MI ("inferior-stderr-show", mi_cmd_inferior_stderr_show), DEF_MI_CMD_MI ("info-ada-exceptions", mi_cmd_info_ada_exceptions), DEF_MI_CMD_MI ("info-gdb-mi-command", mi_cmd_info_gdb_mi_command), DEF_MI_CMD_MI ("info-os", mi_cmd_info_os), diff --git a/gdb/mi/mi-cmds.h b/gdb/mi/mi-cmds.h index 55141f3..8ffb65f 100644 --- a/gdb/mi/mi-cmds.h +++ b/gdb/mi/mi-cmds.h @@ -73,6 +73,12 @@ extern mi_cmd_argv_ftype mi_cmd_file_list_exec_source_files; extern mi_cmd_argv_ftype mi_cmd_gdb_exit; extern mi_cmd_argv_ftype mi_cmd_inferior_tty_set; extern mi_cmd_argv_ftype mi_cmd_inferior_tty_show; +extern mi_cmd_argv_ftype mi_cmd_inferior_stdin_set; +extern mi_cmd_argv_ftype mi_cmd_inferior_stdin_show; +extern mi_cmd_argv_ftype mi_cmd_inferior_stdout_set; +extern mi_cmd_argv_ftype mi_cmd_inferior_stdout_show; +extern mi_cmd_argv_ftype mi_cmd_inferior_stderr_set; +extern mi_cmd_argv_ftype mi_cmd_inferior_stderr_show; extern mi_cmd_argv_ftype mi_cmd_info_ada_exceptions; extern mi_cmd_argv_ftype mi_cmd_info_gdb_mi_command; extern mi_cmd_argv_ftype mi_cmd_info_os; diff --git a/gdb/testsuite/gdb.mi/mi-basics.exp b/gdb/testsuite/gdb.mi/mi-basics.exp index 476dbdc..89f7d68 100644 --- a/gdb/testsuite/gdb.mi/mi-basics.exp +++ b/gdb/testsuite/gdb.mi/mi-basics.exp @@ -264,6 +264,67 @@ proc test_setshow_inferior_tty {} { "make sure show takes no arguments" } +proc test_setshow_inferior_std {} { + global mi_gdb_prompt + + # Test that the commands, + # -inferior-stdin-set + # -inferior-stdin-show + # -inferior-stdin-set + # -inferior-stdin-show + # -inferior-stdin-set + # -inferior-stdin-show + # are setting/getting the same data in GDB. + + mi_gdb_test "301-inferior-stdin-show" \ + "301\\\^done" \ + "initial stdin is not set" + + mi_gdb_test "302-inferior-stdin-set /foo/bar" \ + "302\\\^done" \ + "set stdin to /foo/bar" + + mi_gdb_test "303-inferior-stdin-show" \ + "303\\\^done,inferior_stdin=\"/foo/bar\"" \ + "std was set correctly" + + mi_gdb_test "304-inferior-stdin-show should-take-no-args" \ + "304\\\^error,msg=\"-inferior-stdin-show: Usage: No args\"" \ + "make sure show takes no arguments" + + mi_gdb_test "305-inferior-stdout-show" \ + "305\\\^done" \ + "initial stdout is not set" + + mi_gdb_test "306-inferior-stdout-set /foo/bar" \ + "306\\\^done" \ + "set stdout to /foo/bar" + + mi_gdb_test "307-inferior-stdout-show" \ + "307\\\^done,inferior_stdout=\"/foo/bar\"" \ + "std was set correctly" + + mi_gdb_test "308-inferior-stdout-show should-take-no-args" \ + "308\\\^error,msg=\"-inferior-stdout-show: Usage: No args\"" \ + "make sure show takes no arguments" + + mi_gdb_test "309-inferior-stderr-show" \ + "309\\\^done" \ + "initial stderr is not set" + + mi_gdb_test "310-inferior-stderr-set /foo/bar" \ + "310\\\^done" \ + "set stderr to /foo/bar" + + mi_gdb_test "311-inferior-stderr-show" \ + "311\\\^done,inferior_stderr=\"/foo/bar\"" \ + "std was set correctly" + + mi_gdb_test "312-inferior-stderr-show should-take-no-args" \ + "312\\\^error,msg=\"-inferior-stderr-show: Usage: No args\"" \ + "make sure show takes no arguments" +} + if { [test_mi_interpreter_selection] && [test_exec_and_symbol_mi_operatons] } { test_breakpoints_deletion @@ -271,6 +332,7 @@ if { [test_mi_interpreter_selection] test_cwd_specification test_path_specification test_setshow_inferior_tty + test_setshow_inferior_std } mi_gdb_exit -- 2.4.3