/* Low level interface to ptrace, for GDB when running under Unix.
- Copyright 1986-87, 1989, 1991-92, 1995, 1998 Free Software Foundation, Inc.
+ Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+ 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GDB.
#include "frame.h"
#include "inferior.h"
#include "command.h"
-#include "signals.h"
#include "serial.h"
#include "terminal.h"
#include "target.h"
#include "gdb_string.h"
#include <signal.h>
#include <fcntl.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
#endif
#endif /* sgtty */
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+
#if defined (SIGIO) && defined (FASYNC) && defined (FD_SET) && defined (F_SETOWN)
-static void
-handle_sigio PARAMS ((int));
+static void handle_sigio (int);
#endif
-extern void _initialize_inflow PARAMS ((void));
+extern void _initialize_inflow (void);
-static void
-pass_signal PARAMS ((int));
+static void pass_signal (int);
-static void
-kill_command PARAMS ((char *, int));
+static void kill_command (char *, int);
-static void
-terminal_ours_1 PARAMS ((int));
+static void terminal_ours_1 (int);
\f
/* Record terminal status separately for debugger and inferior. */
/* Does GDB have a terminal (on stdin)? */
int
-gdb_has_a_terminal ()
+gdb_has_a_terminal (void)
{
switch (gdb_has_a_terminal_flag)
{
fprintf_unfiltered(gdb_stderr, "[%s failed in terminal_inferior: %s]\n", \
what, strerror (errno))
-static void terminal_ours_1 PARAMS ((int));
+static void terminal_ours_1 (int);
/* Initialize the terminal settings we record for the inferior,
before we actually run the inferior. */
void
-terminal_init_inferior_with_pgrp (pgrp)
- int pgrp;
+terminal_init_inferior_with_pgrp (int pgrp)
{
if (gdb_has_a_terminal ())
{
/* We could just as well copy our_ttystate (if we felt like adding
a new function SERIAL_COPY_TTY_STATE). */
if (inferior_ttystate)
- free (inferior_ttystate);
+ xfree (inferior_ttystate);
inferior_ttystate = SERIAL_GET_TTY_STATE (stdin_serial);
#ifdef PROCESS_GROUP_TYPE
}
void
-terminal_init_inferior ()
+terminal_init_inferior (void)
{
#ifdef PROCESS_GROUP_TYPE
/* This is for Lynx, and should be cleaned up by having Lynx be a separate
debugging target with a version of target_terminal_init_inferior which
passes in the process group to a generic routine which does all the work
(and the non-threaded child_terminal_init_inferior can just pass in
- inferior_pid to the same routine). */
+ inferior_ptid to the same routine). */
/* We assume INFERIOR_PID is also the child's process group. */
- terminal_init_inferior_with_pgrp (PIDGET (inferior_pid));
+ terminal_init_inferior_with_pgrp (PIDGET (inferior_ptid));
#endif /* PROCESS_GROUP_TYPE */
}
This is preparation for starting or resuming the inferior. */
void
-terminal_inferior ()
+terminal_inferior (void)
{
if (gdb_has_a_terminal () && terminal_is_ours
&& inferior_thisrun_terminal == 0)
should be called to get back to a normal state of affairs. */
void
-terminal_ours_for_output ()
+terminal_ours_for_output (void)
{
terminal_ours_1 (1);
}
so they can be restored properly later. */
void
-terminal_ours ()
+terminal_ours (void)
{
terminal_ours_1 (0);
}
flags. */
static void
-terminal_ours_1 (output_only)
- int output_only;
+terminal_ours_1 (int output_only)
{
/* Checking inferior_thisrun_terminal is necessary so that
if GDB is running in the background, it won't block trying
if (!terminal_is_ours)
{
+#ifdef SIGTTOU
/* Ignore this signal since it will happen when we try to set the
pgrp. */
- void (*osigttou) ();
+ void (*osigttou) () = NULL;
+#endif
int result;
terminal_is_ours = 1;
#endif
if (inferior_ttystate)
- free (inferior_ttystate);
+ xfree (inferior_ttystate);
inferior_ttystate = SERIAL_GET_TTY_STATE (stdin_serial);
#ifdef HAVE_TERMIOS
inferior_process_group = tcgetpgrp (0);
/* ARGSUSED */
void
-term_info (arg, from_tty)
- char *arg;
- int from_tty;
+term_info (char *arg, int from_tty)
{
target_terminal_info (arg, from_tty);
}
/* ARGSUSED */
void
-child_terminal_info (args, from_tty)
- char *args;
- int from_tty;
+child_terminal_info (char *args, int from_tty)
{
if (!gdb_has_a_terminal ())
{
}
#ifdef PROCESS_GROUP_TYPE
- printf_filtered ("Process group = %d\n", inferior_process_group);
+ printf_filtered ("Process group = %d\n",
+ (int) inferior_process_group);
#endif
- SERIAL_PRINT_TTY_STATE (stdin_serial, inferior_ttystate);
+ SERIAL_PRINT_TTY_STATE (stdin_serial, inferior_ttystate, gdb_stdout);
}
\f
/* NEW_TTY_PREFORK is called before forking a new child process,
the terminal specified in the NEW_TTY_PREFORK call. */
void
-new_tty_prefork (ttyname)
- char *ttyname;
+new_tty_prefork (char *ttyname)
{
/* Save the name for later, for determining whether we and the child
are sharing a tty. */
}
void
-new_tty ()
+new_tty (void)
{
register int tty;
/* ARGSUSED */
static void
-kill_command (arg, from_tty)
- char *arg;
- int from_tty;
+kill_command (char *arg, int from_tty)
{
- /* FIXME: This should not really be inferior_pid (or target_has_execution).
+ /* FIXME: This should not really be inferior_ptid (or target_has_execution).
It should be a distinct flag that indicates that a target is active, cuz
some targets don't have processes! */
- if (inferior_pid == 0)
+ if (ptid_equal (inferior_ptid, null_ptid))
error ("The program is not being run.");
if (!query ("Kill the program being debugged? "))
error ("Not confirmed.");
/* ARGSUSED */
static void
-pass_signal (signo)
- int signo;
+pass_signal (int signo)
{
#ifndef _WIN32
- kill (PIDGET (inferior_pid), SIGINT);
+ kill (PIDGET (inferior_ptid), SIGINT);
#endif
}
static void (*osig) ();
void
-set_sigint_trap ()
+set_sigint_trap (void)
{
if (attach_flag || inferior_thisrun_terminal)
{
}
void
-clear_sigint_trap ()
+clear_sigint_trap (void)
{
if (attach_flag || inferior_thisrun_terminal)
{
static void (*old_sigio) ();
static void
-handle_sigio (signo)
- int signo;
+handle_sigio (int signo)
{
int numfds;
fd_set readfds;
{
#ifndef _WIN32
if ((*target_activity_function) ())
- kill (inferior_pid, SIGINT);
+ kill (PIDGET (inferior_ptid), SIGINT);
#endif
}
}
static int old_fcntl_flags;
void
-set_sigio_trap ()
+set_sigio_trap (void)
{
if (target_activity_function)
{
}
void
-clear_sigio_trap ()
+clear_sigio_trap (void)
{
if (target_activity_function)
{
}
#else /* No SIGIO. */
void
-set_sigio_trap ()
+set_sigio_trap (void)
{
if (target_activity_function)
- abort ();
+ internal_error (__FILE__, __LINE__, "failed internal consistency check");
}
void
-clear_sigio_trap ()
+clear_sigio_trap (void)
{
if (target_activity_function)
- abort ();
+ internal_error (__FILE__, __LINE__, "failed internal consistency check");
}
#endif /* No SIGIO. */
\f
calls setpgrp and a setpgrp which does nothing (any system with job control
will have one or the other). */
int
-gdb_setpgid ()
+gdb_setpgid (void)
{
int retval = 0;
}
void
-_initialize_inflow ()
+_initialize_inflow (void)
{
add_info ("terminal", term_info,
"Print inferior's saved terminal status.");
add_com ("kill", class_run, kill_command,
"Kill execution of program being debugged.");
- inferior_pid = 0;
+ inferior_ptid = null_ptid;
terminal_is_ours = 1;