/* Low level interface to ptrace, for GDB when running under Unix.
- Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
- 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+ 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
#include "frame.h"
#include "gdb_string.h"
#include <signal.h>
#include <fcntl.h>
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
+#include "gdb_select.h"
#include "inflow.h"
#include <sys/ioctl.h>
#endif
+#ifndef O_NOCTTY
+#define O_NOCTTY 0
+#endif
+
#if defined (SIGIO) && defined (FASYNC) && defined (FD_SET) && defined (F_SETOWN)
static void handle_sigio (int);
#endif
/* The name of the tty (from the `tty' command) that we gave to the inferior
when it was last started. */
-static char *inferior_thisrun_terminal;
+static const char *inferior_thisrun_terminal;
/* Nonzero if our terminal settings are in effect. Zero if the
inferior's settings are in effect. Ignored if !gdb_has_a_terminal
#endif
gdb_has_a_terminal_flag = no;
- stdin_serial = serial_fdopen (0);
if (stdin_serial != NULL)
{
our_ttystate = serial_get_tty_state (stdin_serial);
terminal_inferior (void)
{
if (gdb_has_a_terminal () && terminal_is_ours
+ && inferior_ttystate != NULL
&& inferior_thisrun_terminal == 0)
{
int result;
result = fcntl (0, F_SETFL, tflags_ours);
result = fcntl (0, F_SETFL, tflags_ours);
#endif
-
- result = result; /* lint */
}
}
-/* ARGSUSED */
void
term_info (char *arg, int from_tty)
{
target_terminal_info (arg, from_tty);
}
-/* ARGSUSED */
void
child_terminal_info (char *args, int from_tty)
{
if (!gdb_has_a_terminal ())
{
- printf_filtered ("This GDB does not control a terminal.\n");
+ printf_filtered (_("This GDB does not control a terminal.\n"));
return;
}
- printf_filtered ("Inferior's terminal status (currently saved by GDB):\n");
+ printf_filtered (_("Inferior's terminal status (currently saved by GDB):\n"));
/* First the fcntl flags. */
{
the terminal specified in the NEW_TTY_PREFORK call. */
void
-new_tty_prefork (char *ttyname)
+new_tty_prefork (const char *ttyname)
{
/* Save the name for later, for determining whether we and the child
are sharing a tty. */
#endif
/* Now open the specified new terminal. */
-
-#ifdef USE_O_NOCTTY
tty = open (inferior_thisrun_terminal, O_RDWR | O_NOCTTY);
-#else
- tty = open (inferior_thisrun_terminal, O_RDWR);
-#endif
if (tty == -1)
{
print_sys_errmsg (inferior_thisrun_terminal, errno);
\f
/* Kill the inferior process. Make us have no inferior. */
-/* ARGSUSED */
static void
kill_command (char *arg, int from_tty)
{
some targets don't have processes! */
if (ptid_equal (inferior_ptid, null_ptid))
- error ("The program is not being run.");
+ error (_("The program is not being run."));
if (!query ("Kill the program being debugged? "))
- error ("Not confirmed.");
+ error (_("Not confirmed."));
target_kill ();
init_thread_list (); /* Destroy thread info */
print the state we are left in. */
if (target_has_stack)
{
- printf_filtered ("In %s,\n", target_longname);
- if (deprecated_selected_frame == NULL)
- fputs_filtered ("No selected stack frame.\n", gdb_stdout);
- else
- print_stack_frame (deprecated_selected_frame,
- frame_relative_level (deprecated_selected_frame), 1);
+ printf_filtered (_("In %s,\n"), target_longname);
+ print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
}
+ bfd_cache_close_all ();
}
\f
/* Call set_sigint_trap when you need to pass a signal on to an attached
process when handling SIGINT */
-/* ARGSUSED */
static void
pass_signal (int signo)
{
FD_ZERO (&readfds);
FD_SET (target_activity_fd, &readfds);
- numfds = select (target_activity_fd + 1, &readfds, NULL, NULL, NULL);
+ numfds = gdb_select (target_activity_fd + 1, &readfds, NULL, NULL, NULL);
if (numfds >= 0 && FD_ISSET (target_activity_fd, &readfds))
{
#ifndef _WIN32
set_sigio_trap (void)
{
if (target_activity_function)
- internal_error (__FILE__, __LINE__, "failed internal consistency check");
+ internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
}
void
clear_sigio_trap (void)
{
if (target_activity_function)
- internal_error (__FILE__, __LINE__, "failed internal consistency check");
+ internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
}
#endif /* No SIGIO. */
\f
return retval;
}
+/* Get all the current tty settings (including whether we have a
+ tty at all!). We can't do this in _initialize_inflow because
+ serial_fdopen() won't work until the serial_ops_list is
+ initialized, but we don't want to do it lazily either, so
+ that we can guarantee stdin_serial is opened if there is
+ a terminal. */
+void
+initialize_stdin_serial (void)
+{
+ stdin_serial = serial_fdopen (0);
+}
+
void
_initialize_inflow (void)
{
add_info ("terminal", term_info,
- "Print inferior's saved terminal status.");
+ _("Print inferior's saved terminal status."));
add_com ("kill", class_run, kill_command,
- "Kill execution of program being debugged.");
+ _("Kill execution of program being debugged."));
inferior_ptid = null_ptid;