GDB (xrefs)
/tmp/gdb-8.1/gdb/event-top.c
Go to the documentation of this file.
1 /* Top level stuff for GDB, the GNU debugger.
2 
3  Copyright (C) 1999-2018 Free Software Foundation, Inc.
4 
5  Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
6 
7  This file is part of GDB.
8 
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
11  the Free Software Foundation; either version 3 of the License, or
12  (at your option) any later version.
13 
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.
18 
19  You should have received a copy of the GNU General Public License
20  along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 
22 #include "defs.h"
23 #include "top.h"
24 #include "inferior.h"
25 #include "infrun.h"
26 #include "target.h"
27 #include "terminal.h" /* for job_control */
28 #include "event-loop.h"
29 #include "event-top.h"
30 #include "interps.h"
31 #include <signal.h>
32 #include "cli/cli-script.h" /* for reset_command_nest_depth */
33 #include "main.h"
34 #include "gdbthread.h"
35 #include "observer.h"
36 #include "continuations.h"
37 #include "gdbcmd.h" /* for dont_repeat() */
38 #include "annotate.h"
39 #include "maint.h"
40 #include "buffer.h"
41 #include "ser-event.h"
42 #include "gdb_select.h"
43 
44 /* readline include files. */
45 #include "readline/readline.h"
46 #include "readline/history.h"
47 
48 /* readline defines this. */
49 #undef savestring
50 
52 
53 /* Signal handlers. */
54 #ifdef SIGQUIT
55 static void handle_sigquit (int sig);
56 #endif
57 #ifdef SIGHUP
58 static void handle_sighup (int sig);
59 #endif
60 static void handle_sigfpe (int sig);
61 
62 /* Functions to be invoked by the event loop in response to
63  signals. */
64 #if defined (SIGQUIT) || defined (SIGHUP)
65 static void async_do_nothing (gdb_client_data);
66 #endif
67 #ifdef SIGHUP
68 static void async_disconnect (gdb_client_data);
69 #endif
71 #ifdef SIGTSTP
72 static void async_sigtstp_handler (gdb_client_data);
73 #endif
74 static void async_sigterm_handler (gdb_client_data arg);
75 
76 /* Instead of invoking (and waiting for) readline to read the command
77  line and pass it back for processing, we use readline's alternate
78  interface, via callback functions, so that the event loop can react
79  to other event sources while we wait for input. */
80 
81 /* Important variables for the event loop. */
82 
83 /* This is used to determine if GDB is using the readline library or
84  its own simplified form of readline. It is used by the asynchronous
85  form of the set editing command.
86  ezannoni: as of 1999-04-29 I expect that this
87  variable will not be used after gdb is changed to use the event
88  loop as default engine, and event-top.c is merged into top.c. */
90 
91 /* This is used to display the notification of the completion of an
92  asynchronous execution command. */
94 
95 /* Used by the stdin event handler to compensate for missed stdin events.
96  Setting this to a non-zero value inside an stdin callback makes the callback
97  run again. */
99 
100 /* Signal handling variables. */
101 /* Each of these is a pointer to a function that the event loop will
102  invoke if the corresponding signal has received. The real signal
103  handlers mark these functions as ready to be executed and the event
104  loop, in a later iteration, calls them. See the function
105  invoke_async_signal_handler. */
107 #ifdef SIGHUP
108 static struct async_signal_handler *sighup_token;
109 #endif
110 #ifdef SIGQUIT
111 static struct async_signal_handler *sigquit_token;
112 #endif
114 #ifdef SIGTSTP
115 static struct async_signal_handler *sigtstp_token;
116 #endif
118 
119 /* This hook is called by gdb_rl_callback_read_char_wrapper after each
120  character is processed. */
122 
123 
124 /* Wrapper function for calling into the readline library. This takes
125  care of a couple things:
126 
127  - The event loop expects the callback function to have a parameter,
128  while readline expects none.
129 
130  - Propagation of GDB exceptions/errors thrown from INPUT_HANDLER
131  across readline requires special handling.
132 
133  On the exceptions issue:
134 
135  DWARF-based unwinding cannot cross code built without -fexceptions.
136  Any exception that tries to propagate through such code will fail
137  and the result is a call to std::terminate. While some ABIs, such
138  as x86-64, require all code to be built with exception tables,
139  others don't.
140 
141  This is a problem when GDB calls some non-EH-aware C library code,
142  that calls into GDB again through a callback, and that GDB callback
143  code throws a C++ exception. Turns out this is exactly what
144  happens with GDB's readline callback.
145 
146  In such cases, we must catch and save any C++ exception that might
147  be thrown from the GDB callback before returning to the
148  non-EH-aware code. When the non-EH-aware function itself returns
149  back to GDB, we then rethrow the original C++ exception.
150 
151  In the readline case however, the right thing to do is to longjmp
152  out of the callback, rather than do a normal return -- there's no
153  way for the callback to return to readline an indication that an
154  error happened, so a normal return would have rl_callback_read_char
155  potentially continue processing further input, redisplay the
156  prompt, etc. Instead of raw setjmp/longjmp however, we use our
157  sjlj-based TRY/CATCH mechanism, which knows to handle multiple
158  levels of active setjmp/longjmp frames, needed in order to handle
159  the readline callback recursing, as happens with e.g., secondary
160  prompts / queries, through gdb_readline_wrapper. This must be
161  noexcept in order to avoid problems with mixing sjlj and
162  (sjlj-based) C++ exceptions. */
163 
164 static struct gdb_exception
166 {
167  struct gdb_exception gdb_expt = exception_none;
168 
169  /* C++ exceptions can't normally be thrown across readline (unless
170  it is built with -fexceptions, but it won't by default on many
171  ABIs). So we instead wrap the readline call with a sjlj-based
172  TRY/CATCH, and rethrow the GDB exception once back in GDB. */
173  TRY_SJLJ
174  {
175  rl_callback_read_char ();
177  (*after_char_processing_hook) ();
178  }
180  {
181  gdb_expt = ex;
182  }
184 
185  return gdb_expt;
186 }
187 
188 static void
190 {
191  struct gdb_exception gdb_expt
193 
194  /* Rethrow using the normal EH mechanism. */
195  if (gdb_expt.reason < 0)
196  throw_exception (gdb_expt);
197 }
198 
199 /* GDB's readline callback handler. Calls the current INPUT_HANDLER,
200  and propagates GDB exceptions/errors thrown from INPUT_HANDLER back
201  across readline. See gdb_rl_callback_read_char_wrapper. This must
202  be noexcept in order to avoid problems with mixing sjlj and
203  (sjlj-based) C++ exceptions. */
204 
205 static void
206 gdb_rl_callback_handler (char *rl) noexcept
207 {
208  struct gdb_exception gdb_rl_expt = exception_none;
209  struct ui *ui = current_ui;
210 
211  TRY
212  {
213  ui->input_handler (rl);
214  }
215  CATCH (ex, RETURN_MASK_ALL)
216  {
217  gdb_rl_expt = ex;
218  }
219  END_CATCH
220 
221  /* If we caught a GDB exception, longjmp out of the readline
222  callback. There's no other way for the callback to signal to
223  readline that an error happened. A normal return would have
224  readline potentially continue processing further input, redisplay
225  the prompt, etc. (This is what GDB historically did when it was
226  a C program.) Note that since we're long jumping, local variable
227  dtors are NOT run automatically. */
228  if (gdb_rl_expt.reason < 0)
229  throw_exception_sjlj (gdb_rl_expt);
230 }
231 
232 /* Change the function to be invoked every time there is a character
233  ready on stdin. This is used when the user sets the editing off,
234  therefore bypassing readline, and letting gdb handle the input
235  itself, via gdb_readline_no_editing_callback. Also it is used in
236  the opposite case in which the user sets editing on again, by
237  restoring readline handling of the input.
238 
239  NOTE: this operates on input_fd, not instream. If we are reading
240  commands from a file, instream will point to the file. However, we
241  always read commands from a file with editing off. This means that
242  the 'set editing on/off' will have effect only on the interactive
243  session. */
244 
245 void
246 change_line_handler (int editing)
247 {
248  struct ui *ui = current_ui;
249 
250  /* We can only have one instance of readline, so we only allow
251  editing on the main UI. */
252  if (ui != main_ui)
253  return;
254 
255  /* Don't try enabling editing if the interpreter doesn't support it
256  (e.g., MI). */
259  return;
260 
261  if (editing)
262  {
263  gdb_assert (ui == main_ui);
264 
265  /* Turn on editing by using readline. */
267  }
268  else
269  {
270  /* Turn off editing by using gdb_readline_no_editing_callback. */
271  if (ui->command_editing)
274  }
275  ui->command_editing = editing;
276 }
277 
278 /* The functions below are wrappers for rl_callback_handler_remove and
279  rl_callback_handler_install that keep track of whether the callback
280  handler is installed in readline. This is necessary because after
281  handling a target event of a background execution command, we may
282  need to reinstall the callback handler if it was removed due to a
283  secondary prompt. See gdb_readline_wrapper_line. We don't
284  unconditionally install the handler for every target event because
285  that also clears the line buffer, thus installing it while the user
286  is typing would lose input. */
287 
288 /* Whether we've registered a callback handler with readline. */
290 
291 /* See event-top.h, and above. */
292 
293 void
295 {
297 
298  rl_callback_handler_remove ();
300 }
301 
302 /* See event-top.h, and above. Note this wrapper doesn't have an
303  actual callback parameter because we always install
304  INPUT_HANDLER. */
305 
306 void
308 {
310 
311  /* Calling rl_callback_handler_install resets readline's input
312  buffer. Calling this when we were already processing input
313  therefore loses input. */
315 
316  rl_callback_handler_install (prompt, gdb_rl_callback_handler);
318 }
319 
320 /* See event-top.h, and above. */
321 
322 void
324 {
326 
328  {
329  /* Passing NULL as prompt argument tells readline to not display
330  a prompt. */
332  }
333 }
334 
335 /* Displays the prompt. If the argument NEW_PROMPT is NULL, the
336  prompt that is displayed is the current top level prompt.
337  Otherwise, it displays whatever NEW_PROMPT is as a local/secondary
338  prompt.
339 
340  This is used after each gdb command has completed, and in the
341  following cases:
342 
343  1. When the user enters a command line which is ended by '\'
344  indicating that the command will continue on the next line. In
345  that case the prompt that is displayed is the empty string.
346 
347  2. When the user is entering 'commands' for a breakpoint, or
348  actions for a tracepoint. In this case the prompt will be '>'
349 
350  3. On prompting for pagination. */
351 
352 void
353 display_gdb_prompt (const char *new_prompt)
354 {
355  std::string actual_gdb_prompt;
356 
358 
359  /* Reset the nesting depth used when trace-commands is set. */
361 
362  /* Do not call the python hook on an explicit prompt change as
363  passed to this function, as this forms a secondary/local prompt,
364  IE, displayed but not set. */
365  if (! new_prompt)
366  {
367  struct ui *ui = current_ui;
368 
369  if (ui->prompt_state == PROMPTED)
370  internal_error (__FILE__, __LINE__, _("double prompt"));
371  else if (ui->prompt_state == PROMPT_BLOCKED)
372  {
373  /* This is to trick readline into not trying to display the
374  prompt. Even though we display the prompt using this
375  function, readline still tries to do its own display if
376  we don't call rl_callback_handler_install and
377  rl_callback_handler_remove (which readline detects
378  because a global variable is not set). If readline did
379  that, it could mess up gdb signal handlers for SIGINT.
380  Readline assumes that between calls to rl_set_signals and
381  rl_clear_signals gdb doesn't do anything with the signal
382  handlers. Well, that's not the case, because when the
383  target executes we change the SIGINT signal handler. If
384  we allowed readline to display the prompt, the signal
385  handler change would happen exactly between the calls to
386  the above two functions. Calling
387  rl_callback_handler_remove(), does the job. */
388 
391  return;
392  }
393  else if (ui->prompt_state == PROMPT_NEEDED)
394  {
395  /* Display the top level prompt. */
396  actual_gdb_prompt = top_level_prompt ();
398  }
399  }
400  else
401  actual_gdb_prompt = new_prompt;
402 
404  {
406  gdb_rl_callback_handler_install (actual_gdb_prompt.c_str ());
407  }
408  /* new_prompt at this point can be the top of the stack or the one
409  passed in. It can't be NULL. */
410  else
411  {
412  /* Don't use a _filtered function here. It causes the assumed
413  character position to be off, since the newline we read from
414  the user is not accounted for. */
415  fputs_unfiltered (actual_gdb_prompt.c_str (), gdb_stdout);
417  }
418 }
419 
420 /* Return the top level prompt, as specified by "set prompt", possibly
421  overriden by the python gdb.prompt_hook hook, and then composed
422  with the prompt prefix and suffix (annotations). */
423 
424 static std::string
426 {
427  char *prompt;
428 
429  /* Give observers a chance of changing the prompt. E.g., the python
430  `gdb.prompt_hook' is installed as an observer. */
432 
433  prompt = get_prompt ();
434 
435  if (annotation_level >= 2)
436  {
437  /* Prefix needs to have new line at end. */
438  const char prefix[] = "\n\032\032pre-prompt\n";
439 
440  /* Suffix needs to have a new line at end and \032 \032 at
441  beginning. */
442  const char suffix[] = "\n\032\032prompt\n";
443 
444  return std::string (prefix) + prompt + suffix;
445  }
446 
447  return prompt;
448 }
449 
450 /* See top.h. */
451 
452 struct ui *main_ui;
453 struct ui *current_ui;
454 struct ui *ui_list;
455 
456 /* Get a pointer to the current UI's line buffer. This is used to
457  construct a whole line of input from partial input. */
458 
459 static struct buffer *
461 {
462  return &current_ui->line_buffer;
463 }
464 
465 /* When there is an event ready on the stdin file descriptor, instead
466  of calling readline directly throught the callback function, or
467  instead of calling gdb_readline_no_editing_callback, give gdb a
468  chance to detect errors and do something. */
469 
470 void
472 {
473  struct ui *ui = (struct ui *) client_data;
474 
475  if (error)
476  {
477  /* Switch to the main UI, so diagnostics always go there. */
479 
481  if (main_ui == ui)
482  {
483  /* If stdin died, we may as well kill gdb. */
484  printf_unfiltered (_("error detected on stdin\n"));
485  quit_command ((char *) 0, 0);
486  }
487  else
488  {
489  /* Simply delete the UI. */
490  delete ui;
491  }
492  }
493  else
494  {
495  /* Switch to the UI whose input descriptor woke up the event
496  loop. */
497  current_ui = ui;
498 
499  /* This makes sure a ^C immediately followed by further input is
500  always processed in that order. E.g,. with input like
501  "^Cprint 1\n", the SIGINT handler runs, marks the async
502  signal handler, and then select/poll may return with stdin
503  ready, instead of -1/EINTR. The
504  gdb.base/double-prompt-target-event-error.exp test exercises
505  this. */
506  QUIT;
507 
508  do
509  {
511  ui->call_readline (client_data);
512  }
514  }
515 }
516 
517 /* See top.h. */
518 
519 void
521 {
523 }
524 
525 /* See top.h. */
526 
527 void
529 {
531 }
532 
533 /* Re-enable stdin after the end of an execution command in
534  synchronous mode, or after an error from the target, and we aborted
535  the exec operation. */
536 
537 void
539 {
540  struct ui *ui = current_ui;
541 
543  {
547  }
548 }
549 
550 /* Disable reads from stdin (the console) marking the command as
551  synchronous. */
552 
553 void
555 {
556  struct ui *ui = current_ui;
557 
560 }
561 
562 
563 /* Handle a gdb command line. This function is called when
564  handle_line_of_input has concatenated one or more input lines into
565  a whole command. */
566 
567 void
568 command_handler (const char *command)
569 {
570  struct ui *ui = current_ui;
571  const char *c;
572 
573  if (ui->instream == ui->stdin_stream)
575 
576  scoped_command_stats stat_reporter (true);
577 
578  /* Do not execute commented lines. */
579  for (c = command; *c == ' ' || *c == '\t'; c++)
580  ;
581  if (c[0] != '#')
582  {
583  execute_command (command, ui->instream == ui->stdin_stream);
584 
585  /* Do any commands attached to breakpoint we stopped at. */
587  }
588 }
589 
590 /* Append RL, an input line returned by readline or one of its
591  emulations, to CMD_LINE_BUFFER. Returns the command line if we
592  have a whole command line ready to be processed by the command
593  interpreter or NULL if the command line isn't complete yet (input
594  line ends in a backslash). Takes ownership of RL. */
595 
596 static char *
597 command_line_append_input_line (struct buffer *cmd_line_buffer, char *rl)
598 {
599  char *cmd;
600  size_t len;
601 
602  len = strlen (rl);
603 
604  if (len > 0 && rl[len - 1] == '\\')
605  {
606  /* Don't copy the backslash and wait for more. */
607  buffer_grow (cmd_line_buffer, rl, len - 1);
608  cmd = NULL;
609  }
610  else
611  {
612  /* Copy whole line including terminating null, and we're
613  done. */
614  buffer_grow (cmd_line_buffer, rl, len + 1);
615  cmd = cmd_line_buffer->buffer;
616  }
617 
618  /* Allocated in readline. */
619  xfree (rl);
620 
621  return cmd;
622 }
623 
624 /* Handle a line of input coming from readline.
625 
626  If the read line ends with a continuation character (backslash),
627  save the partial input in CMD_LINE_BUFFER (except the backslash),
628  and return NULL. Otherwise, save the partial input and return a
629  pointer to CMD_LINE_BUFFER's buffer (null terminated), indicating a
630  whole command line is ready to be executed.
631 
632  Returns EOF on end of file.
633 
634  If REPEAT, handle command repetitions:
635 
636  - If the input command line is NOT empty, the command returned is
637  copied into the global 'saved_command_line' var so that it can
638  be repeated later.
639 
640  - OTOH, if the input command line IS empty, return the previously
641  saved command instead of the empty input line.
642 */
643 
644 char *
645 handle_line_of_input (struct buffer *cmd_line_buffer,
646  char *rl, int repeat, const char *annotation_suffix)
647 {
648  struct ui *ui = current_ui;
649  int from_tty = ui->instream == ui->stdin_stream;
650  char *p1;
651  char *cmd;
652 
653  if (rl == NULL)
654  return (char *) EOF;
655 
656  cmd = command_line_append_input_line (cmd_line_buffer, rl);
657  if (cmd == NULL)
658  return NULL;
659 
660  /* We have a complete command line now. Prepare for the next
661  command, but leave ownership of memory to the buffer . */
662  cmd_line_buffer->used_size = 0;
663 
664  if (from_tty && annotation_level > 1)
665  {
666  printf_unfiltered (("\n\032\032post-"));
667  puts_unfiltered (annotation_suffix);
668  printf_unfiltered (("\n"));
669  }
670 
671 #define SERVER_COMMAND_PREFIX "server "
673  if (server_command)
674  {
675  /* Note that we don't set `saved_command_line'. Between this
676  and the check in dont_repeat, this insures that repeating
677  will still do the right thing. */
678  return cmd + strlen (SERVER_COMMAND_PREFIX);
679  }
680 
681  /* Do history expansion if that is wished. */
683  {
684  char *history_value;
685  int expanded;
686 
687  expanded = history_expand (cmd, &history_value);
688  if (expanded)
689  {
690  size_t len;
691 
692  /* Print the changes. */
693  printf_unfiltered ("%s\n", history_value);
694 
695  /* If there was an error, call this function again. */
696  if (expanded < 0)
697  {
698  xfree (history_value);
699  return cmd;
700  }
701 
702  /* history_expand returns an allocated string. Just replace
703  our buffer with it. */
704  len = strlen (history_value);
705  xfree (buffer_finish (cmd_line_buffer));
706  cmd_line_buffer->buffer = history_value;
707  cmd_line_buffer->buffer_size = len + 1;
708  cmd = history_value;
709  }
710  }
711 
712  /* If we just got an empty line, and that is supposed to repeat the
713  previous command, return the previously saved command. */
714  for (p1 = cmd; *p1 == ' ' || *p1 == '\t'; p1++)
715  ;
716  if (repeat && *p1 == '\0')
717  return saved_command_line;
718 
719  /* Add command to history if appropriate. Note: lines consisting
720  solely of comments are also added to the command history. This
721  is useful when you type a command, and then realize you don't
722  want to execute it quite yet. You can comment out the command
723  and then later fetch it from the value history and remove the
724  '#'. The kill ring is probably better, but some people are in
725  the habit of commenting things out. */
726  if (*cmd != '\0' && from_tty && input_interactive_p (current_ui))
727  gdb_add_history (cmd);
728 
729  /* Save into global buffer if appropriate. */
730  if (repeat)
731  {
733  saved_command_line = xstrdup (cmd);
734  return saved_command_line;
735  }
736  else
737  return cmd;
738 }
739 
740 /* Handle a complete line of input. This is called by the callback
741  mechanism within the readline library. Deal with incomplete
742  commands as well, by saving the partial input in a global
743  buffer.
744 
745  NOTE: This is the asynchronous version of the command_line_input
746  function. */
747 
748 void
750 {
751  struct buffer *line_buffer = get_command_line_buffer ();
752  struct ui *ui = current_ui;
753  char *cmd;
754 
755  cmd = handle_line_of_input (line_buffer, rl, 1, "prompt");
756  if (cmd == (char *) EOF)
757  {
758  /* stdin closed. The connection with the terminal is gone.
759  This happens at the end of a testsuite run, after Expect has
760  hung up but GDB is still alive. In such a case, we just quit
761  gdb killing the inferior program too. */
762  printf_unfiltered ("quit\n");
763  execute_command ("quit", 1);
764  }
765  else if (cmd == NULL)
766  {
767  /* We don't have a full line yet. Print an empty prompt. */
768  display_gdb_prompt ("");
769  }
770  else
771  {
773 
774  command_handler (cmd);
775 
776  if (ui->prompt_state != PROMPTED)
777  display_gdb_prompt (0);
778  }
779 }
780 
781 /* Does reading of input from terminal w/o the editing features
782  provided by the readline library. Calls the line input handler
783  once we have a whole input line. */
784 
785 void
787 {
788  int c;
789  char *result;
790  struct buffer line_buffer;
791  static int done_once = 0;
792  struct ui *ui = current_ui;
793 
795 
796  /* Unbuffer the input stream, so that, later on, the calls to fgetc
797  fetch only one char at the time from the stream. The fgetc's will
798  get up to the first newline, but there may be more chars in the
799  stream after '\n'. If we buffer the input and fgetc drains the
800  stream, getting stuff beyond the newline as well, a select, done
801  afterwards will not trigger. */
802  if (!done_once && !ISATTY (ui->instream))
803  {
804  setbuf (ui->instream, NULL);
805  done_once = 1;
806  }
807 
808  /* We still need the while loop here, even though it would seem
809  obvious to invoke gdb_readline_no_editing_callback at every
810  character entered. If not using the readline library, the
811  terminal is in cooked mode, which sends the characters all at
812  once. Poll will notice that the input fd has changed state only
813  after enter is pressed. At this point we still need to fetch all
814  the chars entered. */
815 
816  while (1)
817  {
818  /* Read from stdin if we are executing a user defined command.
819  This is the right thing for prompt_for_continue, at least. */
820  c = fgetc (ui->instream != NULL ? ui->instream : ui->stdin_stream);
821 
822  if (c == EOF)
823  {
824  if (line_buffer.used_size > 0)
825  {
826  /* The last line does not end with a newline. Return it, and
827  if we are called again fgetc will still return EOF and
828  we'll return NULL then. */
829  break;
830  }
832  ui->input_handler (NULL);
833  return;
834  }
835 
836  if (c == '\n')
837  {
838  if (line_buffer.used_size > 0
839  && line_buffer.buffer[line_buffer.used_size - 1] == '\r')
841  break;
842  }
843 
845  }
846 
847  buffer_grow_char (&line_buffer, '\0');
848  result = buffer_finish (&line_buffer);
849  ui->input_handler (result);
850 }
851 
852 
853 /* The serial event associated with the QUIT flag. set_quit_flag sets
854  this, and check_quit_flag clears it. Used by interruptible_select
855  to be able to do interruptible I/O with no race with the SIGINT
856  handler. */
857 static struct serial_event *quit_serial_event;
858 
859 /* Initialization of signal handlers and tokens. There is a function
860  handle_sig* for each of the signals GDB cares about. Specifically:
861  SIGINT, SIGFPE, SIGQUIT, SIGTSTP, SIGHUP, SIGWINCH. These
862  functions are the actual signal handlers associated to the signals
863  via calls to signal(). The only job for these functions is to
864  enqueue the appropriate event/procedure with the event loop. Such
865  procedures are the old signal handlers. The event loop will take
866  care of invoking the queued procedures to perform the usual tasks
867  associated with the reception of the signal. */
868 /* NOTE: 1999-04-30 This is the asynchronous version of init_signals.
869  init_signals will become obsolete as we move to have to event loop
870  as the default for gdb. */
871 void
873 {
875 
877 
878  signal (SIGINT, handle_sigint);
879  sigint_token =
881  signal (SIGTERM, handle_sigterm);
884 
885  /* If SIGTRAP was set to SIG_IGN, then the SIG_IGN will get passed
886  to the inferior and breakpoints will be ignored. */
887 #ifdef SIGTRAP
888  signal (SIGTRAP, SIG_DFL);
889 #endif
890 
891 #ifdef SIGQUIT
892  /* If we initialize SIGQUIT to SIG_IGN, then the SIG_IGN will get
893  passed to the inferior, which we don't want. It would be
894  possible to do a "signal (SIGQUIT, SIG_DFL)" after we fork, but
895  on BSD4.3 systems using vfork, that can affect the
896  GDB process as well as the inferior (the signal handling tables
897  might be in memory, shared between the two). Since we establish
898  a handler for SIGQUIT, when we call exec it will set the signal
899  to SIG_DFL for us. */
900  signal (SIGQUIT, handle_sigquit);
901  sigquit_token =
902  create_async_signal_handler (async_do_nothing, NULL);
903 #endif
904 #ifdef SIGHUP
905  if (signal (SIGHUP, handle_sighup) != SIG_IGN)
906  sighup_token =
907  create_async_signal_handler (async_disconnect, NULL);
908  else
909  sighup_token =
910  create_async_signal_handler (async_do_nothing, NULL);
911 #endif
912  signal (SIGFPE, handle_sigfpe);
913  sigfpe_token =
915 
916 #ifdef SIGTSTP
917  sigtstp_token =
918  create_async_signal_handler (async_sigtstp_handler, NULL);
919 #endif
920 }
921 
922 /* See defs.h. */
923 
924 void
926 {
928 }
929 
930 /* See defs.h. */
931 
932 void
934 {
936 }
937 
938 /* Return the selectable file descriptor of the serial event
939  associated with the quit flag. */
940 
941 static int
943 {
945 }
946 
947 /* See defs.h. */
948 
949 void
951 {
952  if (check_quit_flag ())
953  {
955  quit ();
956  else
958  }
959 }
960 
961 /* See defs.h. */
963 
964 /* Handle a SIGINT. */
965 
966 void
967 handle_sigint (int sig)
968 {
969  signal (sig, handle_sigint);
970 
971  /* We could be running in a loop reading in symfiles or something so
972  it may be quite a while before we get back to the event loop. So
973  set quit_flag to 1 here. Then if QUIT is called before we get to
974  the event loop, we will unwind as expected. */
975  set_quit_flag ();
976 
977  /* In case nothing calls QUIT before the event loop is reached, the
978  event loop handles it. */
980 }
981 
982 /* See gdb_select.h. */
983 
984 int
986  fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
987  struct timeval *timeout)
988 {
989  fd_set my_readfds;
990  int fd;
991  int res;
992 
993  if (readfds == NULL)
994  {
995  readfds = &my_readfds;
996  FD_ZERO (&my_readfds);
997  }
998 
999  fd = quit_serial_event_fd ();
1000  FD_SET (fd, readfds);
1001  if (n <= fd)
1002  n = fd + 1;
1003 
1004  do
1005  {
1006  res = gdb_select (n, readfds, writefds, exceptfds, timeout);
1007  }
1008  while (res == -1 && errno == EINTR);
1009 
1010  if (res == 1 && FD_ISSET (fd, readfds))
1011  {
1012  errno = EINTR;
1013  return -1;
1014  }
1015  return res;
1016 }
1017 
1018 /* Handle GDB exit upon receiving SIGTERM if target_can_async_p (). */
1019 
1020 static void
1022 {
1023  quit_force (NULL, 0);
1024 }
1025 
1026 /* See defs.h. */
1027 volatile int sync_quit_force_run;
1028 
1029 /* Quit GDB if SIGTERM is received.
1030  GDB would quit anyway, but this way it will clean up properly. */
1031 void
1033 {
1034  signal (sig, handle_sigterm);
1035 
1036  sync_quit_force_run = 1;
1037  set_quit_flag ();
1038 
1040 }
1041 
1042 /* Do the quit. All the checks have been done by the caller. */
1043 void
1045 {
1046  /* If the quit_flag has gotten reset back to 0 by the time we get
1047  back here, that means that an exception was thrown to unwind the
1048  current command before we got back to the event loop. So there
1049  is no reason to call quit again here. */
1050  QUIT;
1051 }
1052 
1053 #ifdef SIGQUIT
1054 /* Tell the event loop what to do if SIGQUIT is received.
1055  See event-signal.c. */
1056 static void
1057 handle_sigquit (int sig)
1058 {
1059  mark_async_signal_handler (sigquit_token);
1060  signal (sig, handle_sigquit);
1061 }
1062 #endif
1063 
1064 #if defined (SIGQUIT) || defined (SIGHUP)
1065 /* Called by the event loop in response to a SIGQUIT or an
1066  ignored SIGHUP. */
1067 static void
1068 async_do_nothing (gdb_client_data arg)
1069 {
1070  /* Empty function body. */
1071 }
1072 #endif
1073 
1074 #ifdef SIGHUP
1075 /* Tell the event loop what to do if SIGHUP is received.
1076  See event-signal.c. */
1077 static void
1078 handle_sighup (int sig)
1079 {
1080  mark_async_signal_handler (sighup_token);
1081  signal (sig, handle_sighup);
1082 }
1083 
1084 /* Called by the event loop to process a SIGHUP. */
1085 static void
1086 async_disconnect (gdb_client_data arg)
1087 {
1088 
1089  TRY
1090  {
1091  quit_cover ();
1092  }
1093 
1094  CATCH (exception, RETURN_MASK_ALL)
1095  {
1096  fputs_filtered ("Could not kill the program being debugged",
1097  gdb_stderr);
1098  exception_print (gdb_stderr, exception);
1099  }
1100  END_CATCH
1101 
1102  TRY
1103  {
1104  pop_all_targets ();
1105  }
1106  CATCH (exception, RETURN_MASK_ALL)
1107  {
1108  }
1109  END_CATCH
1110 
1111  signal (SIGHUP, SIG_DFL); /*FIXME: ??????????? */
1112  raise (SIGHUP);
1113 }
1114 #endif
1115 
1116 #ifdef SIGTSTP
1117 void
1118 handle_sigtstp (int sig)
1119 {
1120  mark_async_signal_handler (sigtstp_token);
1121  signal (sig, handle_sigtstp);
1122 }
1123 
1124 static void
1125 async_sigtstp_handler (gdb_client_data arg)
1126 {
1127  char *prompt = get_prompt ();
1128 
1129  signal (SIGTSTP, SIG_DFL);
1130 #if HAVE_SIGPROCMASK
1131  {
1132  sigset_t zero;
1133 
1134  sigemptyset (&zero);
1135  sigprocmask (SIG_SETMASK, &zero, 0);
1136  }
1137 #elif HAVE_SIGSETMASK
1138  sigsetmask (0);
1139 #endif
1140  raise (SIGTSTP);
1141  signal (SIGTSTP, handle_sigtstp);
1142  printf_unfiltered ("%s", prompt);
1144 
1145  /* Forget about any previous command -- null line now will do
1146  nothing. */
1147  dont_repeat ();
1148 }
1149 #endif /* SIGTSTP */
1150 
1151 /* Tell the event loop what to do if SIGFPE is received.
1152  See event-signal.c. */
1153 static void
1154 handle_sigfpe (int sig)
1155 {
1157  signal (sig, handle_sigfpe);
1158 }
1159 
1160 /* Event loop will call this functin to process a SIGFPE. */
1161 static void
1163 {
1164  /* This message is based on ANSI C, section 4.7. Note that integer
1165  divide by zero causes this, so "float" is a misnomer. */
1166  error (_("Erroneous arithmetic operation."));
1167 }
1168 
1169 
1170 /* Set things up for readline to be invoked via the alternate
1171  interface, i.e. via a callback function
1172  (gdb_rl_callback_read_char), and hook up instream to the event
1173  loop. */
1174 
1175 void
1176 gdb_setup_readline (int editing)
1177 {
1178  struct ui *ui = current_ui;
1179 
1180  /* This function is a noop for the sync case. The assumption is
1181  that the sync setup is ALL done in gdb_init, and we would only
1182  mess it up here. The sync stuff should really go away over
1183  time. */
1184  if (!batch_silent)
1185  gdb_stdout = new stdio_file (ui->outstream);
1187  gdb_stdlog = gdb_stderr; /* for moment */
1188  gdb_stdtarg = gdb_stderr; /* for moment */
1189  gdb_stdtargerr = gdb_stderr; /* for moment */
1190 
1191  /* If the input stream is connected to a terminal, turn on editing.
1192  However, that is only allowed on the main UI, as we can only have
1193  one instance of readline. */
1194  if (ISATTY (ui->instream) && editing && ui == main_ui)
1195  {
1196  /* Tell gdb that we will be using the readline library. This
1197  could be overwritten by a command in .gdbinit like 'set
1198  editing on' or 'off'. */
1199  ui->command_editing = 1;
1200 
1201  /* When a character is detected on instream by select or poll,
1202  readline will be invoked via this callback function. */
1204 
1205  /* Tell readline to use the same input stream that gdb uses. */
1206  rl_instream = ui->instream;
1207  }
1208  else
1209  {
1210  ui->command_editing = 0;
1212  }
1213 
1214  /* Now create the event source for this UI's input file descriptor.
1215  Another source is going to be the target program (inferior), but
1216  that must be registered only when it actually exists (I.e. after
1217  we say 'run' or after we connect to a remote target. */
1219 }
1220 
1221 /* Disable command input through the standard CLI channels. Used in
1222  the suspend proc for interpreters that use the standard gdb readline
1223  interface, like the cli & the mi. */
1224 
1225 void
1227 {
1228  struct ui *ui = current_ui;
1229 
1230  /* FIXME - It is too heavyweight to delete and remake these every
1231  time you run an interpreter that needs readline. It is probably
1232  better to have the interpreters cache these, which in turn means
1233  that this needs to be moved into interpreter specific code. */
1234 
1235 #if 0
1236  ui_file_delete (gdb_stdout);
1237  ui_file_delete (gdb_stderr);
1238  gdb_stdlog = NULL;
1239  gdb_stdtarg = NULL;
1240  gdb_stdtargerr = NULL;
1241 #endif
1242 
1243  if (ui->command_editing)
1246 }
const char * string
Definition: signals.c:50
void gdb_add_history(const char *command)
Definition: top.c:1067
void(* after_char_processing_hook)(void)
Definition: event-top.c:121
void quit_serial_event_clear(void)
Definition: event-top.c:933
void async_init_signals(void)
Definition: event-top.c:872
struct ui * current_ui
Definition: event-top.c:453
void gdb_rl_callback_handler_reinstall(void)
Definition: event-top.c:323
static char * command_line_append_input_line(struct buffer *cmd_line_buffer, char *rl)
Definition: event-top.c:597
int command_editing
Definition: top.h:89
void fputs_unfiltered(const char *buf, struct ui_file *file)
Definition: ui-file.c:127
void ui_unregister_input_event_handler(struct ui *ui)
Definition: event-top.c:528
void xfree(void *)
void gdb_rl_callback_handler_install(const char *prompt)
Definition: event-top.c:307
void set_quit_flag(void)
Definition: extension.c:804
#define END_CATCH_SJLJ
struct ui * ui_list
Definition: event-top.c:454
void async_enable_stdin(void)
Definition: event-top.c:538
void mark_async_signal_handler(async_signal_handler *async_handler_ptr)
Definition: event-loop.c:921
void change_line_handler(int editing)
Definition: event-top.c:246
int history_expansion_p
Definition: top.c:806
void internal_error(const char *file, int line, const char *fmt,...)
Definition: errors.c:50
char * buffer
Definition: buffer.h:25
const struct gdb_exception exception_none
static void gdb_rl_callback_handler(char *rl) noexcept
Definition: event-top.c:206
void gdb_setup_readline(int editing)
Definition: event-top.c:1176
static int quit_serial_event_fd(void)
Definition: event-top.c:942
int batch_silent
Definition: main.c:82
#define _(String)
Definition: gdb_locale.h:35
static int callback_handler_installed
Definition: event-top.c:289
void gdb_disable_readline(void)
Definition: event-top.c:1226
size_t used_size
Definition: buffer.h:27
#define END_CATCH
void command_line_handler(char *rl)
Definition: event-top.c:749
static void ours()
Definition: target.c:483
void quit(void)
Definition: utils.c:731
void add_file_handler(int fd, handler_func *proc, gdb_client_data client_data)
Definition: event-loop.c:413
void(* input_handler)(char *)
Definition: top.h:84
Definition: top.h:44
void execute_command(const char *, int)
Definition: top.c:540
void async_request_quit(gdb_client_data arg)
Definition: event-top.c:1044
#define TRY
static struct async_signal_handler * async_sigterm_token
Definition: event-top.c:117
#define CATCH(EXCEPTION, MASK)
ui(FILE *instream, FILE *outstream, FILE *errstream)
Definition: top.c:251
void handle_sigterm(int sig)
Definition: event-top.c:1032
FILE * instream
Definition: top.h:115
void throw_exception_sjlj(struct gdb_exception exception)
static struct gdb_exception gdb_rl_callback_read_char_wrapper_noexcept() noexcept
Definition: event-top.c:165
int input_interactive_p(struct ui *)
Definition: top.c:1673
void command_handler(const char *command)
Definition: event-top.c:568
FILE * outstream
Definition: top.h:117
int interp_supports_command_editing(struct interp *interp)
Definition: interps.c:344
enum prompt_state prompt_state
Definition: top.h:131
static bool is_ours()
Definition: target.h:136
void initialize_async_signal_handlers(void)
Definition: event-loop.c:281
void exception_print(struct ui_file *file, struct gdb_exception e)
Definition: exceptions.c:109
int serial_event_fd(struct serial_event *event)
Definition: ser-event.c:171
void fputs_filtered(const char *linebuffer, struct ui_file *stream)
Definition: utils.c:1811
void gdb_readline_no_editing_callback(gdb_client_data client_data)
Definition: event-top.c:786
void quit_force(int *exit_arg, int from_tty)
Definition: top.c:1566
static std::string top_level_prompt()
Definition: event-top.c:425
int annotation_level
Definition: stack.c:111
struct ui * main_ui
Definition: event-top.c:452
quit_handler_ftype * quit_handler
Definition: event-top.c:962
void pop_all_targets(void)
Definition: target.c:759
void() quit_handler_ftype(void)
Definition: defs.h:155
void reinitialize_more_filter(void)
Definition: utils.c:1568
async_signal_handler * create_async_signal_handler(sig_handler_func *proc, gdb_client_data client_data)
Definition: event-loop.c:898
Definition: top.h:56
static int startswith(const char *string, const char *pattern)
Definition: common-utils.h:107
int gdb_select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
Definition: mingw-hdep.c:51
char * get_prompt(void)
Definition: top.c:1445
#define SERVER_COMMAND_PREFIX
void printf_unfiltered(const char *format,...)
Definition: utils.c:2056
void async_disable_stdin(void)
Definition: event-top.c:554
void quit_command(const char *args, int from_tty)
Definition: cli-cmds.c:331
char * handle_line_of_input(struct buffer *cmd_line_buffer, char *rl, int repeat, const char *annotation_suffix)
Definition: event-top.c:645
void * gdb_client_data
Definition: event-loop.h:70
void quit_cover(void)
#define gdb_assert(expr)
Definition: gdb_assert.h:32
static struct async_signal_handler * sigint_token
Definition: event-top.c:106
void throw_exception(struct gdb_exception exception)
FILE * errstream
Definition: top.h:119
static struct serial_event * quit_serial_event
Definition: event-top.c:857
void quit_serial_event_set(void)
Definition: event-top.c:925
static struct async_signal_handler * sigfpe_token
Definition: event-top.c:113
void puts_unfiltered(const char *string)
Definition: utils.c:2091
void serial_event_clear(struct serial_event *event)
Definition: ser-event.c:202
void buffer_init(struct buffer *buffer)
Definition: buffer.c:60
#define gdb_stderr
Definition: utils.h:344
void ui_register_input_event_handler(struct ui *ui)
Definition: event-top.c:520
int check_quit_flag(void)
Definition: extension.c:828
void gdb_rl_callback_handler_remove(void)
Definition: event-top.c:294
struct serial_event * make_serial_event(void)
Definition: ser-event.c:163
struct interp * command_interp(void)
Definition: interps.c:321
Definition: buffer.h:23
int call_stdin_event_handler_again_p
Definition: event-top.c:98
static void handle_sigfpe(int sig)
Definition: event-top.c:1154
struct ui_file * gdb_stdtarg
Definition: main.c:75
void stdin_event_handler(int error, gdb_client_data client_data)
Definition: event-top.c:471
volatile int sync_quit_force_run
Definition: event-top.c:1027
void serial_event_set(struct serial_event *event)
Definition: ser-event.c:181
void reset_command_nest_depth(void)
Definition: cli-script.c:430
size_t buffer_size
Definition: buffer.h:26
struct buffer line_buffer
Definition: top.h:72
void display_gdb_prompt(const char *new_prompt)
Definition: event-top.c:353
FILE * stdin_stream
Definition: top.h:109
int input_fd
Definition: top.h:123
struct interp * top_level_interpreter(void)
Definition: interps.c:449
#define gdb_stdlog
Definition: utils.h:349
int server_command
Definition: top.c:145
static void async_sigterm_handler(gdb_client_data arg)
Definition: event-top.c:1021
void bpstat_do_actions(void)
Definition: breakpoint.c:4494
void handle_sigint(int sig)
Definition: event-top.c:967
static void async_float_handler(gdb_client_data)
Definition: event-top.c:1162
struct ui_file * gdb_stdtargerr
Definition: main.c:76
void dont_repeat(void)
Definition: top.c:695
int interruptible_select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
Definition: event-top.c:985
void gdb_flush(struct ui_file *file)
Definition: ui-file.c:93
#define QUIT
Definition: defs.h:179
char * saved_command_line
Definition: top.c:137
void annotate_display_prompt(void)
Definition: annotate.c:577
#define CATCH_SJLJ(EXCEPTION, MASK)
#define ISATTY(FP)
Definition: defs.h:671
char * buffer_finish(struct buffer *buffer)
Definition: buffer.c:66
static struct buffer * get_command_line_buffer(void)
Definition: event-top.c:460
void error(const char *fmt,...)
Definition: errors.c:38
void delete_file_handler(int fd)
Definition: event-loop.c:564
int set_editing_cmd_var
Definition: event-top.c:89
void default_quit_handler(void)
Definition: event-top.c:950
void(* call_readline)(gdb_client_data)
Definition: top.h:80
static void buffer_grow_char(struct buffer *buffer, char c)
Definition: buffer.h:38
static void gdb_rl_callback_read_char_wrapper(gdb_client_data client_data)
Definition: event-top.c:189
int exec_done_display_p
Definition: event-top.c:93
void buffer_grow(struct buffer *buffer, const char *data, size_t size)
Definition: buffer.c:25
enum return_reason reason
#define gdb_stdout
Definition: utils.h:340
void target_pass_ctrlc(void)
Definition: target.c:3342
void observer_notify_before_prompt(const char *current_prompt)
#define TRY_SJLJ