aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorStu Grossman <grossman@cygnus>1992-06-23 04:31:56 +0000
committerStu Grossman <grossman@cygnus>1992-06-23 04:31:56 +0000
commit671603ffa853a8ac29e814ec5312ca0248c23f42 (patch)
treed72b33f2397be59995080bc4b033d483ca4eb526 /gdb
parent0efe20a64246d8aca5e0f987063ba15181cd6290 (diff)
downloadgdb-671603ffa853a8ac29e814ec5312ca0248c23f42.zip
gdb-671603ffa853a8ac29e814ec5312ca0248c23f42.tar.gz
gdb-671603ffa853a8ac29e814ec5312ca0248c23f42.tar.bz2
* Centralize all Cadillac interface defs into defs.h.
* Use prototypes for all interface routines (fix bugs found as a result of doing so). * Make full_filename more robust in the face of null dirname/filenames. * Get pty at startup instead of at child creation time. Put GDB descriptors 0, 1 and 2 on it so that we can see the output of shell commands. * Get rid of prompt(), use print_prompt() instead. Fixes loads of stupid prompting problems.
Diffstat (limited to 'gdb')
-rwxr-xr-xgdb/cadillac.c67
1 files changed, 40 insertions, 27 deletions
diff --git a/gdb/cadillac.c b/gdb/cadillac.c
index 734e1dd..c8665e8 100755
--- a/gdb/cadillac.c
+++ b/gdb/cadillac.c
@@ -1,5 +1,5 @@
-/* Cadillac interface routines.
- Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Energize (formerly known as Cadillac) interface routines.
+ Copyright 1991, 1992 Free Software Foundation, Inc.
This file is part of GDB.
@@ -34,6 +34,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <ttyconn.h>
#include <varargs.h>
#include <sys/stat.h>
+#ifdef USG
+#include <sys/file.h>
+#endif
#include <fcntl.h>
#include <sys/filio.h>
#include <setjmp.h>
@@ -42,6 +45,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <termios.h>
#include <strings.h>
+/* Non-zero means that we're doing the cadillac interface. */
+int cadillac = 0;
+
/* Connection block for debugger<=>kernel communications. */
static Connection *conn = 0;
@@ -63,8 +69,6 @@ extern int pgrp_inferior;
extern char *source_path;
-extern int cadillac;
-
char **pprompt; /* Pointer to pointer to prompt */
/* Tell cadillac_command_line_input() where to get its text from */
@@ -79,21 +83,15 @@ static int command_line_length = 0;
#define PTY_EVENT 2
-static void
-prompt()
-{
- fputs_filtered(*pprompt, stdout);
-}
-
/* This routine redirects the output of fputs_filtered to the kernel so that
the user can see what's going on in his debugger window. */
void
cadillac_fputs(ptr)
- char *ptr;
+ const char *ptr;
{
if (conn)
- CVWriteTranscriptInfo (conn, instance_id, ptr);
+ CVWriteTranscriptInfo (conn, instance_id, (char *)ptr);
else
fputs (ptr, stdout);
}
@@ -195,9 +193,24 @@ full_filename(symtab)
if (!symtab)
return NULL;
- pathlen = strlen(symtab->dirname) + strlen(symtab->filename);
+ if (symtab->fullname)
+ return savestring(symtab->fullname, strlen(symtab->fullname));
+
+ if (symtab->dirname)
+ pathlen = strlen(symtab->dirname);
+ else
+ pathlen = 0;
+ if (symtab->filename)
+ pathlen += strlen(symtab->filename);
+
filename = xmalloc(pathlen+1);
- sprintf(filename, "%s%s", symtab->dirname, symtab->filename);
+
+ if (symtab->dirname)
+ strcpy(filename, symtab->dirname);
+ else
+ *filename = '\000';
+ if (symtab->filename)
+ strcat(filename, symtab->filename);
return filename;
}
@@ -532,6 +545,7 @@ go_busy()
}
+void
cadillac_symbol_file(objfile)
struct objfile *objfile;
{
@@ -757,8 +771,8 @@ cadillac_ignore_breakpoint(b)
/* Open up a pty and its associated tty. Return the fd of the tty. */
-char *
-cadillac_getpty()
+static void
+getpty()
{
int n, ptyfd, ttyfd;
static char dev[30];
@@ -767,9 +781,6 @@ cadillac_getpty()
#define HIGHPTY (('z' - 'p') * 16 - 1)
- if (inferior_pty >= 0) /* Only do this once */
- return dev;
-
for (n = 0; n <= HIGHPTY; n++)
{
sprintf(dev, "/dev/pty%c%x", n/16 + 'p', n%16);
@@ -795,7 +806,7 @@ cadillac_getpty()
inferior_pty = ptyfd;
inferior_tty = ttyfd;
- return dev;
+ return;
}
error ("getpty: can't get a pty\n");
@@ -974,7 +985,7 @@ kernel_dispatch(queue)
if (*text != '\000')
execute_command_1(0, queue, "%s", text);
else
- prompt(); /* User just typed a blank line */
+ print_prompt(); /* User just typed a blank line */
}
break;
case QueryResponseRType:
@@ -1336,6 +1347,11 @@ cadillac_initialize(cadillac_id, execarg)
/* Tell the rest of the world that Cadillac is now set up. */
cadillac = 1;
+
+ getpty(); /* Setup the pty */
+ dup2(inferior_tty, 0); /* Attach all GDB I/O to the pty */
+ dup2(inferior_tty, 1);
+ dup2(inferior_tty, 2);
}
/* This is called from execute_command, and provides a wrapper around
@@ -1359,7 +1375,7 @@ cadillac_call_command(cmdblk, arg, from_tty)
else
(*cmdblk->function.cfunc)(arg, from_tty);
- prompt();
+ print_prompt();
}
void
@@ -1411,14 +1427,11 @@ null_routine(arg)
/* All requests from the Cadillac kernel eventually end up here. */
void
-cadillac_main_loop(pp)
- char **pp;
+cadillac_main_loop()
{
CTtyRequest *req;
struct cleanup *old_chain;
- pprompt = pp;
-
doing_breakcommands_message = 0;
/* We will come thru here any time there is an error, so send status if
@@ -1426,7 +1439,7 @@ cadillac_main_loop(pp)
send_status();
- prompt();
+ print_prompt();
/* The actual event loop! */