public inbox for insight@sourceware.org
 help / color / mirror / Atom feed
* RFC: patch for insight & target stdin
@ 2005-05-10 20:46 James Lemke
  2005-05-11 14:01 ` Fernando Nasser
                   ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: James Lemke @ 2005-05-10 20:46 UTC (permalink / raw)
  To: insight

[-- Attachment #1: Type: text/plain, Size: 629 bytes --]

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.

-- 
James Lemke   jim@wasabisystems.com   Orillia, Ontario
http://www.wasabisystems.com

[-- Attachment #2: fsf-trunk-gdbtk.patch --]
[-- Type: text/x-patch, Size: 4354 bytes --]

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

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2005-05-27 15:57 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-05-10 20:46 RFC: patch for insight & target stdin James Lemke
2005-05-11 14:01 ` Fernando Nasser
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

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).