]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/fork-child.c
Automatic date update in version.in
[thirdparty/binutils-gdb.git] / gdb / fork-child.c
CommitLineData
c906108c 1/* Fork a Unix child process, and set up to debug it, for GDB.
74a4fe32 2
b811d2c2 3 Copyright (C) 1990-2020 Free Software Foundation, Inc.
74a4fe32 4
c906108c
SS
5 Contributed by Cygnus Support.
6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#include "defs.h"
d55e5aa6 23#include "inferior.h"
4de283e4 24#include "gdbcmd.h"
d55e5aa6 25#include "terminal.h"
4de283e4 26#include "gdbthread.h"
d55e5aa6 27#include "top.h"
268a13a5
TT
28#include "gdbsupport/job-control.h"
29#include "gdbsupport/filestuff.h"
4de283e4 30#include "nat/fork-inferior.h"
268a13a5 31#include "gdbsupport/common-inferior.h"
6037b830 32
2090129c
SDJ
33/* The exec-wrapper, if any, that will be used when starting the
34 inferior. */
808480f6 35
2090129c 36static char *exec_wrapper = NULL;
808480f6 37
268a13a5 38/* See gdbsupport/common-inferior.h. */
808480f6 39
2090129c
SDJ
40const char *
41get_exec_wrapper ()
808480f6 42{
2090129c 43 return exec_wrapper;
808480f6
PA
44}
45
2090129c 46/* See nat/fork-inferior.h. */
808480f6
PA
47
48void
2090129c 49gdb_flush_out_err ()
808480f6 50{
2090129c
SDJ
51 gdb_flush (main_ui->m_gdb_stdout);
52 gdb_flush (main_ui->m_gdb_stderr);
6037b830 53}
c906108c 54
2090129c
SDJ
55/* The ui structure that will be saved on 'prefork_hook' and
56 restored on 'postfork_hook'. */
57static struct ui *saved_ui = NULL;
0db8980c 58
2090129c 59/* See nat/fork-inferior.h. */
0db8980c
SDJ
60
61void
2090129c 62prefork_hook (const char *args)
0db8980c 63{
2090129c
SDJ
64 gdb_assert (saved_ui == NULL);
65 /* Retain a copy of our UI, since the child will replace this value
66 and if we're vforked, we have to restore it. */
67 saved_ui = current_ui;
49940788 68
c906108c
SS
69 /* Tell the terminal handling subsystem what tty we plan to run on;
70 it will just record the information for later. */
05779d57 71 new_tty_prefork (current_inferior ()->tty ());
2090129c 72}
c906108c 73
2090129c 74/* See nat/fork-inferior.h. */
c906108c 75
2090129c
SDJ
76void
77postfork_hook (pid_t pid)
78{
08036331 79 inferior *inf = current_inferior ();
6c95b8df
PA
80
81 inferior_appeared (inf, pid);
7f9f62ba 82
2090129c
SDJ
83 gdb_assert (saved_ui != NULL);
84 current_ui = saved_ui;
85 saved_ui = NULL;
191c4426 86
2090129c 87 new_tty_postfork ();
c906108c
SS
88}
89
2090129c 90/* See nat/fork-inferior.h. */
c906108c
SS
91
92void
2090129c 93postfork_child_hook ()
c906108c 94{
2090129c
SDJ
95 /* This is set to the result of setpgrp, which if vforked, will be
96 visible to you in the parent process. It's only used by humans
97 for debugging. */
98 static int debug_setpgrp = 657473;
99
100 /* Make sure we switch to main_ui here in order to be able to
101 use the fprintf_unfiltered/warning/error functions. */
102 current_ui = main_ui;
d90e17a7 103
2090129c
SDJ
104 /* Create a new session for the inferior process, if necessary.
105 It will also place the inferior in a separate process group. */
106 if (create_tty_session () <= 0)
98882a26 107 {
2090129c
SDJ
108 /* No session was created, but we still want to run the inferior
109 in a separate process group. */
110 debug_setpgrp = gdb_setpgid ();
111 if (debug_setpgrp == -1)
112 perror (_("setpgrp failed in child"));
98882a26
PA
113 }
114
2090129c
SDJ
115 /* Ask the tty subsystem to switch to the one we specified
116 earlier (or to share the current terminal, if none was
117 specified). */
118 new_tty ();
119}
c906108c 120
2090129c 121/* See inferior.h. */
ccd213ac 122
2090129c
SDJ
123ptid_t
124gdb_startup_inferior (pid_t pid, int num_traps)
125{
5b6d1e4f
PA
126 inferior *inf = current_inferior ();
127 process_stratum_target *proc_target = inf->process_target ();
128
129 ptid_t ptid = startup_inferior (proc_target, pid, num_traps, NULL, NULL);
2e979b94
PA
130
131 /* Mark all threads non-executing. */
719546c4 132 set_executing (proc_target, ptid, false);
2090129c
SDJ
133
134 return ptid;
c906108c 135}
ccd213ac
DJ
136
137/* Implement the "unset exec-wrapper" command. */
138
139static void
e0b2930c 140unset_exec_wrapper_command (const char *args, int from_tty)
ccd213ac
DJ
141{
142 xfree (exec_wrapper);
143 exec_wrapper = NULL;
144}
145
98882a26
PA
146static void
147show_startup_with_shell (struct ui_file *file, int from_tty,
148 struct cmd_list_element *c, const char *value)
149{
150 fprintf_filtered (file,
151 _("Use of shell to start subprocesses is %s.\n"),
152 value);
153}
154
6c265988 155void _initialize_fork_child ();
ccd213ac 156void
6c265988 157_initialize_fork_child ()
ccd213ac
DJ
158{
159 add_setshow_filename_cmd ("exec-wrapper", class_run, &exec_wrapper, _("\
160Set a wrapper for running programs.\n\
161The wrapper prepares the system and environment for the new program."),
162 _("\
163Show the wrapper for running programs."), NULL,
164 NULL, NULL,
165 &setlist, &showlist);
166
167 add_cmd ("exec-wrapper", class_run, unset_exec_wrapper_command,
168 _("Disable use of an execution wrapper."),
169 &unsetlist);
98882a26
PA
170
171 add_setshow_boolean_cmd ("startup-with-shell", class_support,
172 &startup_with_shell, _("\
173Set use of shell to start subprocesses. The default is on."), _("\
174Show use of shell to start subprocesses."), NULL,
175 NULL,
176 show_startup_with_shell,
177 &setlist, &showlist);
ccd213ac 178}