mi tty commands

Bob Rossi bob@brasko.net
Wed Mar 2 02:52:00 GMT 2005


Ping

Hi Andrew,

I know this patch hasn't been posted long, but I was hoping to get a
speedy review. I've got another patch that depends on this, and once
that is in, another patch that depends on that. Maybe more.

Thanks,
Bob Rossi

On Mon, Feb 28, 2005 at 11:20:03AM -0500, Bob Rossi wrote:
> On Fri, Feb 25, 2005 at 04:22:02PM -0500, Daniel Jacobowitz wrote:
> > On Fri, Feb 25, 2005 at 04:19:11PM -0500, Bob Rossi wrote:
> > > On Fri, Feb 25, 2005 at 10:32:21PM +0200, Eli Zaretskii wrote:
> > > > > Date: Thu, 24 Feb 2005 15:35:35 -0500
> > > > > From: Bob Rossi <bob@brasko.net>
> > > > > 
> > > > > What doco needs to be done for this?
> > > > 
> > > > Any new MI commands should be documented in gdb.texinfo.
> > > 
> > > Is everyone happy with these commands? or should I remove them, and make
> > > an interface to the set/show CLI commands (which would access the same
> > > data)?
> > 
> > No, I think individual MI commands is a much better idea.  There's too
> > much historical baggage in the CLI's set/show, and MI is not supposed
> > to depend on the CLI.
> 
> OK, here is an updated patch with doco.
> 
> Index: src/gdb/ChangeLog
> +	* fork-child.c (fork-inferior): Use accessor function for
> +	inferior_io_terminal
> +	* infcmd.c (inferior_io_terminal): make static
> +	(set_inferior_io_terminal): Add accessor definition
> +	(get_inferior_io_terminal): Add accessor definition
> +	(tty_command): Use accessor function
> +	(_initialize_infcmd): Add inferior_tty setshow variable
> +	* inferior.h (set_inferior_io_terminal): Add accessor declaration
> +	(get_inferior_io_terminal): Add accessor declaration
> +	* nto-procfs (procfs_create_inferior): Use accessor function
> +	* win32-nat.c (child_create_inferior): Use accessor function
> +	* mi/mi-cmd-env.c (mi_cmd_inferior_tty_set): Add MI definition
> +	(mi_cmd_inferior_tty_set): Add MI definition
> +	* mi/mi-cmds.c (mi_cmds): Add inferior-tty-set/inferior-tty-show
> +	* mi/mi-cmds.h (mi_cmd_inferior_tty_set): Add prototype
> +	(mi_cmd_inferior_tty_show): Add prototype
> 
> Index: src/gdb/doc/ChangeLog
> +2005-02-28  Bob Rossi  <bob@brasko.net>
> +
> +	* gdb.texinfo (GDB/MI Miscellaneous Commands): Add '-inferior-tty-set'
> +	(GDB/MI Miscellaneous Commands): Add '-inferior-tty-show'
> 
> Index: src/gdb/testsuite/ChangeLog
> +2005-02-28  Bob Rossi  <bob@brasko.net>
> +
> +	* gdb.mi/mi-basics.exp (test_setshow_inferior_tty): Test MI tty
> +	command
> 
> 
> Thanks,
> Bob Rossi
> 
> Index: src/gdb/fork-child.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/fork-child.c,v
> retrieving revision 1.25
> diff -w -u -r1.25 fork-child.c
> --- src/gdb/fork-child.c	11 Feb 2005 18:13:49 -0000	1.25
> +++ src/gdb/fork-child.c	28 Feb 2005 16:11:43 -0000
> @@ -137,6 +137,7 @@
>    char **save_our_env;
>    int shell = 0;
>    static char **argv;
> +  const char *inferior_io_terminal = get_inferior_io_terminal();
>  
>    /* If no exec file handed to us, get it from the exec-file command
>       -- with a good, common error message if none is specified.  */
> @@ -260,7 +261,7 @@
>  
>    /* Tell the terminal handling subsystem what tty we plan to run on;
>       it will just record the information for later.  */
> -  new_tty_prefork (inferior_io_terminal);
> +  new_tty_prefork ((char*)inferior_io_terminal);
>  
>    /* It is generally good practice to flush any possible pending stdio
>       output prior to doing a fork, to avoid the possibility of both
> Index: src/gdb/infcmd.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/infcmd.c,v
> retrieving revision 1.134
> diff -w -u -r1.134 infcmd.c
> --- src/gdb/infcmd.c	21 Feb 2005 03:25:56 -0000	1.134
> +++ src/gdb/infcmd.c	28 Feb 2005 16:11:44 -0000
> @@ -135,7 +135,7 @@
>  
>  /* File name for default use for standard in/out in the inferior.  */
>  
> -char *inferior_io_terminal;
> +static char *inferior_io_terminal;
>  
>  /* Pid of our debugged inferior, or 0 if no inferior now.
>     Since various parts of infrun.c test this to see whether there is a program
> @@ -202,6 +202,24 @@
>  
>  /* Accessor routines. */
>  
> +void 
> +set_inferior_io_terminal (char *terminal_name)
> +{
> +  if (inferior_io_terminal)
> +    xfree ( inferior_io_terminal );
> +
> +  if (!terminal_name)
> +    inferior_io_terminal = NULL;
> +  else
> +    inferior_io_terminal = savestring (terminal_name, strlen (terminal_name));
> +}
> +
> +const char *
> +get_inferior_io_terminal (void)
> +{
> +  return inferior_io_terminal;
> +}
> +
>  char *
>  get_inferior_args (void)
>  {
> @@ -375,7 +393,7 @@
>    if (file == 0)
>      error_no_arg (_("terminal name for running target process"));
>  
> -  inferior_io_terminal = savestring (file, strlen (file));
> +  set_inferior_io_terminal (file);
>  }
>  
>  /* Kill the inferior if already running.  This function is designed
> @@ -1982,6 +2000,14 @@
>  	       _("Set terminal for future runs of program being debugged."));
>    set_cmd_completer (c, filename_completer);
>  
> +  /* add the filename of the terminal connected to inferior I/O */
> +  add_setshow_string_noescape_cmd ( "inferior_tty", class_run,
> +				    &inferior_io_terminal, _("\
> +Set terminal for future runs of program being debugged."), _("\
> +Show terminal for future runs of program being debugged."), _("\
> +Usage: set inferior_tty /dev/pts/1"), NULL, NULL, &setlist, &showlist);
> +  set_cmd_completer (c, filename_completer);
> +
>    add_setshow_optional_filename_cmd ("args", class_run,
>  				     &inferior_args, _("\
>  Set argument list to give program being debugged when it is started."), _("\
> Index: src/gdb/inferior.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/inferior.h,v
> retrieving revision 1.69
> diff -w -u -r1.69 inferior.h
> --- src/gdb/inferior.h	12 Sep 2004 15:05:05 -0000	1.69
> +++ src/gdb/inferior.h	28 Feb 2005 16:11:44 -0000
> @@ -102,9 +102,10 @@
>  
>  extern void clear_sigio_trap (void);
>  
> -/* File name for default use for standard in/out in the inferior.  */
> +/* Set/Get name for default use for standard in/out in the inferior.  */
>  
> -extern char *inferior_io_terminal;
> +extern void set_inferior_io_terminal (char *terminal_name);
> +extern const char *get_inferior_io_terminal (void);
>  
>  /* Collected pid, tid, etc. of the debugged inferior.  When there's
>     no inferior, PIDGET (inferior_ptid) will be 0. */
> Index: src/gdb/nto-procfs.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/nto-procfs.c,v
> retrieving revision 1.13
> diff -w -u -r1.13 nto-procfs.c
> --- src/gdb/nto-procfs.c	15 Feb 2005 15:49:14 -0000	1.13
> +++ src/gdb/nto-procfs.c	28 Feb 2005 16:11:45 -0000
> @@ -984,6 +984,7 @@
>    char *in = "", *out = "", *err = "";
>    int fd, fds[3];
>    sigset_t set;
> +  const char *inferior_io_terminal = get_inferior_io_terminal();
>  
>    argv = xmalloc (((strlen (allargs) + 1) / (unsigned) 2 + 2) *
>  		  sizeof (*argv));
> @@ -1010,11 +1011,11 @@
>    if (inferior_io_terminal)
>      {
>        if (!in[0])
> -	in = inferior_io_terminal;
> +	in = (char*)inferior_io_terminal;
>        if (!out[0])
> -	out = inferior_io_terminal;
> +	out = (char*)inferior_io_terminal;
>        if (!err[0])
> -	err = inferior_io_terminal;
> +	err = (char*)inferior_io_terminal;
>      }
>  
>    if (in[0])
> Index: src/gdb/win32-nat.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/win32-nat.c,v
> retrieving revision 1.108
> diff -w -u -r1.108 win32-nat.c
> --- src/gdb/win32-nat.c	18 Feb 2005 15:25:31 -0000	1.108
> +++ src/gdb/win32-nat.c	28 Feb 2005 16:11:46 -0000
> @@ -1725,6 +1725,7 @@
>    const char *sh;
>    int tty;
>    int ostdin, ostdout, ostderr;
> +  const char *inferior_io_terminal = get_inferior_io_terminal();
>  
>    if (!exec_file)
>      error (_("No executable specified, use `target exec'."));
> Index: src/gdb/doc/gdb.texinfo
> ===================================================================
> RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
> retrieving revision 1.232
> diff -w -u -r1.232 gdb.texinfo
> --- src/gdb/doc/gdb.texinfo	9 Feb 2005 19:06:08 -0000	1.232
> +++ src/gdb/doc/gdb.texinfo	28 Feb 2005 16:12:01 -0000
> @@ -17525,6 +17525,57 @@
>  (@value{GDBP})
>  @end smallexample
>  
> +@subheading The @code{-inferior-tty-set} Command
> +@findex -inferior-tty-set
> +
> +@subheading Synopsis
> +
> +@smallexample
> +-inferior-tty-set /dev/pts/1
> +@end smallexample
> +
> +Set terminal for future runs of program being debugged.
> +
> +@subheading @value{GDBN} Command
> +
> +The corresponding @value{GDBN} command is @samp{set inferior_tty /dev/pts/1}.
> +
> +@subheading Example
> +
> +@smallexample
> +(@value{GDBP})
> +-inferior-tty-set /dev/pts/1
> +^done
> +(@value{GDBP})
> +@end smallexample
> +
> +@subheading The @code{-inferior-tty-show} Command
> +@findex -inferior-tty-show
> +
> +@subheading Synopsis
> +
> +@smallexample
> +-inferior-tty-show
> +@end smallexample
> +
> +Show terminal for future runs of program being debugged.
> +
> +@subheading @value{GDBN} Command
> +
> +The corresponding @value{GDBN} command is @samp{show inferior_tty /dev/pts/1}.
> +
> +@subheading Example
> +
> +@smallexample
> +(@value{GDBP})
> +-inferior-tty-set /dev/pts/1
> +^done
> +(@value{GDBP})
> +-inferior-tty-show
> +^done,inferior_tty_terminal="/dev/pts/1"
> +(@value{GDBP})
> +@end smallexample
> +
>  @ignore
>  @c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>  @node GDB/MI Kod Commands
> Index: src/gdb/mi/mi-cmd-env.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/mi/mi-cmd-env.c,v
> retrieving revision 1.8
> diff -w -u -r1.8 mi-cmd-env.c
> --- src/gdb/mi/mi-cmd-env.c	11 Feb 2005 04:06:11 -0000	1.8
> +++ src/gdb/mi/mi-cmd-env.c	28 Feb 2005 16:12:01 -0000
> @@ -244,6 +244,30 @@
>    return MI_CMD_DONE;
>  }
>  
> +/* Set the inferior terminal device name */
> +enum mi_cmd_result
> +mi_cmd_inferior_tty_set(char *command, char **argv, int argc)
> +{
> +  set_inferior_io_terminal (argv[0]);
> +
> +  return MI_CMD_DONE;
> +}
> +
> +/* Print the inferior terminal device name */
> +enum mi_cmd_result
> +mi_cmd_inferior_tty_show(char *command, char **argv, int argc)
> +{
> +  const char *inferior_io_terminal = get_inferior_io_terminal ();
> +  
> +  if ( !mi_valid_noargs("mi_cmd_inferior_tty_show", argc, argv) )
> +    error (_("mi_cmd_inferior_tty_show: Usage: No args"));
> +
> +  if (inferior_io_terminal)
> +    ui_out_field_string (uiout, "inferior_tty_terminal", inferior_io_terminal);
> +
> +  return MI_CMD_DONE;
> +}
> +
>  void 
>  _initialize_mi_cmd_env (void)
>  {
> Index: src/gdb/mi/mi-cmds.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/mi/mi-cmds.c,v
> retrieving revision 1.16
> diff -w -u -r1.16 mi-cmds.c
> --- src/gdb/mi/mi-cmds.c	11 Feb 2005 18:13:55 -0000	1.16
> +++ src/gdb/mi/mi-cmds.c	28 Feb 2005 16:12:01 -0000
> @@ -153,6 +153,8 @@
>    { "trace-save", { NULL, 0 }, NULL, NULL },
>    { "trace-start", { NULL, 0 }, NULL, NULL },
>    { "trace-stop", { NULL, 0 }, NULL, NULL },
> +  { "inferior-tty-set", { NULL, 0 }, NULL, mi_cmd_inferior_tty_set },
> +  { "inferior-tty-show", { NULL, 0 }, NULL, mi_cmd_inferior_tty_show },
>    { "var-assign", { NULL, 0 }, 0, mi_cmd_var_assign},
>    { "var-create", { NULL, 0 }, 0, mi_cmd_var_create},
>    { "var-delete", { NULL, 0 }, 0, mi_cmd_var_delete},
> Index: src/gdb/mi/mi-cmds.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/mi/mi-cmds.h,v
> retrieving revision 1.15
> diff -w -u -r1.15 mi-cmds.h
> --- src/gdb/mi/mi-cmds.h	13 Jan 2005 22:08:27 -0000	1.15
> +++ src/gdb/mi/mi-cmds.h	28 Feb 2005 16:12:01 -0000
> @@ -96,6 +96,8 @@
>  extern mi_cmd_args_ftype mi_cmd_target_select;
>  extern mi_cmd_argv_ftype mi_cmd_thread_list_ids;
>  extern mi_cmd_argv_ftype mi_cmd_thread_select;
> +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_var_assign;
>  extern mi_cmd_argv_ftype mi_cmd_var_create;
>  extern mi_cmd_argv_ftype mi_cmd_var_delete;
> Index: src/gdb/testsuite/gdb.mi/mi-basics.exp
> ===================================================================
> RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-basics.exp,v
> retrieving revision 1.9
> diff -w -u -r1.9 mi-basics.exp
> --- src/gdb/testsuite/gdb.mi/mi-basics.exp	9 Aug 2004 16:32:44 -0000	1.9
> +++ src/gdb/testsuite/gdb.mi/mi-basics.exp	28 Feb 2005 16:12:09 -0000
> @@ -236,12 +236,41 @@
>  
>  } 
>  
> +proc test_setshow_inferior_tty {} {
> +    global mi_gdb_prompt
> +
> +    # test that the commands,
> +    #   -inferior-tty-set
> +    #   -inferior-tth-show
> +
> +	mi_gdb_test "301-inferior-tty-show" \
> +	            "301\\\^done" \
> +				"initial tty is empty"
> +
> +	mi_gdb_test "302-inferior-tty-set /dev/pts/1" \
> +	            "302\\\^done" \
> +				"set tty to /dev/pts/1"
> +
> +	mi_gdb_test "303-inferior-tty-show" \
> +	            "303\\\^done,inferior_tty_terminal=\"/dev/pts/1\"" \
> +				"tty was set correctly"
> +
> +	mi_gdb_test "304-inferior-tty-set" \
> +	            "304\\\^done" \
> +				"set tty to the empty string"
> +
> +	mi_gdb_test "305-inferior-tty-show" \
> +	            "305\\\^done" \
> +				"final tty is empty"
> +}
> +
>  if [test_mi_interpreter_selection] {
>    test_exec_and_symbol_mi_operatons
>    test_breakpoints_deletion
>    test_dir_specification
>    test_cwd_specification
>    test_path_specification
> +  test_setshow_inferior_tty
>  }
>  
>  mi_gdb_exit



More information about the Gdb-patches mailing list