Do not include defs.h or server.h in any header file
[deliverable/binutils-gdb.git] / gdb / inflow.c
CommitLineData
c906108c 1/* Low level interface to ptrace, for GDB when running under Unix.
ecd75fc8 2 Copyright (C) 1986-2014 Free Software Foundation, Inc.
c906108c 3
c5aa993b 4 This file is part of GDB.
c906108c 5
c5aa993b
JM
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
a9762ec7 8 the Free Software Foundation; either version 3 of the License, or
c5aa993b 9 (at your option) any later version.
c906108c 10
c5aa993b
JM
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
c906108c 15
c5aa993b 16 You should have received a copy of the GNU General Public License
a9762ec7 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
18
19#include "defs.h"
20#include "frame.h"
21#include "inferior.h"
22#include "command.h"
c906108c
SS
23#include "serial.h"
24#include "terminal.h"
25#include "target.h"
26#include "gdbthread.h"
7e1789f5 27#include "observer.h"
c906108c 28
0e9f083f 29#include <string.h>
c906108c
SS
30#include <signal.h>
31#include <fcntl.h>
0ea3f30e 32#include "gdb_select.h"
c906108c 33
44270758 34#include "inflow.h"
7bfc9434 35#include "gdbcmd.h"
c906108c 36
c2d11a7d
JM
37#ifdef HAVE_SYS_IOCTL_H
38#include <sys/ioctl.h>
39#endif
40
f2acbe1c
MK
41#ifndef O_NOCTTY
42#define O_NOCTTY 0
43#endif
44
a14ed312 45extern void _initialize_inflow (void);
392a587b 46
a14ed312 47static void pass_signal (int);
c906108c 48
d6b64346 49static void child_terminal_ours_1 (int);
c906108c
SS
50\f
51/* Record terminal status separately for debugger and inferior. */
52
819cc324 53static struct serial *stdin_serial;
c906108c 54
7e1789f5
PA
55/* Terminal related info we need to keep track of. Each inferior
56 holds an instance of this structure --- we save it whenever the
57 corresponding inferior stops, and restore it to the foreground
58 inferior when it resumes. */
59struct terminal_info
60{
61 /* The name of the tty (from the `tty' command) that we gave to the
62 inferior when it was started. */
191c4426 63 char *run_terminal;
7e1789f5
PA
64
65 /* TTY state. We save it whenever the inferior stops, and restore
66 it when it resumes. */
67 serial_ttystate ttystate;
68
69#ifdef PROCESS_GROUP_TYPE
70 /* Process group. Saved and restored just like ttystate. */
71 PROCESS_GROUP_TYPE process_group;
72#endif
c906108c 73
7e1789f5
PA
74 /* fcntl flags. Saved and restored just like ttystate. */
75 int tflags;
76};
c906108c 77
7e1789f5
PA
78/* Our own tty state, which we restore every time we need to deal with
79 the terminal. This is only set once, when GDB first starts. The
80 settings of flags which readline saves and restores and
81 unimportant. */
82static struct terminal_info our_terminal_info;
c906108c 83
6c95b8df
PA
84static struct terminal_info *get_inflow_inferior_data (struct inferior *);
85
c906108c 86#ifdef PROCESS_GROUP_TYPE
7e1789f5
PA
87
88/* Return the process group of the current inferior. */
89
90PROCESS_GROUP_TYPE
91inferior_process_group (void)
92{
6c95b8df 93 return get_inflow_inferior_data (current_inferior ())->process_group;
7e1789f5 94}
c906108c
SS
95#endif
96
97/* While the inferior is running, we want SIGINT and SIGQUIT to go to the
98 inferior only. If we have job control, that takes care of it. If not,
99 we save our handlers in these two variables and set SIGINT and SIGQUIT
100 to SIG_IGN. */
101
102static void (*sigint_ours) ();
103static void (*sigquit_ours) ();
104
7e1789f5
PA
105/* The name of the tty (from the `tty' command) that we're giving to
106 the inferior when starting it up. This is only (and should only
191c4426
PA
107 be) used as a transient global by new_tty_prefork,
108 create_tty_session, new_tty and new_tty_postfork, all called from
109 fork_inferior, while forking a new child. */
3cb3b8df 110static const char *inferior_thisrun_terminal;
c906108c
SS
111
112/* Nonzero if our terminal settings are in effect. Zero if the
113 inferior's settings are in effect. Ignored if !gdb_has_a_terminal
114 (). */
115
116int terminal_is_ours;
117
64a0ac84
PA
118#ifdef PROCESS_GROUP_TYPE
119static PROCESS_GROUP_TYPE
120gdb_getpgrp (void)
121{
122 int process_group = -1;
abbb1732 123
64a0ac84
PA
124#ifdef HAVE_TERMIOS
125 process_group = tcgetpgrp (0);
126#endif
127#ifdef HAVE_TERMIO
128 process_group = getpgrp ();
129#endif
130#ifdef HAVE_SGTTY
131 ioctl (0, TIOCGPGRP, &process_group);
132#endif
133 return process_group;
134}
135#endif
136
c5aa993b
JM
137enum
138 {
139 yes, no, have_not_checked
140 }
141gdb_has_a_terminal_flag = have_not_checked;
c906108c 142
7bfc9434
JB
143/* The value of the "interactive-mode" setting. */
144static enum auto_boolean interactive_mode = AUTO_BOOLEAN_AUTO;
145
146/* Implement the "show interactive-mode" option. */
147
148static void
149show_interactive_mode (struct ui_file *file, int from_tty,
150 struct cmd_list_element *c,
151 const char *value)
152{
153 if (interactive_mode == AUTO_BOOLEAN_AUTO)
154 fprintf_filtered (file, "Debugger's interactive mode "
155 "is %s (currently %s).\n",
156 value, gdb_has_a_terminal () ? "on" : "off");
157 else
158 fprintf_filtered (file, "Debugger's interactive mode is %s.\n", value);
159}
160
c906108c
SS
161/* Does GDB have a terminal (on stdin)? */
162int
fba45db2 163gdb_has_a_terminal (void)
c906108c 164{
7bfc9434 165 if (interactive_mode != AUTO_BOOLEAN_AUTO)
6b0c4c1f 166 return interactive_mode == AUTO_BOOLEAN_TRUE;
7bfc9434 167
c906108c
SS
168 switch (gdb_has_a_terminal_flag)
169 {
170 case yes:
171 return 1;
172 case no:
173 return 0;
174 case have_not_checked:
2cd58942
AC
175 /* Get all the current tty settings (including whether we have a
176 tty at all!). Can't do this in _initialize_inflow because
177 serial_fdopen() won't work until the serial_ops_list is
178 initialized. */
c906108c
SS
179
180#ifdef F_GETFL
7e1789f5 181 our_terminal_info.tflags = fcntl (0, F_GETFL, 0);
c906108c
SS
182#endif
183
184 gdb_has_a_terminal_flag = no;
c906108c
SS
185 if (stdin_serial != NULL)
186 {
7e1789f5 187 our_terminal_info.ttystate = serial_get_tty_state (stdin_serial);
c906108c 188
7e1789f5 189 if (our_terminal_info.ttystate != NULL)
c906108c
SS
190 {
191 gdb_has_a_terminal_flag = yes;
807bddf3 192#ifdef PROCESS_GROUP_TYPE
7e1789f5 193 our_terminal_info.process_group = gdb_getpgrp ();
807bddf3 194#endif
c906108c
SS
195 }
196 }
197
198 return gdb_has_a_terminal_flag == yes;
199 default:
200 /* "Can't happen". */
201 return 0;
202 }
203}
204
205/* Macro for printing errors from ioctl operations */
206
207#define OOPSY(what) \
208 if (result == -1) \
209 fprintf_unfiltered(gdb_stderr, "[%s failed in terminal_inferior: %s]\n", \
dc672865 210 what, safe_strerror (errno))
c906108c 211
c906108c
SS
212/* Initialize the terminal settings we record for the inferior,
213 before we actually run the inferior. */
214
215void
d6b64346 216child_terminal_init_with_pgrp (int pgrp)
c906108c 217{
6f64ef53
PA
218 struct inferior *inf = current_inferior ();
219 struct terminal_info *tinfo = get_inflow_inferior_data (inf);
220
221#ifdef PROCESS_GROUP_TYPE
222 /* Store the process group even without a terminal as it is used not
223 only to reset the tty foreground process group, but also to
224 interrupt the inferior. */
225 tinfo->process_group = pgrp;
226#endif
227
c906108c
SS
228 if (gdb_has_a_terminal ())
229 {
6c95b8df 230 xfree (tinfo->ttystate);
1e182ce8
UW
231 tinfo->ttystate = serial_copy_tty_state (stdin_serial,
232 our_terminal_info.ttystate);
c906108c 233
c906108c 234 /* Make sure that next time we call terminal_inferior (which will be
c5aa993b
JM
235 before the program runs, as it needs to be), we install the new
236 process group. */
c906108c
SS
237 terminal_is_ours = 1;
238 }
239}
240
a790ad35
SC
241/* Save the terminal settings again. This is necessary for the TUI
242 when it switches to TUI or non-TUI mode; curses changes the terminal
243 and gdb must be able to restore it correctly. */
244
245void
d6b64346 246child_terminal_save_ours (struct target_ops *self)
a790ad35
SC
247{
248 if (gdb_has_a_terminal ())
249 {
7e1789f5
PA
250 xfree (our_terminal_info.ttystate);
251 our_terminal_info.ttystate = serial_get_tty_state (stdin_serial);
a790ad35
SC
252 }
253}
254
c906108c 255void
d6b64346 256child_terminal_init (struct target_ops *self)
c906108c
SS
257{
258#ifdef PROCESS_GROUP_TYPE
d6b64346
PA
259 /* This is for Lynx, and should be cleaned up by having Lynx be a
260 separate debugging target with a version of target_terminal_init
261 which passes in the process group to a generic routine which does
262 all the work (and the non-threaded child_terminal_init can just
263 pass in inferior_ptid to the same routine). */
c906108c 264 /* We assume INFERIOR_PID is also the child's process group. */
d6b64346 265 child_terminal_init_with_pgrp (ptid_get_pid (inferior_ptid));
c906108c
SS
266#endif /* PROCESS_GROUP_TYPE */
267}
268
269/* Put the inferior's terminal settings into effect.
270 This is preparation for starting or resuming the inferior. */
271
272void
d6b64346 273child_terminal_inferior (struct target_ops *self)
c906108c 274{
7e1789f5 275 struct inferior *inf;
6c95b8df 276 struct terminal_info *tinfo;
7e1789f5
PA
277
278 if (!terminal_is_ours)
279 return;
280
281 inf = current_inferior ();
6c95b8df 282 tinfo = get_inflow_inferior_data (inf);
7e1789f5
PA
283
284 if (gdb_has_a_terminal ()
6c95b8df
PA
285 && tinfo->ttystate != NULL
286 && tinfo->run_terminal == NULL)
c906108c
SS
287 {
288 int result;
289
290#ifdef F_GETFL
291 /* Is there a reason this is being done twice? It happens both
c5aa993b
JM
292 places we use F_SETFL, so I'm inclined to think perhaps there
293 is some reason, however perverse. Perhaps not though... */
6c95b8df
PA
294 result = fcntl (0, F_SETFL, tinfo->tflags);
295 result = fcntl (0, F_SETFL, tinfo->tflags);
c906108c
SS
296 OOPSY ("fcntl F_SETFL");
297#endif
298
299 /* Because we were careful to not change in or out of raw mode in
c5aa993b
JM
300 terminal_ours, we will not change in our out of raw mode with
301 this call, so we don't flush any input. */
7e1789f5 302 result = serial_set_tty_state (stdin_serial,
6c95b8df 303 tinfo->ttystate);
c906108c
SS
304 OOPSY ("setting tty state");
305
306 if (!job_control)
307 {
c5aa993b 308 sigint_ours = (void (*)()) signal (SIGINT, SIG_IGN);
c906108c 309#ifdef SIGQUIT
c5aa993b 310 sigquit_ours = (void (*)()) signal (SIGQUIT, SIG_IGN);
c906108c
SS
311#endif
312 }
313
314 /* If attach_flag is set, we don't know whether we are sharing a
c5aa993b
JM
315 terminal with the inferior or not. (attaching a process
316 without a terminal is one case where we do not; attaching a
317 process which we ran from the same shell as GDB via `&' is
318 one case where we do, I think (but perhaps this is not
319 `sharing' in the sense that we need to save and restore tty
320 state)). I don't know if there is any way to tell whether we
321 are sharing a terminal. So what we do is to go through all
322 the saving and restoring of the tty state, but ignore errors
323 setting the process group, which will happen if we are not
324 sharing a terminal). */
c906108c
SS
325
326 if (job_control)
327 {
328#ifdef HAVE_TERMIOS
6c95b8df 329 result = tcsetpgrp (0, tinfo->process_group);
181e7f93 330 if (!inf->attach_flag)
c906108c
SS
331 OOPSY ("tcsetpgrp");
332#endif
333
334#ifdef HAVE_SGTTY
6c95b8df 335 result = ioctl (0, TIOCSPGRP, &tinfo->process_group);
181e7f93 336 if (!inf->attach_flag)
c906108c
SS
337 OOPSY ("TIOCSPGRP");
338#endif
339 }
340
341 }
342 terminal_is_ours = 0;
343}
344
345/* Put some of our terminal settings into effect,
346 enough to get proper results from our output,
347 but do not change into or out of RAW mode
348 so that no input is discarded.
349
350 After doing this, either terminal_ours or terminal_inferior
351 should be called to get back to a normal state of affairs. */
352
353void
d6b64346 354child_terminal_ours_for_output (struct target_ops *self)
c906108c 355{
d6b64346 356 child_terminal_ours_1 (1);
c906108c
SS
357}
358
359/* Put our terminal settings into effect.
360 First record the inferior's terminal settings
361 so they can be restored properly later. */
362
363void
d6b64346 364child_terminal_ours (struct target_ops *self)
c906108c 365{
d6b64346 366 child_terminal_ours_1 (0);
c906108c
SS
367}
368
369/* output_only is not used, and should not be used unless we introduce
370 separate terminal_is_ours and terminal_is_ours_for_output
371 flags. */
372
373static void
d6b64346 374child_terminal_ours_1 (int output_only)
c906108c 375{
7e1789f5 376 struct inferior *inf;
6c95b8df 377 struct terminal_info *tinfo;
7e1789f5
PA
378
379 if (terminal_is_ours)
380 return;
381
d9d2d8b6
PA
382 terminal_is_ours = 1;
383
7e1789f5 384 /* Checking inferior->run_terminal is necessary so that
c906108c
SS
385 if GDB is running in the background, it won't block trying
386 to do the ioctl()'s below. Checking gdb_has_a_terminal
387 avoids attempting all the ioctl's when running in batch. */
7e1789f5
PA
388
389 inf = current_inferior ();
6c95b8df 390 tinfo = get_inflow_inferior_data (inf);
7e1789f5 391
6c95b8df 392 if (tinfo->run_terminal != NULL || gdb_has_a_terminal () == 0)
c906108c
SS
393 return;
394
c906108c 395 {
4b69c284 396#ifdef SIGTTOU
c906108c 397 /* Ignore this signal since it will happen when we try to set the
c5aa993b 398 pgrp. */
4b69c284
AC
399 void (*osigttou) () = NULL;
400#endif
c906108c
SS
401 int result;
402
c906108c
SS
403#ifdef SIGTTOU
404 if (job_control)
c5aa993b 405 osigttou = (void (*)()) signal (SIGTTOU, SIG_IGN);
c906108c
SS
406#endif
407
6c95b8df
PA
408 xfree (tinfo->ttystate);
409 tinfo->ttystate = serial_get_tty_state (stdin_serial);
64a0ac84 410
49a834f9 411#ifdef PROCESS_GROUP_TYPE
181e7f93 412 if (!inf->attach_flag)
64a0ac84
PA
413 /* If setpgrp failed in terminal_inferior, this would give us
414 our process group instead of the inferior's. See
415 terminal_inferior for details. */
6c95b8df 416 tinfo->process_group = gdb_getpgrp ();
49a834f9 417#endif
c906108c
SS
418
419 /* Here we used to set ICANON in our ttystate, but I believe this
c5aa993b
JM
420 was an artifact from before when we used readline. Readline sets
421 the tty state when it needs to.
422 FIXME-maybe: However, query() expects non-raw mode and doesn't
423 use readline. Maybe query should use readline (on the other hand,
424 this only matters for HAVE_SGTTY, not termio or termios, I think). */
c906108c
SS
425
426 /* Set tty state to our_ttystate. We don't change in our out of raw
c5aa993b
JM
427 mode, to avoid flushing input. We need to do the same thing
428 regardless of output_only, because we don't have separate
429 terminal_is_ours and terminal_is_ours_for_output flags. It's OK,
1777feb0
MS
430 though, since readline will deal with raw mode when/if it needs
431 to. */
c906108c 432
7e1789f5 433 serial_noflush_set_tty_state (stdin_serial, our_terminal_info.ttystate,
6c95b8df 434 tinfo->ttystate);
c906108c
SS
435
436 if (job_control)
437 {
438#ifdef HAVE_TERMIOS
7e1789f5 439 result = tcsetpgrp (0, our_terminal_info.process_group);
c906108c
SS
440#if 0
441 /* This fails on Ultrix with EINVAL if you run the testsuite
442 in the background with nohup, and then log out. GDB never
443 used to check for an error here, so perhaps there are other
444 such situations as well. */
445 if (result == -1)
3e43a32a 446 fprintf_unfiltered (gdb_stderr,
d6b64346 447 "[tcsetpgrp failed in child_terminal_ours: %s]\n",
dc672865 448 safe_strerror (errno));
c906108c
SS
449#endif
450#endif /* termios */
451
452#ifdef HAVE_SGTTY
7e1789f5 453 result = ioctl (0, TIOCSPGRP, &our_terminal_info.process_group);
c906108c
SS
454#endif
455 }
456
457#ifdef SIGTTOU
458 if (job_control)
459 signal (SIGTTOU, osigttou);
460#endif
461
462 if (!job_control)
463 {
464 signal (SIGINT, sigint_ours);
465#ifdef SIGQUIT
466 signal (SIGQUIT, sigquit_ours);
467#endif
468 }
469
470#ifdef F_GETFL
6c95b8df 471 tinfo->tflags = fcntl (0, F_GETFL, 0);
c906108c
SS
472
473 /* Is there a reason this is being done twice? It happens both
c5aa993b
JM
474 places we use F_SETFL, so I'm inclined to think perhaps there
475 is some reason, however perverse. Perhaps not though... */
7e1789f5
PA
476 result = fcntl (0, F_SETFL, our_terminal_info.tflags);
477 result = fcntl (0, F_SETFL, our_terminal_info.tflags);
c906108c 478#endif
c906108c
SS
479 }
480}
481
6c95b8df
PA
482/* Per-inferior data key. */
483static const struct inferior_data *inflow_inferior_data;
7e1789f5
PA
484
485static void
6c95b8df 486inflow_inferior_data_cleanup (struct inferior *inf, void *arg)
7e1789f5 487{
487ad57c 488 struct terminal_info *info = arg;
6c95b8df 489
487ad57c
YQ
490 xfree (info->run_terminal);
491 xfree (info->ttystate);
492 xfree (info);
6c95b8df
PA
493}
494
495/* Get the current svr4 data. If none is found yet, add it now. This
496 function always returns a valid object. */
497
498static struct terminal_info *
499get_inflow_inferior_data (struct inferior *inf)
500{
501 struct terminal_info *info;
502
503 info = inferior_data (inf, inflow_inferior_data);
504 if (info == NULL)
505 {
41bf6aca 506 info = XCNEW (struct terminal_info);
6c95b8df
PA
507 set_inferior_data (inf, inflow_inferior_data, info);
508 }
7e1789f5 509
6c95b8df 510 return info;
7e1789f5
PA
511}
512
513/* This is a "inferior_exit" observer. Releases the TERMINAL_INFO member
514 of the inferior structure. This field is private to inflow.c, and
515 its type is opaque to the rest of GDB. PID is the target pid of
516 the inferior that is about to be removed from the inferior
517 list. */
518
519static void
a79b8f6e 520inflow_inferior_exit (struct inferior *inf)
7e1789f5 521{
6c95b8df 522 struct terminal_info *info;
7e1789f5 523
6c95b8df
PA
524 info = inferior_data (inf, inflow_inferior_data);
525 if (info != NULL)
526 {
527 xfree (info->run_terminal);
1e182ce8 528 xfree (info->ttystate);
6c95b8df
PA
529 xfree (info);
530 set_inferior_data (inf, inflow_inferior_data, NULL);
531 }
7e1789f5
PA
532}
533
191c4426
PA
534void
535copy_terminal_info (struct inferior *to, struct inferior *from)
536{
6c95b8df
PA
537 struct terminal_info *tinfo_to, *tinfo_from;
538
539 tinfo_to = get_inflow_inferior_data (to);
540 tinfo_from = get_inflow_inferior_data (from);
1e182ce8
UW
541
542 xfree (tinfo_to->run_terminal);
543 xfree (tinfo_to->ttystate);
544
6c95b8df 545 *tinfo_to = *tinfo_from;
1e182ce8 546
6c95b8df
PA
547 if (tinfo_from->run_terminal)
548 tinfo_to->run_terminal
549 = xstrdup (tinfo_from->run_terminal);
1e182ce8
UW
550
551 if (tinfo_from->ttystate)
552 tinfo_to->ttystate
553 = serial_copy_tty_state (stdin_serial, tinfo_from->ttystate);
191c4426
PA
554}
555
c906108c 556void
fba45db2 557term_info (char *arg, int from_tty)
c906108c
SS
558{
559 target_terminal_info (arg, from_tty);
560}
561
c906108c 562void
0a4f40a2 563child_terminal_info (struct target_ops *self, const char *args, int from_tty)
c906108c 564{
7e1789f5 565 struct inferior *inf;
6c95b8df 566 struct terminal_info *tinfo;
7e1789f5 567
c906108c
SS
568 if (!gdb_has_a_terminal ())
569 {
a3f17187 570 printf_filtered (_("This GDB does not control a terminal.\n"));
c906108c
SS
571 return;
572 }
573
7e1789f5
PA
574 if (ptid_equal (inferior_ptid, null_ptid))
575 return;
576
577 inf = current_inferior ();
6c95b8df 578 tinfo = get_inflow_inferior_data (inf);
7e1789f5 579
3e43a32a
MS
580 printf_filtered (_("Inferior's terminal status "
581 "(currently saved by GDB):\n"));
c906108c
SS
582
583 /* First the fcntl flags. */
584 {
585 int flags;
c5aa993b 586
6c95b8df 587 flags = tinfo->tflags;
c906108c
SS
588
589 printf_filtered ("File descriptor flags = ");
590
591#ifndef O_ACCMODE
592#define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
593#endif
1777feb0 594 /* (O_ACCMODE) parens are to avoid Ultrix header file bug. */
c906108c
SS
595 switch (flags & (O_ACCMODE))
596 {
c5aa993b
JM
597 case O_RDONLY:
598 printf_filtered ("O_RDONLY");
599 break;
600 case O_WRONLY:
601 printf_filtered ("O_WRONLY");
602 break;
603 case O_RDWR:
604 printf_filtered ("O_RDWR");
605 break;
c906108c
SS
606 }
607 flags &= ~(O_ACCMODE);
608
609#ifdef O_NONBLOCK
c5aa993b 610 if (flags & O_NONBLOCK)
c906108c
SS
611 printf_filtered (" | O_NONBLOCK");
612 flags &= ~O_NONBLOCK;
613#endif
c5aa993b 614
c906108c
SS
615#if defined (O_NDELAY)
616 /* If O_NDELAY and O_NONBLOCK are defined to the same thing, we will
617 print it as O_NONBLOCK, which is good cause that is what POSIX
618 has, and the flag will already be cleared by the time we get here. */
619 if (flags & O_NDELAY)
620 printf_filtered (" | O_NDELAY");
621 flags &= ~O_NDELAY;
622#endif
623
624 if (flags & O_APPEND)
625 printf_filtered (" | O_APPEND");
626 flags &= ~O_APPEND;
627
628#if defined (O_BINARY)
629 if (flags & O_BINARY)
630 printf_filtered (" | O_BINARY");
631 flags &= ~O_BINARY;
632#endif
633
634 if (flags)
635 printf_filtered (" | 0x%x", flags);
636 printf_filtered ("\n");
637 }
638
639#ifdef PROCESS_GROUP_TYPE
6c95b8df 640 printf_filtered ("Process group = %d\n", (int) tinfo->process_group);
c906108c
SS
641#endif
642
6c95b8df 643 serial_print_tty_state (stdin_serial, tinfo->ttystate, gdb_stdout);
c906108c
SS
644}
645\f
646/* NEW_TTY_PREFORK is called before forking a new child process,
647 so we can record the state of ttys in the child to be formed.
648 TTYNAME is null if we are to share the terminal with gdb;
649 or points to a string containing the name of the desired tty.
650
651 NEW_TTY is called in new child processes under Unix, which will
652 become debugger target processes. This actually switches to
653 the terminal specified in the NEW_TTY_PREFORK call. */
654
655void
3cb3b8df 656new_tty_prefork (const char *ttyname)
c906108c
SS
657{
658 /* Save the name for later, for determining whether we and the child
659 are sharing a tty. */
660 inferior_thisrun_terminal = ttyname;
661}
662
e6d088ec 663#if !defined(__GO32__) && !defined(_WIN32)
bf1d7d9c
JB
664/* If RESULT, assumed to be the return value from a system call, is
665 negative, print the error message indicated by errno and exit.
666 MSG should identify the operation that failed. */
667static void
668check_syscall (const char *msg, int result)
669{
670 if (result < 0)
671 {
672 print_sys_errmsg (msg, errno);
673 _exit (1);
674 }
675}
e6d088ec 676#endif
bf1d7d9c 677
c906108c 678void
fba45db2 679new_tty (void)
c906108c 680{
52f0bd74 681 int tty;
c906108c
SS
682
683 if (inferior_thisrun_terminal == 0)
684 return;
685#if !defined(__GO32__) && !defined(_WIN32)
686#ifdef TIOCNOTTY
687 /* Disconnect the child process from our controlling terminal. On some
688 systems (SVR4 for example), this may cause a SIGTTOU, so temporarily
1777feb0 689 ignore SIGTTOU. */
c5aa993b 690 tty = open ("/dev/tty", O_RDWR);
c906108c
SS
691 if (tty > 0)
692 {
693 void (*osigttou) ();
694
c5aa993b
JM
695 osigttou = (void (*)()) signal (SIGTTOU, SIG_IGN);
696 ioctl (tty, TIOCNOTTY, 0);
697 close (tty);
698 signal (SIGTTOU, osigttou);
c906108c
SS
699 }
700#endif
701
702 /* Now open the specified new terminal. */
c5aa993b 703 tty = open (inferior_thisrun_terminal, O_RDWR | O_NOCTTY);
bf1d7d9c 704 check_syscall (inferior_thisrun_terminal, tty);
c906108c
SS
705
706 /* Avoid use of dup2; doesn't exist on all systems. */
707 if (tty != 0)
c5aa993b
JM
708 {
709 close (0);
bf1d7d9c 710 check_syscall ("dup'ing tty into fd 0", dup (tty));
c5aa993b 711 }
c906108c 712 if (tty != 1)
c5aa993b
JM
713 {
714 close (1);
bf1d7d9c 715 check_syscall ("dup'ing tty into fd 1", dup (tty));
c5aa993b 716 }
c906108c 717 if (tty != 2)
c5aa993b
JM
718 {
719 close (2);
bf1d7d9c 720 check_syscall ("dup'ing tty into fd 2", dup (tty));
c5aa993b 721 }
83116857
TJB
722
723#ifdef TIOCSCTTY
724 /* Make tty our new controlling terminal. */
725 if (ioctl (tty, TIOCSCTTY, 0) == -1)
726 /* Mention GDB in warning because it will appear in the inferior's
727 terminal instead of GDB's. */
a73c6dcd 728 warning (_("GDB: Failed to set controlling terminal: %s"),
83116857
TJB
729 safe_strerror (errno));
730#endif
731
c906108c 732 if (tty > 2)
c5aa993b
JM
733 close (tty);
734#endif /* !go32 && !win32 */
c906108c 735}
191c4426
PA
736
737/* NEW_TTY_POSTFORK is called after forking a new child process, and
738 adding it to the inferior table, to store the TTYNAME being used by
739 the child, or null if it sharing the terminal with gdb. */
740
741void
742new_tty_postfork (void)
743{
744 /* Save the name for later, for determining whether we and the child
745 are sharing a tty. */
746
747 if (inferior_thisrun_terminal)
6c95b8df
PA
748 {
749 struct inferior *inf = current_inferior ();
750 struct terminal_info *tinfo = get_inflow_inferior_data (inf);
751
752 tinfo->run_terminal = xstrdup (inferior_thisrun_terminal);
753 }
191c4426
PA
754
755 inferior_thisrun_terminal = NULL;
756}
757
c906108c
SS
758\f
759/* Call set_sigint_trap when you need to pass a signal on to an attached
1777feb0 760 process when handling SIGINT. */
c906108c 761
c906108c 762static void
fba45db2 763pass_signal (int signo)
c906108c
SS
764{
765#ifndef _WIN32
dfd4cc63 766 kill (ptid_get_pid (inferior_ptid), SIGINT);
c906108c
SS
767#endif
768}
769
c5aa993b 770static void (*osig) ();
7e1789f5 771static int osig_set;
c906108c
SS
772
773void
fba45db2 774set_sigint_trap (void)
c906108c 775{
181e7f93 776 struct inferior *inf = current_inferior ();
6c95b8df
PA
777 struct terminal_info *tinfo = get_inflow_inferior_data (inf);
778
779 if (inf->attach_flag || tinfo->run_terminal)
c906108c 780 {
c5aa993b 781 osig = (void (*)()) signal (SIGINT, pass_signal);
7e1789f5 782 osig_set = 1;
c906108c 783 }
7e1789f5
PA
784 else
785 osig_set = 0;
c906108c
SS
786}
787
788void
fba45db2 789clear_sigint_trap (void)
c906108c 790{
7e1789f5 791 if (osig_set)
c906108c
SS
792 {
793 signal (SIGINT, osig);
7e1789f5 794 osig_set = 0;
c906108c
SS
795 }
796}
797\f
c906108c 798
83116857
TJB
799/* Create a new session if the inferior will run in a different tty.
800 A session is UNIX's way of grouping processes that share a controlling
801 terminal, so a new one is needed if the inferior terminal will be
802 different from GDB's.
803
804 Returns the session id of the new session, 0 if no session was created
805 or -1 if an error occurred. */
806pid_t
807create_tty_session (void)
808{
809#ifdef HAVE_SETSID
810 pid_t ret;
811
812 if (!job_control || inferior_thisrun_terminal == 0)
813 return 0;
814
815 ret = setsid ();
816 if (ret == -1)
a73c6dcd 817 warning (_("Failed to create new terminal session: setsid: %s"),
83116857
TJB
818 safe_strerror (errno));
819
820 return ret;
821#else
822 return 0;
823#endif /* HAVE_SETSID */
824}
825
c906108c
SS
826/* This is here because this is where we figure out whether we (probably)
827 have job control. Just using job_control only does part of it because
828 setpgid or setpgrp might not exist on a system without job control.
829 It might be considered misplaced (on the other hand, process groups and
830 job control are closely related to ttys).
831
832 For a more clean implementation, in libiberty, put a setpgid which merely
833 calls setpgrp and a setpgrp which does nothing (any system with job control
834 will have one or the other). */
835int
fba45db2 836gdb_setpgid (void)
c906108c
SS
837{
838 int retval = 0;
839
840 if (job_control)
841 {
0200359f
MK
842#if defined (HAVE_TERMIOS) || defined (TIOCGPGRP)
843#ifdef HAVE_SETPGID
844 /* The call setpgid (0, 0) is supposed to work and mean the same
845 thing as this, but on Ultrix 4.2A it fails with EPERM (and
c5aa993b 846 setpgid (getpid (), getpid ()) succeeds). */
c906108c
SS
847 retval = setpgid (getpid (), getpid ());
848#else
0200359f
MK
849#ifdef HAVE_SETPGRP
850#ifdef SETPGRP_VOID
c906108c
SS
851 retval = setpgrp ();
852#else
853 retval = setpgrp (getpid (), getpid ());
0200359f
MK
854#endif
855#endif /* HAVE_SETPGRP */
856#endif /* HAVE_SETPGID */
857#endif /* defined (HAVE_TERMIOS) || defined (TIOCGPGRP) */
c906108c 858 }
0200359f 859
c906108c
SS
860 return retval;
861}
862
0ea3f30e
DJ
863/* Get all the current tty settings (including whether we have a
864 tty at all!). We can't do this in _initialize_inflow because
865 serial_fdopen() won't work until the serial_ops_list is
866 initialized, but we don't want to do it lazily either, so
867 that we can guarantee stdin_serial is opened if there is
868 a terminal. */
869void
870initialize_stdin_serial (void)
871{
872 stdin_serial = serial_fdopen (0);
873}
874
c906108c 875void
fba45db2 876_initialize_inflow (void)
c906108c
SS
877{
878 add_info ("terminal", term_info,
1bedd215 879 _("Print inferior's saved terminal status."));
c906108c 880
7bfc9434
JB
881 add_setshow_auto_boolean_cmd ("interactive-mode", class_support,
882 &interactive_mode, _("\
883Set whether GDB's standard input is a terminal."), _("\
884Show whether GDB's standard input is a terminal."), _("\
885If on, GDB assumes that standard input is a terminal. In practice, it\n\
886means that GDB should wait for the user to answer queries associated to\n\
887commands entered at the command prompt. If off, GDB assumes that standard\n\
888input is not a terminal, and uses the default answer to all queries.\n\
889If auto (the default), determine which mode to use based on the standard\n\
890input settings."),
891 NULL,
892 show_interactive_mode,
893 &setlist, &showlist);
894
c906108c
SS
895 terminal_is_ours = 1;
896
897 /* OK, figure out whether we have job control. If neither termios nor
898 sgtty (i.e. termio or go32), leave job_control 0. */
899
900#if defined (HAVE_TERMIOS)
901 /* Do all systems with termios have the POSIX way of identifying job
902 control? I hope so. */
903#ifdef _POSIX_JOB_CONTROL
904 job_control = 1;
905#else
906#ifdef _SC_JOB_CONTROL
907 job_control = sysconf (_SC_JOB_CONTROL);
908#else
1777feb0 909 job_control = 0; /* Have to assume the worst. */
c5aa993b
JM
910#endif /* _SC_JOB_CONTROL */
911#endif /* _POSIX_JOB_CONTROL */
912#endif /* HAVE_TERMIOS */
c906108c
SS
913
914#ifdef HAVE_SGTTY
915#ifdef TIOCGPGRP
916 job_control = 1;
917#else
918 job_control = 0;
919#endif /* TIOCGPGRP */
920#endif /* sgtty */
7e1789f5 921
7e1789f5 922 observer_attach_inferior_exit (inflow_inferior_exit);
6c95b8df
PA
923
924 inflow_inferior_data
8e260fc0 925 = register_inferior_data_with_cleanup (NULL, inflow_inferior_data_cleanup);
c906108c 926}
This page took 1.271693 seconds and 4 git commands to generate.