mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-05 15:15:42 +00:00
Special-case "set inferior-tty /dev/tty"
The following patches will make GDB spawn inferiors in their own session and tty by default. Meaning, GDB will create and manage a pty for the inferior instead of the inferior and GDB sharing the same terminal and GDB having to juggle terminal settings depending on whether the inferior running or gdb showing the prompt. For some use cases however, it will still be useful to be able to tell GDB to spawn the inferior in the same terminal & session as GDB, like today. Setting the inferior tty to "/dev/tty" seems like an obvious way to get that, as /dev/tty is a special file that represents the terminal for the current process. This leaves "tty" with no arguments free for a different behavior. This patch hardcodes "/dev/tty" in is_gdb_terminal for that reason. gdb/ChangeLog: yyyy-mm-dd Pedro Alves <pedro@palves.net> * inflow.c (is_gdb_terminal): Hardcode "/dev/tty". (new_tty): Don't create a tty if is_gdb_terminal is true. (new_tty_postfork): Always allocate a run_terminal. (create_tty_session): Don't create a session if sharing the terminal with GDB. Change-Id: I4dc7958f823fa4e30c21a2c3fe4d8434a5d5ed40
This commit is contained in:
26
gdb/inflow.c
26
gdb/inflow.c
@@ -222,6 +222,11 @@ is_gdb_terminal (const char *tty)
|
||||
struct stat other_tty;
|
||||
int res;
|
||||
|
||||
/* Users can explicitly set the inferior tty to "/dev/tty" to mean
|
||||
"the GDB terminal". */
|
||||
if (strcmp (tty, "/dev/tty") == 0)
|
||||
return TRIBOOL_TRUE;
|
||||
|
||||
res = stat (tty, &other_tty);
|
||||
if (res == -1)
|
||||
return TRIBOOL_UNKNOWN;
|
||||
@@ -796,9 +801,10 @@ check_syscall (const char *msg, int result)
|
||||
#endif
|
||||
|
||||
void
|
||||
new_tty (void)
|
||||
new_tty ()
|
||||
{
|
||||
if (inferior_thisrun_terminal == 0)
|
||||
if (inferior_thisrun_terminal == nullptr
|
||||
|| is_gdb_terminal (inferior_thisrun_terminal))
|
||||
return;
|
||||
#if !defined(__GO32__) && !defined(_WIN32)
|
||||
int tty;
|
||||
@@ -862,13 +868,13 @@ new_tty_postfork (void)
|
||||
/* Save the name for later, for determining whether we and the child
|
||||
are sharing a tty. */
|
||||
|
||||
if (inferior_thisrun_terminal)
|
||||
{
|
||||
struct inferior *inf = current_inferior ();
|
||||
struct terminal_info *tinfo = get_inflow_inferior_data (inf);
|
||||
struct inferior *inf = current_inferior ();
|
||||
struct terminal_info *tinfo = get_inflow_inferior_data (inf);
|
||||
|
||||
tinfo->run_terminal = xstrdup (inferior_thisrun_terminal);
|
||||
}
|
||||
if (inferior_thisrun_terminal != nullptr)
|
||||
tinfo->run_terminal = xstrdup (inferior_thisrun_terminal);
|
||||
else
|
||||
tinfo->run_terminal = xstrdup ("/dev/tty");
|
||||
|
||||
inferior_thisrun_terminal = NULL;
|
||||
}
|
||||
@@ -927,7 +933,9 @@ create_tty_session (void)
|
||||
#ifdef HAVE_SETSID
|
||||
pid_t ret;
|
||||
|
||||
if (!job_control || inferior_thisrun_terminal == 0)
|
||||
if (!job_control
|
||||
|| inferior_thisrun_terminal == nullptr
|
||||
|| is_gdb_terminal (inferior_thisrun_terminal))
|
||||
return 0;
|
||||
|
||||
ret = setsid ();
|
||||
|
||||
Reference in New Issue
Block a user