RFC: patch for insight & target stdin

Fernando Nasser fnasser@redhat.com
Wed May 11 14:01:00 GMT 2005


Hi Jim,

The reason I left this out was because it breaks on Windows (Cygwin), at 
least the code I had at the time broke with the Cygwin of that time...

We need someone to test this on a Windows machine and see what happens.

Cheers,
Fernando


James Lemke wrote:
> I had a customer complaint about insight, that target programs could
> write to stdout but not read from stdin.  On Linux, stdout went to the
> console window and stdin came from the launch shell.  On Windows stdout
> went to the console window and stdin just failed with EBADF.
> 
> Apparently this was never implemented, so I made an attempt.  Reads from
> stdin now come from the console window.  This has been tested with
> x86-linux x xscale-elf and cygwin x xscale-elf.
> 
> I don't know gdb / gdbtk implementation well, so I'm open to comments.
> 
> Jim.
> 
> 
> 
> ------------------------------------------------------------------------
> 
> Index: ChangeLog
> ===================================================================
> RCS file: /cvs/src/src/gdb/gdbtk/ChangeLog,v
> retrieving revision 1.362
> diff -u -p -r1.362 ChangeLog
> --- ChangeLog	28 Apr 2005 23:45:06 -0000	1.362
> +++ ChangeLog	10 May 2005 20:13:42 -0000
> @@ -1,3 +1,10 @@
> +2005-05-10  James Lemke  <jim@wasabisystems.com>
> +
> +	* generic/gdbtk-hooks.c (gdbtk_fileopenin, gdbtk_read): New functions
> +	for target to read stdin from console window.
> +	* generic/gdbtk-interp.c (_stdtargin): Added.
> +	* generic/gdbtk.h (gdbtk_fileopenin): Add declaration.
> +
>  2005-04-28  Ben Elliston  <bje@au.ibm.com>
>  
>  	* generic/gdbtk-interp.c (gdbtk_interpreter_exec): Return struct
> Index: generic/gdbtk-hooks.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-hooks.c,v
> retrieving revision 1.39
> diff -u -p -r1.39 gdbtk-hooks.c
> --- generic/gdbtk-hooks.c	13 Dec 2004 20:42:20 -0000	1.39
> +++ generic/gdbtk-hooks.c	10 May 2005 20:13:42 -0000
> @@ -105,6 +105,7 @@ static void gdbtk_set_hook (struct cmd_l
>   * See note there for details.
>   */
>  
> +long gdbtk_read (struct ui_file *, char *, long);
>  void gdbtk_fputs (const char *, struct ui_file *);
>  static int gdbtk_load_hash (const char *, unsigned long);
>  
> @@ -220,6 +221,14 @@ gdbtk_two_elem_cmd (cmd_name, argv1)
>  }
>  
>  struct ui_file *
> +gdbtk_fileopenin (void)
> +{
> +  struct ui_file *file = ui_file_new ();
> +  set_ui_file_read (file, gdbtk_read);
> +  return file;
> +}
> +
> +struct ui_file *
>  gdbtk_fileopen (void)
>  {
>    struct ui_file *file = ui_file_new ();
> @@ -227,6 +236,42 @@ gdbtk_fileopen (void)
>    return file;
>  }
>  
> +/* This handles input from the gdb console.
> + */
> +
> +long
> +gdbtk_read (struct ui_file *stream, char *buf, long sizeof_buf)
> +{
> +  int result;
> +  size_t actual_len;
> +
> +  if (stream == gdb_stdtargin)
> +    {
> +      result = Tcl_Eval (gdbtk_interp, "gdbtk_console_read");
> +      if (result != TCL_OK)
> +	{
> +	  report_error ();
> +	  actual_len = 0;
> +	}
> +      else
> +        actual_len = strlen (gdbtk_interp->result);
> +
> +      /* Truncate the string if it is too big for the caller's buffer.  */
> +      if (actual_len >= sizeof_buf)
> +	actual_len = sizeof_buf - 1;
> +      
> +      memcpy (buf, gdbtk_interp->result, actual_len);
> +      buf[actual_len] = '\0';
> +      return actual_len;
> +    }
> +  else
> +    {
> +      errno = EBADF;
> +      return 0;
> +    }
> +}
> +
> +
>  /* This handles all the output from gdb.  All the gdb printf_xxx functions
>   * eventually end up here.  The output is either passed to the result_ptr
>   * where it will go to the result of some gdbtk command, or passed to the
> Index: generic/gdbtk-interp.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-interp.c,v
> retrieving revision 1.6
> diff -u -p -r1.6 gdbtk-interp.c
> --- generic/gdbtk-interp.c	28 Apr 2005 23:45:07 -0000	1.6
> +++ generic/gdbtk-interp.c	10 May 2005 20:13:42 -0000
> @@ -43,6 +43,7 @@ struct gdbtk_interp_data
>    struct ui_file *_stderr;
>    struct ui_file *_stdlog;
>    struct ui_file *_stdtarg;
> +  struct ui_file *_stdtargin;
>  };
>  
>  static struct gdbtk_interp_data *gdbtk_data;
> @@ -83,6 +84,7 @@ gdbtk_interpreter_resume (void *data)
>    gdb_stderr = d->_stderr;
>    gdb_stdlog = d->_stdlog;
>    gdb_stdtarg = d->_stdtarg;
> +  gdb_stdtargin = d->_stdtargin;
>  
>    deprecated_command_loop_hook = gdbtk_command_loop;
>  
> @@ -172,6 +174,7 @@ _initialize_gdbtk_interp (void)
>    gdbtk_data->_stderr = gdbtk_fileopen ();
>    gdbtk_data->_stdlog = gdbtk_fileopen ();
>    gdbtk_data->_stdtarg = gdbtk_fileopen ();
> +  gdbtk_data->_stdtargin = gdbtk_fileopenin ();
>    gdbtk_interp = interp_new ("insight", gdbtk_data, cli_out_new (gdbtk_data->_stdout),
>  			     &procs);
>    interp_add (gdbtk_interp);
> Index: generic/gdbtk.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk.h,v
> retrieving revision 1.9
> diff -u -p -r1.9 gdbtk.h
> --- generic/gdbtk.h	25 Jun 2004 19:44:22 -0000	1.9
> +++ generic/gdbtk.h	10 May 2005 20:13:42 -0000
> @@ -159,6 +159,7 @@ extern int gdbtk_two_elem_cmd (char *, c
>  extern int target_is_native (struct target_ops *t);
>  extern void gdbtk_fputs (const char *, struct ui_file *);
>  extern struct ui_file *gdbtk_fileopen (void);
> +extern struct ui_file *gdbtk_fileopenin (void);
>  extern int gdbtk_disable_fputs;
>  
>  #ifdef _WIN32



More information about the Insight mailing list