From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24646 invoked by alias); 26 Jun 2005 13:43:22 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 24559 invoked by uid 22791); 26 Jun 2005 13:43:11 -0000 Received: from lakermmtao01.cox.net (HELO lakermmtao01.cox.net) (68.230.240.38) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Sun, 26 Jun 2005 13:43:11 +0000 Received: from white ([68.9.64.121]) by lakermmtao01.cox.net (InterMail vM.6.01.04.00 201-2131-118-20041027) with ESMTP id <20050626134257.JHVY11036.lakermmtao01.cox.net@white>; Sun, 26 Jun 2005 09:42:57 -0400 Received: from bob by white with local (Exim 3.35 #1 (Debian)) id 1DmXPU-00042U-00; Sun, 26 Jun 2005 09:42:56 -0400 Date: Sun, 26 Jun 2005 13:43:00 -0000 From: Bob Rossi To: gdb-patches@sources.redhat.com Cc: Daniel Jacobowitz Subject: Re: mi tty commands Message-ID: <20050626134256.GA15518@white> Mail-Followup-To: gdb-patches@sources.redhat.com, Daniel Jacobowitz References: <20050601001440.GB15414@white> <20050601130653.GA17103@white> <20050601174149.GA17309@white> <20050602221644.GA21263@white> <20050613030732.GE9288@nevyn.them.org> <20050617210811.GA27959@white> <20050617211427.GA15201@nevyn.them.org> <20050618122921.GA30774@white> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20050618122921.GA30774@white> User-Agent: Mutt/1.3.28i X-SW-Source: 2005-06/txt/msg00366.txt.bz2 Hi Daniel, Ping. Thanks for taking the time to review this patch so far. Bob Rossi On Sat, Jun 18, 2005 at 08:29:21AM -0400, Bob Rossi wrote: > On Fri, Jun 17, 2005 at 05:14:28PM -0400, Daniel Jacobowitz wrote: > > On Fri, Jun 17, 2005 at 05:08:11PM -0400, Bob Rossi wrote: > > > > > - c = add_com ("tty", class_run, tty_command, > > > > > - _("Set terminal for future runs of program being debugged.")); > > > > > + /* 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_com_alias ("tty", "set inferior-tty", class_alias, 0); > > > > > > > > This seems nice. I was thinking of replacing "tty" with "set tty" > > > > instead of "set inferior-tty", but I don't have a strong preference one > > > > way or the other. > > > > > > I didn't change this, since there is an alias. However, the more I > > > think about it, it would be fine with me if this was changed to simply > > > 'tty'. Eventually, I might add a console-tty, which is the reason I was > > > more specific with inferior-tty, instead of just tty. What do you think? > > > > Right - what we have now is "tty", this patch preserves "tty" and adds > > "set inferior-tty". Might as well stay with that. It's a little more > > descriptive. > > > > Could you explain what you've got in mind for console-tty? > > Well, I was trying to think of a way to figure out how GDB could create > pty pair's and alert the front end of the filename (device) that it > could use to read from. I figure'd console tty could be a way to tell > GDB what terminal it should be writing it's info that it writes to the > console. Just the same way it does with the inferior. > > Another interesting idea to separate the inferior output from the > console output is to have GDB act like valgrind. Simply have GDB output > it's console data to a file descriptor that it recieves on the command > line. > > gdb --console-output=10 > > The the FE could expect to select on descriptor 10 for output from the > console and the standard (stdout) descriptor for output from the inferior. > Although I haven't thought this through much, it could possibly work. > > > > I do have one problem with this patch, before it can be approved. There > > > is no file completion for the tty command with the new patch. I can't > > > figure out how to add file completion with the > > > add_setshow_string_noescape_cmd command. Do you or anyone else know how > > > to do this? > > > > If it's a filename, perhaps you should be using > > add_setshow_filename_cmd instead. > > OK, Thanks! This works. > > Bob Rossi > > Index: 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): New function. > + (get_inferior_io_terminal): Ditto. > + (tty_command): Use accessor function. > + (_initialize_infcmd): Add inferior_tty setshow variable. > + (_initialize_infcmd): Remove tty command. > + (_initialize_infcmd): Add a tty command that is an alias. > + * inferior.h (set_inferior_io_terminal): New prototype. > + (get_inferior_io_terminal): Ditto. > + (new_tty_prefork): Add const qualifier to parameter. > + * inflow.c (inferior_thisrun_terminal): Add const qualifier. > + (new_tty_prefork): Add const qualifier to parameter. > + * nto-procfs (procfs_create_inferior): Use accessor function. > + (procfs_create_inferior): Add const qualifier to locals. > + * win32-nat.c (child_create_inferior): Ditto. > + * mi/mi-cmd-env.c (mi_cmd_inferior_tty_set): New function. > + (mi_cmd_inferior_tty_set): Ditto. > + * mi/mi-cmds.c (mi_cmds): Add inferior-tty-set and inferior-tty-show > + * mi/mi-cmds.h (mi_cmd_inferior_tty_set): Add prototype. > + (mi_cmd_inferior_tty_show): Ditto. > > Index: gdb/doc/ChangeLog > + * gdb.texinfo (GDB/MI Miscellaneous Commands): Add -inferior-tty-set > + and -inferior-tty-show. > + (Input/Output): Document "set/show inferior-tty" and tty alias. > > Index: gdb/testsuite/ChangeLog > + * gdb.mi/mi-basics.exp (test_setshow_inferior_tty): Test MI tty > + command. > > Index: gdb/fork-child.c > =================================================================== > RCS file: /cvs/src/src/gdb/fork-child.c,v > retrieving revision 1.26 > diff -w -u -r1.26 fork-child.c > --- gdb/fork-child.c 12 May 2005 20:21:17 -0000 1.26 > +++ gdb/fork-child.c 18 Jun 2005 12:21:21 -0000 > @@ -138,6 +138,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. */ > Index: gdb/infcmd.c > =================================================================== > RCS file: /cvs/src/src/gdb/infcmd.c,v > retrieving revision 1.138 > diff -w -u -r1.138 infcmd.c > --- gdb/infcmd.c 22 May 2005 14:53:34 -0000 1.138 > +++ gdb/infcmd.c 18 Jun 2005 12:21:21 -0000 > @@ -136,7 +136,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 > @@ -203,6 +203,24 @@ > > /* Accessor routines. */ > > +void > +set_inferior_io_terminal (const 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) > { > @@ -376,7 +394,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 > @@ -1988,11 +2006,15 @@ > void > _initialize_infcmd (void) > { > - struct cmd_list_element *c; > + struct cmd_list_element *c = NULL; > > - c = add_com ("tty", class_run, tty_command, > - _("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_filename_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); > + add_com_alias ("tty", "set inferior-tty", class_alias, 0); > > add_setshow_optional_filename_cmd ("args", class_run, > &inferior_args, _("\ > Index: gdb/inferior.h > =================================================================== > RCS file: /cvs/src/src/gdb/inferior.h,v > retrieving revision 1.71 > diff -w -u -r1.71 inferior.h > --- gdb/inferior.h 14 May 2005 06:07:42 -0000 1.71 > +++ gdb/inferior.h 18 Jun 2005 12:21:21 -0000 > @@ -103,9 +103,10 @@ > > extern void clear_sigio_trap (void); > > -/* File name for default use for standard in/out in the inferior. */ > +/* Set/get file name for default use for standard in/out in the inferior. */ > > -extern char *inferior_io_terminal; > +extern void set_inferior_io_terminal (const 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. */ > @@ -264,7 +265,7 @@ > > /* From inflow.c */ > > -extern void new_tty_prefork (char *); > +extern void new_tty_prefork (const char *); > > extern int gdb_has_a_terminal (void); > > Index: gdb/inflow.c > =================================================================== > RCS file: /cvs/src/src/gdb/inflow.c,v > retrieving revision 1.29 > diff -w -u -r1.29 inflow.c > --- gdb/inflow.c 15 Feb 2005 15:49:11 -0000 1.29 > +++ gdb/inflow.c 18 Jun 2005 12:21:21 -0000 > @@ -94,7 +94,7 @@ > /* The name of the tty (from the `tty' command) that we gave to the inferior > when it was last started. */ > > -static char *inferior_thisrun_terminal; > +static const char *inferior_thisrun_terminal; > > /* Nonzero if our terminal settings are in effect. Zero if the > inferior's settings are in effect. Ignored if !gdb_has_a_terminal > @@ -509,7 +509,7 @@ > the terminal specified in the NEW_TTY_PREFORK call. */ > > void > -new_tty_prefork (char *ttyname) > +new_tty_prefork (const char *ttyname) > { > /* Save the name for later, for determining whether we and the child > are sharing a tty. */ > Index: 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 > --- gdb/nto-procfs.c 15 Feb 2005 15:49:14 -0000 1.13 > +++ gdb/nto-procfs.c 18 Jun 2005 12:21:21 -0000 > @@ -981,9 +981,10 @@ > pid_t pid; > int flags, errn; > char **argv, *args; > - char *in = "", *out = "", *err = ""; > + const 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)); > Index: gdb/win32-nat.c > =================================================================== > RCS file: /cvs/src/src/gdb/win32-nat.c,v > retrieving revision 1.111 > diff -w -u -r1.111 win32-nat.c > --- gdb/win32-nat.c 23 May 2005 19:32:27 -0000 1.111 > +++ gdb/win32-nat.c 18 Jun 2005 12:21:22 -0000 > @@ -1735,6 +1735,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: gdb/doc/gdb.texinfo > =================================================================== > RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v > retrieving revision 1.261 > diff -w -u -r1.261 gdb.texinfo > --- gdb/doc/gdb.texinfo 7 Jun 2005 15:32:38 -0000 1.261 > +++ gdb/doc/gdb.texinfo 18 Jun 2005 12:21:32 -0000 > @@ -2095,7 +2095,24 @@ > > When you use the @code{tty} command or redirect input in the @code{run} > command, only the input @emph{for your program} is affected. The input > -for @value{GDBN} still comes from your terminal. > +for @value{GDBN} still comes from your terminal. @code{tty} is an alias > +for @code{set inferior-tty}. > + > +@cindex inferior tty > +@cindex set inferior controlling terminal > +You can use the @code{show inferior-tty} command to tell @value{GDBN} to > +display the name of the terminal that will be used for future runs of your > +program. > + > +@table @code > +@item set inferior-tty /dev/ttyb > +@kindex set inferior-tty > +Set the tty for the program being debugged to /dev/ttyb. > + > +@item show inferior-tty > +@kindex show inferior-tty > +Show the current tty for the program being debugged. > +@end table > > @node Attach > @section Debugging an already-running process > @@ -19134,6 +19151,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 the 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: 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 > --- gdb/mi/mi-cmd-env.c 11 Feb 2005 04:06:11 -0000 1.8 > +++ gdb/mi/mi-cmd-env.c 18 Jun 2005 12:21:32 -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: 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 > --- gdb/mi/mi-cmds.c 11 Feb 2005 18:13:55 -0000 1.16 > +++ gdb/mi/mi-cmds.c 18 Jun 2005 12:21:32 -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: 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 > --- gdb/mi/mi-cmds.h 13 Jan 2005 22:08:27 -0000 1.15 > +++ gdb/mi/mi-cmds.h 18 Jun 2005 12:21:32 -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: 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 > --- gdb/testsuite/gdb.mi/mi-basics.exp 9 Aug 2004 16:32:44 -0000 1.9 > +++ gdb/testsuite/gdb.mi/mi-basics.exp 18 Jun 2005 12:21:40 -0000 > @@ -236,12 +236,42 @@ > > } > > +proc test_setshow_inferior_tty {} { > + global mi_gdb_prompt > + > + # Test that the commands, > + # -inferior-tty-set > + # -inferior-tty-show > + # are setting/getting the same data in GDB. > + > + 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