public inbox for insight@sourceware.org
 help / color / mirror / Atom feed
From: Fernando Nasser <fnasser@redhat.com>
To: James Lemke <jim@wasabisystems.com>
Cc: insight@sourceware.org
Subject: Re: RFC: patch for insight & target stdin
Date: Wed, 11 May 2005 14:01:00 -0000	[thread overview]
Message-ID: <42820FE7.8020702@redhat.com> (raw)
In-Reply-To: <1115757946.24600.25.camel@keel.thelemkes.ca>

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

  reply	other threads:[~2005-05-11 14:01 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-10 20:46 James Lemke
2005-05-11 14:01 ` Fernando Nasser [this message]
2005-05-11 14:10   ` Dave Korn
2005-05-11 14:21   ` James Lemke
2005-05-17 13:23 ` James Lemke
2005-05-17 15:35   ` Keith Seitz
2005-05-27  1:56   ` Keith Seitz
2005-05-27 12:40     ` James Lemke
2005-05-27 15:57       ` Keith Seitz
2005-05-24 18:43 ` James Lemke
2005-05-24 18:50   ` Keith Seitz
2005-05-26 16:25     ` Multiple definition of `_solib_address' [was RE: RFC: patch for insight & target stdin] Dave Korn
2005-05-26 16:28       ` Keith Seitz
2005-05-26 16:32         ` Multiple definition of `_solib_address' [was RE: RFC: patchfor " Dave Korn
2005-05-26 16:34           ` Keith Seitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=42820FE7.8020702@redhat.com \
    --to=fnasser@redhat.com \
    --cc=insight@sourceware.org \
    --cc=jim@wasabisystems.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).