diff options
author | Pedro Alves <palves@redhat.com> | 2017-11-06 15:36:47 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2017-11-06 16:59:13 +0000 |
commit | 556e5da51349d00307bc05b7a6a813f71ac58664 (patch) | |
tree | 66c83a27567c5c53e76c310f339aabefc9683ea7 /gdb/gnu-nat.c | |
parent | 46f67f80ddfeea11d4a8134b347c74581faff8f6 (diff) | |
download | gdb-556e5da51349d00307bc05b7a6a813f71ac58664.zip gdb-556e5da51349d00307bc05b7a6a813f71ac58664.tar.gz gdb-556e5da51349d00307bc05b7a6a813f71ac58664.tar.bz2 |
Simplify child_terminal_inferior
The comment about Lynx in child_terminal_init reads a bit odd, since
it's not exactly clear what "This" in "This is for Lynx" is referring
to. Looking back in history makes it clearer. When the comment was
originally added, in commit 91ecc8efa9b9, back in 1994, the code
looked like this:
~~~
#ifdef PROCESS_GROUP_TYPE
#ifdef PIDGET
/* 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_process_group = PIDGET (inferior_pid);
#else
inferior_process_group = inferior_pid;
#endif
#endif
~~~
So this looked like it was about when GDB was growing support for
multi-threading, and inferior_pid was still a single int for most
ports.
Eventually we got ptid_t, so the comment isn't really useful today.
Particularly more so since we no longer support Lynx as a GDB host.
The only caller left of child_terminal_init_with_pgrp is gnu-nat.c
(the Hurd), and that target uses fork-child, so when we reach
gnu_terminal_init after spawning a new child, the current inferior
must already have the PID set, and the child must be a process group
leader.
We can't add a 'getpgid(inf->pid) == inf->pid' assertion to
child_terminal_init though (like a previous version of this patch was
doing [1]), because child_terminal_init is also reached after
attaching to a process. If we did, the new
gdb.base/attach-non-pgrp-leader.exp test would fail, with:
(gdb) attach 12415
Attaching to program: build/gdb/testsuite/outputs/gdb.base/attach-non-pgrp-leader/attach-non-pgrp-leader, process 12415
src/gdb/inflow.c:180: internal-error: void child_terminal_init(target_ops*): Assertion `getpgid (inf->pid) == inf->pid' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) FAIL: gdb.base/attach-non-pgrp-leader.exp: child: attach to child (GDB internal error)
I'm not making GDB save the pgid for attached processes with getpgid
for now, because the saved process group affects other things which
I'm leaving for following patches, like e.g., the "interrupt" command.
[1] - https://sourceware.org/ml/gdb-patches/2017-11/msg00039.html
gdb/ChangeLog:
2017-11-06 Pedro Alves <palves@redhat.com>
* gnu-nat.c (gnu_terminal_init): Delete.
(gnu_target): Don't install gnu_terminal_init.
* inflow.c (child_terminal_init_with_pgrp): Delete, merged with ...
(child_terminal_init): ... this function.
Diffstat (limited to 'gdb/gnu-nat.c')
-rw-r--r-- | gdb/gnu-nat.c | 7 |
1 files changed, 0 insertions, 7 deletions
diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c index 7cb6e4a..2ae2031 100644 --- a/gdb/gnu-nat.c +++ b/gdb/gnu-nat.c @@ -2279,12 +2279,6 @@ gnu_detach (struct target_ops *ops, const char *args, int from_tty) inf_child_maybe_unpush_target (ops); } -static void -gnu_terminal_init (struct target_ops *self) -{ - gdb_assert (gnu_current_inf); - child_terminal_init_with_pgrp (gnu_current_inf->pid); -} static void gnu_stop (struct target_ops *self, ptid_t ptid) @@ -2693,7 +2687,6 @@ gnu_target (void) t->to_wait = gnu_wait; t->to_xfer_partial = gnu_xfer_partial; t->to_find_memory_regions = gnu_find_memory_regions; - t->to_terminal_init = gnu_terminal_init; t->to_kill = gnu_kill_inferior; t->to_create_inferior = gnu_create_inferior; t->to_mourn_inferior = gnu_mourn_inferior; |