gdb/continuations: do minor cleanup
[deliverable/binutils-gdb.git] / gdb / event-top.c
CommitLineData
b5a0ac70 1/* Top level stuff for GDB, the GNU debugger.
637537d0 2
3666a048 3 Copyright (C) 1999-2021 Free Software Foundation, Inc.
637537d0 4
b5a0ac70
SS
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
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
b5a0ac70
SS
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
371d5dec 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
b5a0ac70
SS
21
22#include "defs.h"
4de283e4 23#include "top.h"
d55e5aa6
TT
24#include "inferior.h"
25#include "infrun.h"
4de283e4 26#include "target.h"
766f8836 27#include "terminal.h"
400b5eca 28#include "gdbsupport/event-loop.h"
4de283e4 29#include "event-top.h"
4389a95a 30#include "interps.h"
4de283e4
TT
31#include <signal.h>
32#include "cli/cli-script.h" /* for reset_command_nest_depth */
d01a8610 33#include "main.h"
4de283e4 34#include "gdbthread.h"
d55e5aa6 35#include "observable.h"
4de283e4
TT
36#include "continuations.h"
37#include "gdbcmd.h" /* for dont_repeat() */
38#include "annotate.h"
39#include "maint.h"
268a13a5 40#include "gdbsupport/buffer.h"
f0881b37 41#include "ser-event.h"
06cc9596 42#include "gdbsupport/gdb_select.h"
21987b9c 43#include "gdbsupport/gdb-sigmask.h"
93b54c8e 44#include "async-event.h"
104c1213 45
371d5dec 46/* readline include files. */
dbda9972
AC
47#include "readline/readline.h"
48#include "readline/history.h"
b5a0ac70
SS
49
50/* readline defines this. */
51#undef savestring
52
606aae8a 53static std::string top_level_prompt ();
b5a0ac70 54
371d5dec 55/* Signal handlers. */
6d318c73 56#ifdef SIGQUIT
c2c6d25f 57static void handle_sigquit (int sig);
6d318c73 58#endif
0f0b8dcd 59#ifdef SIGHUP
c2c6d25f 60static void handle_sighup (int sig);
0f0b8dcd 61#endif
c2c6d25f 62static void handle_sigfpe (int sig);
b5a0ac70
SS
63
64/* Functions to be invoked by the event loop in response to
371d5dec 65 signals. */
0f0b8dcd 66#if defined (SIGQUIT) || defined (SIGHUP)
c2c6d25f 67static void async_do_nothing (gdb_client_data);
0f0b8dcd
DJ
68#endif
69#ifdef SIGHUP
c2c6d25f 70static void async_disconnect (gdb_client_data);
0f0b8dcd 71#endif
c2c6d25f 72static void async_float_handler (gdb_client_data);
6aa899ce
PA
73#ifdef SIGTSTP
74static void async_sigtstp_handler (gdb_client_data);
0f0b8dcd 75#endif
06c868a8 76static void async_sigterm_handler (gdb_client_data arg);
b5a0ac70 77
a74e1786
PA
78/* Instead of invoking (and waiting for) readline to read the command
79 line and pass it back for processing, we use readline's alternate
80 interface, via callback functions, so that the event loop can react
81 to other event sources while we wait for input. */
b5a0ac70 82
371d5dec 83/* Important variables for the event loop. */
b5a0ac70
SS
84
85/* This is used to determine if GDB is using the readline library or
371d5dec 86 its own simplified form of readline. It is used by the asynchronous
0f71a2f6 87 form of the set editing command.
392a587b 88 ezannoni: as of 1999-04-29 I expect that this
b5a0ac70 89 variable will not be used after gdb is changed to use the event
371d5dec 90 loop as default engine, and event-top.c is merged into top.c. */
491144b5 91bool set_editing_cmd_var;
b5a0ac70 92
104c1213 93/* This is used to display the notification of the completion of an
371d5dec 94 asynchronous execution command. */
491144b5 95bool exec_done_display_p = false;
104c1213 96
d64e57fa
PP
97/* Used by the stdin event handler to compensate for missed stdin events.
98 Setting this to a non-zero value inside an stdin callback makes the callback
99 run again. */
100int call_stdin_event_handler_again_p;
101
371d5dec 102/* Signal handling variables. */
b5a0ac70 103/* Each of these is a pointer to a function that the event loop will
371d5dec 104 invoke if the corresponding signal has received. The real signal
b5a0ac70 105 handlers mark these functions as ready to be executed and the event
371d5dec
MS
106 loop, in a later iteration, calls them. See the function
107 invoke_async_signal_handler. */
05fa9251 108static struct async_signal_handler *sigint_token;
b5a0ac70 109#ifdef SIGHUP
05fa9251 110static struct async_signal_handler *sighup_token;
b5a0ac70 111#endif
6d318c73 112#ifdef SIGQUIT
05fa9251 113static struct async_signal_handler *sigquit_token;
6d318c73 114#endif
05fa9251 115static struct async_signal_handler *sigfpe_token;
6aa899ce 116#ifdef SIGTSTP
05fa9251 117static struct async_signal_handler *sigtstp_token;
0f71a2f6 118#endif
06c868a8 119static struct async_signal_handler *async_sigterm_token;
0f71a2f6 120
3c610247 121/* This hook is called by gdb_rl_callback_read_char_wrapper after each
467d8519 122 character is processed. */
b08ee6a2 123void (*after_char_processing_hook) (void);
b5a0ac70
SS
124\f
125
89525768
PA
126/* Wrapper function for calling into the readline library. This takes
127 care of a couple things:
128
129 - The event loop expects the callback function to have a parameter,
130 while readline expects none.
131
132 - Propagation of GDB exceptions/errors thrown from INPUT_HANDLER
133 across readline requires special handling.
134
135 On the exceptions issue:
136
137 DWARF-based unwinding cannot cross code built without -fexceptions.
138 Any exception that tries to propagate through such code will fail
139 and the result is a call to std::terminate. While some ABIs, such
140 as x86-64, require all code to be built with exception tables,
141 others don't.
142
143 This is a problem when GDB calls some non-EH-aware C library code,
144 that calls into GDB again through a callback, and that GDB callback
145 code throws a C++ exception. Turns out this is exactly what
146 happens with GDB's readline callback.
147
148 In such cases, we must catch and save any C++ exception that might
149 be thrown from the GDB callback before returning to the
150 non-EH-aware code. When the non-EH-aware function itself returns
151 back to GDB, we then rethrow the original C++ exception.
152
153 In the readline case however, the right thing to do is to longjmp
154 out of the callback, rather than do a normal return -- there's no
155 way for the callback to return to readline an indication that an
156 error happened, so a normal return would have rl_callback_read_char
157 potentially continue processing further input, redisplay the
158 prompt, etc. Instead of raw setjmp/longjmp however, we use our
159 sjlj-based TRY/CATCH mechanism, which knows to handle multiple
160 levels of active setjmp/longjmp frames, needed in order to handle
161 the readline callback recursing, as happens with e.g., secondary
2693a262
PA
162 prompts / queries, through gdb_readline_wrapper. This must be
163 noexcept in order to avoid problems with mixing sjlj and
164 (sjlj-based) C++ exceptions. */
89525768 165
2693a262
PA
166static struct gdb_exception
167gdb_rl_callback_read_char_wrapper_noexcept () noexcept
c2c6d25f 168{
cc06b668 169 struct gdb_exception gdb_expt;
89525768
PA
170
171 /* C++ exceptions can't normally be thrown across readline (unless
172 it is built with -fexceptions, but it won't by default on many
173 ABIs). So we instead wrap the readline call with a sjlj-based
174 TRY/CATCH, and rethrow the GDB exception once back in GDB. */
175 TRY_SJLJ
176 {
177 rl_callback_read_char ();
178 if (after_char_processing_hook)
179 (*after_char_processing_hook) ();
180 }
181 CATCH_SJLJ (ex, RETURN_MASK_ALL)
182 {
c6fdd8b2 183 gdb_expt = std::move (ex);
89525768
PA
184 }
185 END_CATCH_SJLJ
186
2693a262
PA
187 return gdb_expt;
188}
189
190static void
191gdb_rl_callback_read_char_wrapper (gdb_client_data client_data)
192{
193 struct gdb_exception gdb_expt
194 = gdb_rl_callback_read_char_wrapper_noexcept ();
195
89525768
PA
196 /* Rethrow using the normal EH mechanism. */
197 if (gdb_expt.reason < 0)
94aeb44b 198 throw_exception (std::move (gdb_expt));
89525768
PA
199}
200
201/* GDB's readline callback handler. Calls the current INPUT_HANDLER,
202 and propagates GDB exceptions/errors thrown from INPUT_HANDLER back
2693a262
PA
203 across readline. See gdb_rl_callback_read_char_wrapper. This must
204 be noexcept in order to avoid problems with mixing sjlj and
205 (sjlj-based) C++ exceptions. */
89525768
PA
206
207static void
2693a262 208gdb_rl_callback_handler (char *rl) noexcept
89525768 209{
3d1cbb78
TT
210 /* This is static to avoid undefined behavior when calling longjmp
211 -- gdb_exception has a destructor with side effects. */
212 static struct gdb_exception gdb_rl_expt;
a74e1786 213 struct ui *ui = current_ui;
89525768 214
a70b8144 215 try
89525768 216 {
3d1cbb78
TT
217 /* Ensure the exception is reset on each call. */
218 gdb_rl_expt = {};
95bc9f0b 219 ui->input_handler (gdb::unique_xmalloc_ptr<char> (rl));
89525768 220 }
c6fdd8b2 221 catch (gdb_exception &ex)
89525768 222 {
c6fdd8b2 223 gdb_rl_expt = std::move (ex);
89525768 224 }
89525768
PA
225
226 /* If we caught a GDB exception, longjmp out of the readline
227 callback. There's no other way for the callback to signal to
228 readline that an error happened. A normal return would have
229 readline potentially continue processing further input, redisplay
230 the prompt, etc. (This is what GDB historically did when it was
231 a C program.) Note that since we're long jumping, local variable
232 dtors are NOT run automatically. */
233 if (gdb_rl_expt.reason < 0)
234 throw_exception_sjlj (gdb_rl_expt);
c2c6d25f
JM
235}
236
b5a0ac70 237/* Change the function to be invoked every time there is a character
371d5dec 238 ready on stdin. This is used when the user sets the editing off,
b5a0ac70 239 therefore bypassing readline, and letting gdb handle the input
c70061cf
PA
240 itself, via gdb_readline_no_editing_callback. Also it is used in
241 the opposite case in which the user sets editing on again, by
3c216924
PA
242 restoring readline handling of the input.
243
244 NOTE: this operates on input_fd, not instream. If we are reading
245 commands from a file, instream will point to the file. However, we
246 always read commands from a file with editing off. This means that
247 the 'set editing on/off' will have effect only on the interactive
248 session. */
249
250void
251change_line_handler (int editing)
b5a0ac70 252{
a74e1786
PA
253 struct ui *ui = current_ui;
254
3c216924
PA
255 /* We can only have one instance of readline, so we only allow
256 editing on the main UI. */
257 if (ui != main_ui)
258 return;
259
260 /* Don't try enabling editing if the interpreter doesn't support it
261 (e.g., MI). */
262 if (!interp_supports_command_editing (top_level_interpreter ())
263 || !interp_supports_command_editing (command_interp ()))
264 return;
c2c6d25f 265
3c216924 266 if (editing)
b5a0ac70 267 {
3c216924
PA
268 gdb_assert (ui == main_ui);
269
371d5dec 270 /* Turn on editing by using readline. */
a74e1786 271 ui->call_readline = gdb_rl_callback_read_char_wrapper;
b5a0ac70
SS
272 }
273 else
274 {
c70061cf 275 /* Turn off editing by using gdb_readline_no_editing_callback. */
3c216924
PA
276 if (ui->command_editing)
277 gdb_rl_callback_handler_remove ();
a74e1786 278 ui->call_readline = gdb_readline_no_editing_callback;
b5a0ac70 279 }
3c216924 280 ui->command_editing = editing;
b5a0ac70
SS
281}
282
d3d4baed
PA
283/* The functions below are wrappers for rl_callback_handler_remove and
284 rl_callback_handler_install that keep track of whether the callback
285 handler is installed in readline. This is necessary because after
286 handling a target event of a background execution command, we may
287 need to reinstall the callback handler if it was removed due to a
288 secondary prompt. See gdb_readline_wrapper_line. We don't
289 unconditionally install the handler for every target event because
290 that also clears the line buffer, thus installing it while the user
291 is typing would lose input. */
292
293/* Whether we've registered a callback handler with readline. */
294static int callback_handler_installed;
295
296/* See event-top.h, and above. */
297
298void
299gdb_rl_callback_handler_remove (void)
300{
3c216924
PA
301 gdb_assert (current_ui == main_ui);
302
d3d4baed
PA
303 rl_callback_handler_remove ();
304 callback_handler_installed = 0;
305}
306
307/* See event-top.h, and above. Note this wrapper doesn't have an
308 actual callback parameter because we always install
309 INPUT_HANDLER. */
310
311void
312gdb_rl_callback_handler_install (const char *prompt)
313{
3c216924
PA
314 gdb_assert (current_ui == main_ui);
315
d3d4baed
PA
316 /* Calling rl_callback_handler_install resets readline's input
317 buffer. Calling this when we were already processing input
318 therefore loses input. */
319 gdb_assert (!callback_handler_installed);
320
89525768 321 rl_callback_handler_install (prompt, gdb_rl_callback_handler);
d3d4baed
PA
322 callback_handler_installed = 1;
323}
324
325/* See event-top.h, and above. */
326
327void
328gdb_rl_callback_handler_reinstall (void)
329{
3c216924
PA
330 gdb_assert (current_ui == main_ui);
331
d3d4baed
PA
332 if (!callback_handler_installed)
333 {
334 /* Passing NULL as prompt argument tells readline to not display
335 a prompt. */
336 gdb_rl_callback_handler_install (NULL);
337 }
338}
339
ab821bc6
PA
340/* Displays the prompt. If the argument NEW_PROMPT is NULL, the
341 prompt that is displayed is the current top level prompt.
342 Otherwise, it displays whatever NEW_PROMPT is as a local/secondary
343 prompt.
344
345 This is used after each gdb command has completed, and in the
346 following cases:
347
371d5dec 348 1. When the user enters a command line which is ended by '\'
ab821bc6
PA
349 indicating that the command will continue on the next line. In
350 that case the prompt that is displayed is the empty string.
351
0f71a2f6 352 2. When the user is entering 'commands' for a breakpoint, or
371d5dec 353 actions for a tracepoint. In this case the prompt will be '>'
ab821bc6
PA
354
355 3. On prompting for pagination. */
356
b5a0ac70 357void
38bcc89d 358display_gdb_prompt (const char *new_prompt)
b5a0ac70 359{
606aae8a 360 std::string actual_gdb_prompt;
b5a0ac70 361
bd00c694
PA
362 annotate_display_prompt ();
363
16026cd7
AS
364 /* Reset the nesting depth used when trace-commands is set. */
365 reset_command_nest_depth ();
366
ab821bc6
PA
367 /* Do not call the python hook on an explicit prompt change as
368 passed to this function, as this forms a secondary/local prompt,
369 IE, displayed but not set. */
370 if (! new_prompt)
adf40b2e 371 {
3b12939d
PA
372 struct ui *ui = current_ui;
373
374 if (ui->prompt_state == PROMPTED)
375 internal_error (__FILE__, __LINE__, _("double prompt"));
376 else if (ui->prompt_state == PROMPT_BLOCKED)
d17b6f81 377 {
ab821bc6
PA
378 /* This is to trick readline into not trying to display the
379 prompt. Even though we display the prompt using this
380 function, readline still tries to do its own display if
381 we don't call rl_callback_handler_install and
382 rl_callback_handler_remove (which readline detects
383 because a global variable is not set). If readline did
384 that, it could mess up gdb signal handlers for SIGINT.
385 Readline assumes that between calls to rl_set_signals and
386 rl_clear_signals gdb doesn't do anything with the signal
387 handlers. Well, that's not the case, because when the
388 target executes we change the SIGINT signal handler. If
389 we allowed readline to display the prompt, the signal
390 handler change would happen exactly between the calls to
391 the above two functions. Calling
392 rl_callback_handler_remove(), does the job. */
393
3c216924
PA
394 if (current_ui->command_editing)
395 gdb_rl_callback_handler_remove ();
ab821bc6 396 return;
d17b6f81 397 }
3b12939d 398 else if (ui->prompt_state == PROMPT_NEEDED)
ab821bc6
PA
399 {
400 /* Display the top level prompt. */
401 actual_gdb_prompt = top_level_prompt ();
3b12939d 402 ui->prompt_state = PROMPTED;
ab821bc6 403 }
b5a0ac70 404 }
ab821bc6 405 else
606aae8a 406 actual_gdb_prompt = new_prompt;
b5a0ac70 407
3c216924 408 if (current_ui->command_editing)
b5a0ac70 409 {
d3d4baed 410 gdb_rl_callback_handler_remove ();
606aae8a 411 gdb_rl_callback_handler_install (actual_gdb_prompt.c_str ());
b5a0ac70 412 }
371d5dec 413 /* new_prompt at this point can be the top of the stack or the one
d014929c
MS
414 passed in. It can't be NULL. */
415 else
b5a0ac70
SS
416 {
417 /* Don't use a _filtered function here. It causes the assumed
dda83cd7
SM
418 character position to be off, since the newline we read from
419 the user is not accounted for. */
faa17681 420 fprintf_unfiltered (gdb_stdout, "%s", actual_gdb_prompt.c_str ());
b5a0ac70
SS
421 gdb_flush (gdb_stdout);
422 }
423}
424
ab821bc6 425/* Return the top level prompt, as specified by "set prompt", possibly
405feb71 426 overridden by the python gdb.prompt_hook hook, and then composed
606aae8a 427 with the prompt prefix and suffix (annotations). */
ab821bc6 428
606aae8a 429static std::string
ab821bc6 430top_level_prompt (void)
b5a0ac70 431{
608ff013 432 char *prompt;
b5a0ac70 433
ab821bc6
PA
434 /* Give observers a chance of changing the prompt. E.g., the python
435 `gdb.prompt_hook' is installed as an observer. */
76727919 436 gdb::observers::before_prompt.notify (get_prompt ());
ab821bc6 437
608ff013 438 prompt = get_prompt ();
b5a0ac70 439
ab821bc6 440 if (annotation_level >= 2)
b5a0ac70 441 {
ab821bc6 442 /* Prefix needs to have new line at end. */
608ff013 443 const char prefix[] = "\n\032\032pre-prompt\n";
ab821bc6
PA
444
445 /* Suffix needs to have a new line at end and \032 \032 at
446 beginning. */
608ff013 447 const char suffix[] = "\n\032\032prompt\n";
b5a0ac70 448
606aae8a 449 return std::string (prefix) + prompt + suffix;
608ff013 450 }
ab821bc6 451
606aae8a 452 return prompt;
b5a0ac70 453}
c2c6d25f 454
98d9f24e 455/* See top.h. */
73ab01a0 456
98d9f24e
PA
457struct ui *main_ui;
458struct ui *current_ui;
459struct ui *ui_list;
73ab01a0 460
a74e1786 461/* Get a pointer to the current UI's line buffer. This is used to
b69d38af
PA
462 construct a whole line of input from partial input. */
463
464static struct buffer *
465get_command_line_buffer (void)
466{
a74e1786 467 return &current_ui->line_buffer;
b69d38af
PA
468}
469
187212b3 470/* When there is an event ready on the stdin file descriptor, instead
c2c6d25f 471 of calling readline directly throught the callback function, or
c70061cf
PA
472 instead of calling gdb_readline_no_editing_callback, give gdb a
473 chance to detect errors and do something. */
474
c2c6d25f 475void
2acceee2 476stdin_event_handler (int error, gdb_client_data client_data)
c2c6d25f 477{
41fd2b0f
PA
478 struct ui *ui = (struct ui *) client_data;
479
c2c6d25f
JM
480 if (error)
481 {
07169ff7
PA
482 /* Switch to the main UI, so diagnostics always go there. */
483 current_ui = main_ui;
484
41fd2b0f 485 delete_file_handler (ui->input_fd);
07169ff7
PA
486 if (main_ui == ui)
487 {
488 /* If stdin died, we may as well kill gdb. */
489 printf_unfiltered (_("error detected on stdin\n"));
268a799a 490 quit_command ((char *) 0, 0);
07169ff7
PA
491 }
492 else
493 {
494 /* Simply delete the UI. */
895b8f30 495 delete ui;
07169ff7 496 }
c2c6d25f
JM
497 }
498 else
d64e57fa 499 {
07169ff7
PA
500 /* Switch to the UI whose input descriptor woke up the event
501 loop. */
502 current_ui = ui;
503
504 /* This makes sure a ^C immediately followed by further input is
505 always processed in that order. E.g,. with input like
506 "^Cprint 1\n", the SIGINT handler runs, marks the async
507 signal handler, and then select/poll may return with stdin
508 ready, instead of -1/EINTR. The
509 gdb.base/double-prompt-target-event-error.exp test exercises
510 this. */
d2acc30b
PA
511 QUIT;
512
d64e57fa
PP
513 do
514 {
515 call_stdin_event_handler_again_p = 0;
a74e1786 516 ui->call_readline (client_data);
07169ff7
PA
517 }
518 while (call_stdin_event_handler_again_p != 0);
d64e57fa 519 }
c2c6d25f
JM
520}
521
3eb7562a
PA
522/* See top.h. */
523
524void
525ui_register_input_event_handler (struct ui *ui)
526{
2554f6f5 527 add_file_handler (ui->input_fd, stdin_event_handler, ui,
6b01403b 528 string_printf ("ui-%d", ui->num), true);
3eb7562a
PA
529}
530
531/* See top.h. */
532
533void
534ui_unregister_input_event_handler (struct ui *ui)
535{
536 delete_file_handler (ui->input_fd);
537}
538
6426a772
JM
539/* Re-enable stdin after the end of an execution command in
540 synchronous mode, or after an error from the target, and we aborted
371d5dec 541 the exec operation. */
6426a772
JM
542
543void
712af3be 544async_enable_stdin (void)
6426a772 545{
3b12939d
PA
546 struct ui *ui = current_ui;
547
548 if (ui->prompt_state == PROMPT_BLOCKED)
32c1e744 549 {
223ffa71 550 target_terminal::ours ();
3eb7562a 551 ui_register_input_event_handler (ui);
3b12939d 552 ui->prompt_state = PROMPT_NEEDED;
32c1e744 553 }
6426a772
JM
554}
555
556/* Disable reads from stdin (the console) marking the command as
371d5dec 557 synchronous. */
6426a772
JM
558
559void
560async_disable_stdin (void)
561{
3b12939d
PA
562 struct ui *ui = current_ui;
563
564 ui->prompt_state = PROMPT_BLOCKED;
3eb7562a 565 delete_file_handler (ui->input_fd);
6426a772 566}
b5a0ac70 567\f
6426a772 568
b69d38af
PA
569/* Handle a gdb command line. This function is called when
570 handle_line_of_input has concatenated one or more input lines into
571 a whole command. */
572
573void
95a6b0a1 574command_handler (const char *command)
b5a0ac70 575{
f38d3ad1 576 struct ui *ui = current_ui;
95a6b0a1 577 const char *c;
b5a0ac70 578
268a799a 579 if (ui->instream == ui->stdin_stream)
b5a0ac70 580 reinitialize_more_filter ();
b5a0ac70 581
1e3b796d 582 scoped_command_stats stat_reporter (true);
b5a0ac70 583
b69d38af
PA
584 /* Do not execute commented lines. */
585 for (c = command; *c == ' ' || *c == '\t'; c++)
586 ;
587 if (c[0] != '#')
588 {
268a799a 589 execute_command (command, ui->instream == ui->stdin_stream);
c5aa993b 590
b69d38af
PA
591 /* Do any commands attached to breakpoint we stopped at. */
592 bpstat_do_actions ();
593 }
43ff13b4
JM
594}
595
b69d38af
PA
596/* Append RL, an input line returned by readline or one of its
597 emulations, to CMD_LINE_BUFFER. Returns the command line if we
598 have a whole command line ready to be processed by the command
599 interpreter or NULL if the command line isn't complete yet (input
95bc9f0b 600 line ends in a backslash). */
b5a0ac70 601
b69d38af 602static char *
95bc9f0b 603command_line_append_input_line (struct buffer *cmd_line_buffer, const char *rl)
b5a0ac70 604{
b69d38af
PA
605 char *cmd;
606 size_t len;
b5a0ac70 607
b69d38af 608 len = strlen (rl);
b5a0ac70 609
b69d38af 610 if (len > 0 && rl[len - 1] == '\\')
b5a0ac70 611 {
b69d38af
PA
612 /* Don't copy the backslash and wait for more. */
613 buffer_grow (cmd_line_buffer, rl, len - 1);
614 cmd = NULL;
b5a0ac70 615 }
b69d38af 616 else
b5a0ac70 617 {
b69d38af
PA
618 /* Copy whole line including terminating null, and we're
619 done. */
620 buffer_grow (cmd_line_buffer, rl, len + 1);
621 cmd = cmd_line_buffer->buffer;
b5a0ac70
SS
622 }
623
b69d38af
PA
624 return cmd;
625}
b5a0ac70 626
b69d38af 627/* Handle a line of input coming from readline.
b5a0ac70 628
b69d38af
PA
629 If the read line ends with a continuation character (backslash),
630 save the partial input in CMD_LINE_BUFFER (except the backslash),
631 and return NULL. Otherwise, save the partial input and return a
632 pointer to CMD_LINE_BUFFER's buffer (null terminated), indicating a
633 whole command line is ready to be executed.
b5a0ac70 634
b69d38af 635 Returns EOF on end of file.
b5a0ac70 636
b69d38af 637 If REPEAT, handle command repetitions:
b5a0ac70 638
b69d38af 639 - If the input command line is NOT empty, the command returned is
68bb5386 640 saved using save_command_line () so that it can be repeated later.
d96429cd 641
68bb5386
PW
642 - OTOH, if the input command line IS empty, return the saved
643 command instead of the empty input line.
b69d38af 644*/
b5a0ac70 645
b69d38af
PA
646char *
647handle_line_of_input (struct buffer *cmd_line_buffer,
95bc9f0b
TT
648 const char *rl, int repeat,
649 const char *annotation_suffix)
b69d38af 650{
f38d3ad1 651 struct ui *ui = current_ui;
268a799a 652 int from_tty = ui->instream == ui->stdin_stream;
b69d38af
PA
653 char *p1;
654 char *cmd;
655
656 if (rl == NULL)
657 return (char *) EOF;
658
659 cmd = command_line_append_input_line (cmd_line_buffer, rl);
660 if (cmd == NULL)
661 return NULL;
b5a0ac70 662
b69d38af
PA
663 /* We have a complete command line now. Prepare for the next
664 command, but leave ownership of memory to the buffer . */
665 cmd_line_buffer->used_size = 0;
666
268a799a 667 if (from_tty && annotation_level > 1)
b5a0ac70 668 {
b69d38af
PA
669 printf_unfiltered (("\n\032\032post-"));
670 puts_unfiltered (annotation_suffix);
671 printf_unfiltered (("\n"));
672 }
673
674#define SERVER_COMMAND_PREFIX "server "
9937536c
JB
675 server_command = startswith (cmd, SERVER_COMMAND_PREFIX);
676 if (server_command)
b69d38af 677 {
68bb5386 678 /* Note that we don't call `save_command_line'. Between this
dda83cd7
SM
679 and the check in dont_repeat, this insures that repeating
680 will still do the right thing. */
b69d38af 681 return cmd + strlen (SERVER_COMMAND_PREFIX);
b5a0ac70
SS
682 }
683
684 /* Do history expansion if that is wished. */
268a799a 685 if (history_expansion_p && from_tty && input_interactive_p (current_ui))
b5a0ac70 686 {
b6fb1ee5 687 char *cmd_expansion;
b5a0ac70
SS
688 int expanded;
689
b6fb1ee5
PW
690 expanded = history_expand (cmd, &cmd_expansion);
691 gdb::unique_xmalloc_ptr<char> history_value (cmd_expansion);
b5a0ac70
SS
692 if (expanded)
693 {
b69d38af
PA
694 size_t len;
695
b5a0ac70 696 /* Print the changes. */
b6fb1ee5 697 printf_unfiltered ("%s\n", history_value.get ());
b5a0ac70
SS
698
699 /* If there was an error, call this function again. */
700 if (expanded < 0)
b6fb1ee5 701 return cmd;
b69d38af
PA
702
703 /* history_expand returns an allocated string. Just replace
704 our buffer with it. */
b6fb1ee5 705 len = strlen (history_value.get ());
b69d38af 706 xfree (buffer_finish (cmd_line_buffer));
b6fb1ee5 707 cmd_line_buffer->buffer = history_value.get ();
b69d38af 708 cmd_line_buffer->buffer_size = len + 1;
b6fb1ee5 709 cmd = history_value.release ();
b5a0ac70
SS
710 }
711 }
712
371d5dec 713 /* If we just got an empty line, and that is supposed to repeat the
b69d38af
PA
714 previous command, return the previously saved command. */
715 for (p1 = cmd; *p1 == ' ' || *p1 == '\t'; p1++)
716 ;
717 if (repeat && *p1 == '\0')
68bb5386 718 return get_saved_command_line ();
b69d38af
PA
719
720 /* Add command to history if appropriate. Note: lines consisting
721 solely of comments are also added to the command history. This
722 is useful when you type a command, and then realize you don't
723 want to execute it quite yet. You can comment out the command
724 and then later fetch it from the value history and remove the
725 '#'. The kill ring is probably better, but some people are in
726 the habit of commenting things out. */
268a799a 727 if (*cmd != '\0' && from_tty && input_interactive_p (current_ui))
b69d38af 728 gdb_add_history (cmd);
b5a0ac70 729
b69d38af
PA
730 /* Save into global buffer if appropriate. */
731 if (repeat)
b5a0ac70 732 {
68bb5386
PW
733 save_command_line (cmd);
734 return get_saved_command_line ();
b5a0ac70 735 }
b69d38af
PA
736 else
737 return cmd;
738}
b5a0ac70 739
b69d38af
PA
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.
b5a0ac70 744
b69d38af
PA
745 NOTE: This is the asynchronous version of the command_line_input
746 function. */
b5a0ac70 747
b69d38af 748void
95bc9f0b 749command_line_handler (gdb::unique_xmalloc_ptr<char> &&rl)
b69d38af
PA
750{
751 struct buffer *line_buffer = get_command_line_buffer ();
f38d3ad1 752 struct ui *ui = current_ui;
b69d38af 753 char *cmd;
b5a0ac70 754
95bc9f0b 755 cmd = handle_line_of_input (line_buffer, rl.get (), 1, "prompt");
b69d38af 756 if (cmd == (char *) EOF)
b5a0ac70 757 {
b69d38af
PA
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");
95a6b0a1 763 execute_command ("quit", 1);
b69d38af
PA
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 {
3b12939d
PA
772 ui->prompt_state = PROMPT_NEEDED;
773
b69d38af 774 command_handler (cmd);
3b12939d
PA
775
776 if (ui->prompt_state != PROMPTED)
777 display_gdb_prompt (0);
b5a0ac70 778 }
b5a0ac70
SS
779}
780
781/* Does reading of input from terminal w/o the editing features
c70061cf
PA
782 provided by the readline library. Calls the line input handler
783 once we have a whole input line. */
b5a0ac70 784
085dd6e6 785void
c70061cf 786gdb_readline_no_editing_callback (gdb_client_data client_data)
b5a0ac70
SS
787{
788 int c;
789 char *result;
187212b3 790 struct buffer line_buffer;
7be570e7 791 static int done_once = 0;
a74e1786 792 struct ui *ui = current_ui;
7be570e7 793
187212b3
PA
794 buffer_init (&line_buffer);
795
7be570e7 796 /* Unbuffer the input stream, so that, later on, the calls to fgetc
371d5dec 797 fetch only one char at the time from the stream. The fgetc's will
7be570e7 798 get up to the first newline, but there may be more chars in the
371d5dec 799 stream after '\n'. If we buffer the input and fgetc drains the
7be570e7 800 stream, getting stuff beyond the newline as well, a select, done
371d5dec 801 afterwards will not trigger. */
f38d3ad1 802 if (!done_once && !ISATTY (ui->instream))
7be570e7 803 {
f38d3ad1 804 setbuf (ui->instream, NULL);
7be570e7
JM
805 done_once = 1;
806 }
b5a0ac70 807
b5a0ac70 808 /* We still need the while loop here, even though it would seem
c70061cf
PA
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. */
b5a0ac70
SS
815
816 while (1)
817 {
818 /* Read from stdin if we are executing a user defined command.
dda83cd7 819 This is the right thing for prompt_for_continue, at least. */
268a799a 820 c = fgetc (ui->instream != NULL ? ui->instream : ui->stdin_stream);
b5a0ac70
SS
821
822 if (c == EOF)
823 {
187212b3
PA
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 }
831 xfree (buffer_finish (&line_buffer));
a74e1786 832 ui->input_handler (NULL);
13ce7133 833 return;
b5a0ac70
SS
834 }
835
836 if (c == '\n')
b5a0ac70 837 {
187212b3
PA
838 if (line_buffer.used_size > 0
839 && line_buffer.buffer[line_buffer.used_size - 1] == '\r')
840 line_buffer.used_size--;
b5a0ac70
SS
841 break;
842 }
b5a0ac70 843
187212b3 844 buffer_grow_char (&line_buffer, c);
b5a0ac70
SS
845 }
846
187212b3
PA
847 buffer_grow_char (&line_buffer, '\0');
848 result = buffer_finish (&line_buffer);
95bc9f0b 849 ui->input_handler (gdb::unique_xmalloc_ptr<char> (result));
b5a0ac70
SS
850}
851\f
852
fece451c
CB
853/* The SIGSEGV handler for this thread, or NULL if there is none. GDB
854 always installs a global SIGSEGV handler, and then lets threads
855 indicate their interest in handling the signal by setting this
856 thread-local variable.
3b3978bc 857
fece451c
CB
858 This is a static variable instead of extern because on various platforms
859 (notably Cygwin) extern thread_local variables cause link errors. So
860 instead, we have scoped_segv_handler_restore, which also makes it impossible
861 to accidentally forget to restore it to the original value. */
862
863static thread_local void (*thread_local_segv_handler) (int);
3b3978bc
TT
864
865static void handle_sigsegv (int sig);
866
867/* Install the SIGSEGV handler. */
868static void
869install_handle_sigsegv ()
870{
871#if defined (HAVE_SIGACTION)
872 struct sigaction sa;
873 sa.sa_handler = handle_sigsegv;
874 sigemptyset (&sa.sa_mask);
875#ifdef HAVE_SIGALTSTACK
876 sa.sa_flags = SA_ONSTACK;
877#else
878 sa.sa_flags = 0;
879#endif
880 sigaction (SIGSEGV, &sa, nullptr);
881#else
882 signal (SIGSEGV, handle_sigsegv);
883#endif
884}
885
886/* Handler for SIGSEGV. */
887
888static void
889handle_sigsegv (int sig)
890{
891 install_handle_sigsegv ();
892
893 if (thread_local_segv_handler == nullptr)
036003a6 894 abort (); /* ARI: abort */
3b3978bc
TT
895 thread_local_segv_handler (sig);
896}
897
898\f
899
f0881b37
PA
900/* The serial event associated with the QUIT flag. set_quit_flag sets
901 this, and check_quit_flag clears it. Used by interruptible_select
902 to be able to do interruptible I/O with no race with the SIGINT
903 handler. */
904static struct serial_event *quit_serial_event;
905
b5a0ac70 906/* Initialization of signal handlers and tokens. There is a function
371d5dec 907 handle_sig* for each of the signals GDB cares about. Specifically:
b5a0ac70
SS
908 SIGINT, SIGFPE, SIGQUIT, SIGTSTP, SIGHUP, SIGWINCH. These
909 functions are the actual signal handlers associated to the signals
910 via calls to signal(). The only job for these functions is to
911 enqueue the appropriate event/procedure with the event loop. Such
371d5dec 912 procedures are the old signal handlers. The event loop will take
b5a0ac70 913 care of invoking the queued procedures to perform the usual tasks
371d5dec 914 associated with the reception of the signal. */
392a587b 915/* NOTE: 1999-04-30 This is the asynchronous version of init_signals.
b5a0ac70 916 init_signals will become obsolete as we move to have to event loop
371d5dec 917 as the default for gdb. */
b5a0ac70 918void
c2c6d25f 919async_init_signals (void)
c5aa993b 920{
5cc3ce8b
PA
921 initialize_async_signal_handlers ();
922
f0881b37
PA
923 quit_serial_event = make_serial_event ();
924
b5a0ac70
SS
925 signal (SIGINT, handle_sigint);
926 sigint_token =
db20ebdf 927 create_async_signal_handler (async_request_quit, NULL, "sigint");
a7266fef 928 signal (SIGTERM, handle_sigterm);
06c868a8 929 async_sigterm_token
db20ebdf 930 = create_async_signal_handler (async_sigterm_handler, NULL, "sigterm");
b5a0ac70
SS
931
932 /* If SIGTRAP was set to SIG_IGN, then the SIG_IGN will get passed
933 to the inferior and breakpoints will be ignored. */
934#ifdef SIGTRAP
935 signal (SIGTRAP, SIG_DFL);
936#endif
937
6d318c73 938#ifdef SIGQUIT
b5a0ac70
SS
939 /* If we initialize SIGQUIT to SIG_IGN, then the SIG_IGN will get
940 passed to the inferior, which we don't want. It would be
941 possible to do a "signal (SIGQUIT, SIG_DFL)" after we fork, but
942 on BSD4.3 systems using vfork, that can affect the
943 GDB process as well as the inferior (the signal handling tables
944 might be in memory, shared between the two). Since we establish
945 a handler for SIGQUIT, when we call exec it will set the signal
946 to SIG_DFL for us. */
947 signal (SIGQUIT, handle_sigquit);
948 sigquit_token =
db20ebdf 949 create_async_signal_handler (async_do_nothing, NULL, "sigquit");
6d318c73 950#endif
b5a0ac70
SS
951#ifdef SIGHUP
952 if (signal (SIGHUP, handle_sighup) != SIG_IGN)
953 sighup_token =
db20ebdf 954 create_async_signal_handler (async_disconnect, NULL, "sighup");
b5a0ac70
SS
955 else
956 sighup_token =
db20ebdf 957 create_async_signal_handler (async_do_nothing, NULL, "sighup");
b5a0ac70
SS
958#endif
959 signal (SIGFPE, handle_sigfpe);
960 sigfpe_token =
db20ebdf 961 create_async_signal_handler (async_float_handler, NULL, "sigfpe");
b5a0ac70 962
6aa899ce 963#ifdef SIGTSTP
0f71a2f6 964 sigtstp_token =
db20ebdf 965 create_async_signal_handler (async_sigtstp_handler, NULL, "sigtstp");
0f71a2f6 966#endif
3b3978bc
TT
967
968 install_handle_sigsegv ();
0f71a2f6
JM
969}
970
f0881b37
PA
971/* See defs.h. */
972
973void
974quit_serial_event_set (void)
975{
976 serial_event_set (quit_serial_event);
977}
978
979/* See defs.h. */
980
981void
982quit_serial_event_clear (void)
983{
984 serial_event_clear (quit_serial_event);
985}
986
987/* Return the selectable file descriptor of the serial event
988 associated with the quit flag. */
989
990static int
991quit_serial_event_fd (void)
992{
993 return serial_event_fd (quit_serial_event);
994}
995
048094ac
PA
996/* See defs.h. */
997
998void
999default_quit_handler (void)
1000{
1001 if (check_quit_flag ())
1002 {
223ffa71 1003 if (target_terminal::is_ours ())
048094ac
PA
1004 quit ();
1005 else
1006 target_pass_ctrlc ();
1007 }
1008}
1009
1010/* See defs.h. */
1011quit_handler_ftype *quit_handler = default_quit_handler;
1012
f0881b37
PA
1013/* Handle a SIGINT. */
1014
c5aa993b 1015void
c2c6d25f 1016handle_sigint (int sig)
b5a0ac70
SS
1017{
1018 signal (sig, handle_sigint);
1019
5f960e00
FF
1020 /* We could be running in a loop reading in symfiles or something so
1021 it may be quite a while before we get back to the event loop. So
371d5dec 1022 set quit_flag to 1 here. Then if QUIT is called before we get to
5f960e00 1023 the event loop, we will unwind as expected. */
522002f9 1024 set_quit_flag ();
5f960e00 1025
585a46a2
PA
1026 /* In case nothing calls QUIT before the event loop is reached, the
1027 event loop handles it. */
1028 mark_async_signal_handler (sigint_token);
b5a0ac70
SS
1029}
1030
f0881b37
PA
1031/* See gdb_select.h. */
1032
1033int
1034interruptible_select (int n,
1035 fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
1036 struct timeval *timeout)
1037{
1038 fd_set my_readfds;
1039 int fd;
1040 int res;
1041
1042 if (readfds == NULL)
1043 {
1044 readfds = &my_readfds;
1045 FD_ZERO (&my_readfds);
1046 }
1047
1048 fd = quit_serial_event_fd ();
1049 FD_SET (fd, readfds);
1050 if (n <= fd)
1051 n = fd + 1;
1052
1053 do
1054 {
1055 res = gdb_select (n, readfds, writefds, exceptfds, timeout);
1056 }
1057 while (res == -1 && errno == EINTR);
1058
1059 if (res == 1 && FD_ISSET (fd, readfds))
1060 {
1061 errno = EINTR;
1062 return -1;
1063 }
1064 return res;
1065}
1066
06c868a8
JK
1067/* Handle GDB exit upon receiving SIGTERM if target_can_async_p (). */
1068
1069static void
1070async_sigterm_handler (gdb_client_data arg)
1071{
268a799a 1072 quit_force (NULL, 0);
06c868a8
JK
1073}
1074
1075/* See defs.h. */
1076volatile int sync_quit_force_run;
1077
a7266fef
AS
1078/* Quit GDB if SIGTERM is received.
1079 GDB would quit anyway, but this way it will clean up properly. */
1080void
1081handle_sigterm (int sig)
1082{
1083 signal (sig, handle_sigterm);
06c868a8 1084
077836f7
PP
1085 sync_quit_force_run = 1;
1086 set_quit_flag ();
1087
1088 mark_async_signal_handler (async_sigterm_token);
a7266fef
AS
1089}
1090
371d5dec 1091/* Do the quit. All the checks have been done by the caller. */
c5aa993b 1092void
c2c6d25f 1093async_request_quit (gdb_client_data arg)
b5a0ac70 1094{
5f960e00 1095 /* If the quit_flag has gotten reset back to 0 by the time we get
4ac94eda
FF
1096 back here, that means that an exception was thrown to unwind the
1097 current command before we got back to the event loop. So there
522002f9 1098 is no reason to call quit again here. */
048094ac 1099 QUIT;
b5a0ac70
SS
1100}
1101
6d318c73 1102#ifdef SIGQUIT
371d5dec
MS
1103/* Tell the event loop what to do if SIGQUIT is received.
1104 See event-signal.c. */
c5aa993b 1105static void
c2c6d25f 1106handle_sigquit (int sig)
b5a0ac70 1107{
f6fbab7d 1108 mark_async_signal_handler (sigquit_token);
b5a0ac70
SS
1109 signal (sig, handle_sigquit);
1110}
6d318c73 1111#endif
b5a0ac70 1112
0f0b8dcd
DJ
1113#if defined (SIGQUIT) || defined (SIGHUP)
1114/* Called by the event loop in response to a SIGQUIT or an
1115 ignored SIGHUP. */
c5aa993b 1116static void
c2c6d25f 1117async_do_nothing (gdb_client_data arg)
b5a0ac70 1118{
371d5dec 1119 /* Empty function body. */
b5a0ac70 1120}
0f0b8dcd 1121#endif
b5a0ac70
SS
1122
1123#ifdef SIGHUP
371d5dec
MS
1124/* Tell the event loop what to do if SIGHUP is received.
1125 See event-signal.c. */
c5aa993b 1126static void
fba45db2 1127handle_sighup (int sig)
b5a0ac70 1128{
f6fbab7d 1129 mark_async_signal_handler (sighup_token);
b5a0ac70
SS
1130 signal (sig, handle_sighup);
1131}
1132
371d5dec 1133/* Called by the event loop to process a SIGHUP. */
c5aa993b 1134static void
c2c6d25f 1135async_disconnect (gdb_client_data arg)
b5a0ac70 1136{
b2cd6b29 1137
a70b8144 1138 try
b2cd6b29
JM
1139 {
1140 quit_cover ();
1141 }
1142
230d2906 1143 catch (const gdb_exception &exception)
b2cd6b29
JM
1144 {
1145 fputs_filtered ("Could not kill the program being debugged",
1146 gdb_stderr);
1147 exception_print (gdb_stderr, exception);
1148 }
1149
5b6d1e4f 1150 for (inferior *inf : all_inferiors ())
492d29ea 1151 {
5b6d1e4f
PA
1152 switch_to_inferior_no_thread (inf);
1153 try
1154 {
1155 pop_all_targets ();
1156 }
1157 catch (const gdb_exception &exception)
1158 {
1159 }
492d29ea 1160 }
b2cd6b29 1161
371d5dec 1162 signal (SIGHUP, SIG_DFL); /*FIXME: ??????????? */
ec4dfccf 1163 raise (SIGHUP);
b5a0ac70
SS
1164}
1165#endif
1166
6aa899ce 1167#ifdef SIGTSTP
c5aa993b 1168void
6aa899ce 1169handle_sigtstp (int sig)
0f71a2f6 1170{
f6fbab7d 1171 mark_async_signal_handler (sigtstp_token);
6aa899ce 1172 signal (sig, handle_sigtstp);
0f71a2f6
JM
1173}
1174
1175static void
6aa899ce 1176async_sigtstp_handler (gdb_client_data arg)
0f71a2f6 1177{
ab821bc6 1178 char *prompt = get_prompt ();
d7f9d729 1179
0f71a2f6 1180 signal (SIGTSTP, SIG_DFL);
2acceee2
JM
1181#if HAVE_SIGPROCMASK
1182 {
1183 sigset_t zero;
46711df8 1184
2acceee2 1185 sigemptyset (&zero);
21987b9c 1186 gdb_sigmask (SIG_SETMASK, &zero, 0);
2acceee2 1187 }
46711df8 1188#elif HAVE_SIGSETMASK
0f71a2f6 1189 sigsetmask (0);
2acceee2 1190#endif
ec4dfccf 1191 raise (SIGTSTP);
6aa899ce 1192 signal (SIGTSTP, handle_sigtstp);
0f71a2f6
JM
1193 printf_unfiltered ("%s", prompt);
1194 gdb_flush (gdb_stdout);
1195
371d5dec
MS
1196 /* Forget about any previous command -- null line now will do
1197 nothing. */
0f71a2f6
JM
1198 dont_repeat ();
1199}
6aa899ce 1200#endif /* SIGTSTP */
0f71a2f6 1201
371d5dec
MS
1202/* Tell the event loop what to do if SIGFPE is received.
1203 See event-signal.c. */
c5aa993b 1204static void
c2c6d25f 1205handle_sigfpe (int sig)
b5a0ac70 1206{
f6fbab7d 1207 mark_async_signal_handler (sigfpe_token);
b5a0ac70
SS
1208 signal (sig, handle_sigfpe);
1209}
1210
405feb71 1211/* Event loop will call this function to process a SIGFPE. */
c5aa993b 1212static void
c2c6d25f 1213async_float_handler (gdb_client_data arg)
b5a0ac70 1214{
371d5dec
MS
1215 /* This message is based on ANSI C, section 4.7. Note that integer
1216 divide by zero causes this, so "float" is a misnomer. */
8a3fe4f8 1217 error (_("Erroneous arithmetic operation."));
b5a0ac70 1218}
b5a0ac70
SS
1219\f
1220
0f71a2f6 1221/* Set things up for readline to be invoked via the alternate
3c610247
PA
1222 interface, i.e. via a callback function
1223 (gdb_rl_callback_read_char), and hook up instream to the event
1224 loop. */
1225
0f71a2f6 1226void
3c216924 1227gdb_setup_readline (int editing)
0f71a2f6 1228{
a74e1786
PA
1229 struct ui *ui = current_ui;
1230
362646f5
AC
1231 /* This function is a noop for the sync case. The assumption is
1232 that the sync setup is ALL done in gdb_init, and we would only
1233 mess it up here. The sync stuff should really go away over
1234 time. */
1a088d06 1235 if (!batch_silent)
d7e74731
PA
1236 gdb_stdout = new stdio_file (ui->outstream);
1237 gdb_stderr = new stderr_file (ui->errstream);
362646f5
AC
1238 gdb_stdlog = gdb_stderr; /* for moment */
1239 gdb_stdtarg = gdb_stderr; /* for moment */
8d4d924b 1240 gdb_stdtargerr = gdb_stderr; /* for moment */
362646f5 1241
3c216924
PA
1242 /* If the input stream is connected to a terminal, turn on editing.
1243 However, that is only allowed on the main UI, as we can only have
1244 one instance of readline. */
1245 if (ISATTY (ui->instream) && editing && ui == main_ui)
9e0b60a8 1246 {
371d5dec 1247 /* Tell gdb that we will be using the readline library. This
362646f5
AC
1248 could be overwritten by a command in .gdbinit like 'set
1249 editing on' or 'off'. */
3c216924
PA
1250 ui->command_editing = 1;
1251
362646f5
AC
1252 /* When a character is detected on instream by select or poll,
1253 readline will be invoked via this callback function. */
a74e1786 1254 ui->call_readline = gdb_rl_callback_read_char_wrapper;
3c216924
PA
1255
1256 /* Tell readline to use the same input stream that gdb uses. */
1257 rl_instream = ui->instream;
9e0b60a8 1258 }
362646f5
AC
1259 else
1260 {
3c216924 1261 ui->command_editing = 0;
a74e1786 1262 ui->call_readline = gdb_readline_no_editing_callback;
362646f5 1263 }
362646f5 1264
41fd2b0f
PA
1265 /* Now create the event source for this UI's input file descriptor.
1266 Another source is going to be the target program (inferior), but
1267 that must be registered only when it actually exists (I.e. after
1268 we say 'run' or after we connect to a remote target. */
3eb7562a 1269 ui_register_input_event_handler (ui);
0f71a2f6 1270}
cee6ddeb 1271
7d5b6fdd
EZ
1272/* Disable command input through the standard CLI channels. Used in
1273 the suspend proc for interpreters that use the standard gdb readline
1274 interface, like the cli & the mi. */
3c216924 1275
7d5b6fdd
EZ
1276void
1277gdb_disable_readline (void)
1278{
41fd2b0f
PA
1279 struct ui *ui = current_ui;
1280
362646f5
AC
1281 /* FIXME - It is too heavyweight to delete and remake these every
1282 time you run an interpreter that needs readline. It is probably
1283 better to have the interpreters cache these, which in turn means
1284 that this needs to be moved into interpreter specific code. */
7d5b6fdd
EZ
1285
1286#if 0
362646f5
AC
1287 ui_file_delete (gdb_stdout);
1288 ui_file_delete (gdb_stderr);
1289 gdb_stdlog = NULL;
1290 gdb_stdtarg = NULL;
8d4d924b 1291 gdb_stdtargerr = NULL;
7d5b6fdd
EZ
1292#endif
1293
3c216924
PA
1294 if (ui->command_editing)
1295 gdb_rl_callback_handler_remove ();
41fd2b0f 1296 delete_file_handler (ui->input_fd);
7d5b6fdd 1297}
6b01403b 1298
fece451c
CB
1299scoped_segv_handler_restore::scoped_segv_handler_restore (segv_handler_t new_handler)
1300{
1301 m_old_handler = thread_local_segv_handler;
1302 thread_local_segv_handler = new_handler;
1303}
1304
1305scoped_segv_handler_restore::~scoped_segv_handler_restore()
1306{
1307 thread_local_segv_handler = m_old_handler;
1308}
1309
6b01403b
SM
1310static const char debug_event_loop_off[] = "off";
1311static const char debug_event_loop_all_except_ui[] = "all-except-ui";
1312static const char debug_event_loop_all[] = "all";
1313
1314static const char *debug_event_loop_enum[] = {
1315 debug_event_loop_off,
1316 debug_event_loop_all_except_ui,
1317 debug_event_loop_all,
1318 nullptr
1319};
1320
1321static const char *debug_event_loop_value = debug_event_loop_off;
1322
1323static void
1324set_debug_event_loop_command (const char *args, int from_tty,
1325 cmd_list_element *c)
1326{
1327 if (debug_event_loop_value == debug_event_loop_off)
1328 debug_event_loop = debug_event_loop_kind::OFF;
1329 else if (debug_event_loop_value == debug_event_loop_all_except_ui)
1330 debug_event_loop = debug_event_loop_kind::ALL_EXCEPT_UI;
1331 else if (debug_event_loop_value == debug_event_loop_all)
1332 debug_event_loop = debug_event_loop_kind::ALL;
1333 else
1334 gdb_assert_not_reached ("Invalid debug event look kind value.");
1335}
1336
1337static void
1338show_debug_event_loop_command (struct ui_file *file, int from_tty,
1339 struct cmd_list_element *cmd, const char *value)
1340{
1341 fprintf_filtered (file, _("Event loop debugging is %s.\n"), value);
1342}
1343
1344void _initialize_event_top ();
1345void
1346_initialize_event_top ()
1347{
1348 add_setshow_enum_cmd ("event-loop", class_maintenance,
1349 debug_event_loop_enum,
1350 &debug_event_loop_value,
1351 _("Set event-loop debugging."),
1352 _("Show event-loop debugging."),
1353 _("\
1354Control whether to show event loop-related debug messages."),
1355 set_debug_event_loop_command,
1356 show_debug_event_loop_command,
1357 &setdebuglist, &showdebuglist);
1358}
This page took 1.61296 seconds and 4 git commands to generate.