| Index: gdb/event-top.c
|
| diff --git a/gdb/event-top.c b/gdb/event-top.c
|
| index 52e78523cf44f5308018ccbb351699419060bbe1..1290dd098261f304a9cd24bd418745007036933b 100644
|
| --- a/gdb/event-top.c
|
| +++ b/gdb/event-top.c
|
| @@ -1,7 +1,6 @@
|
| /* Top level stuff for GDB, the GNU debugger.
|
|
|
| - Copyright (C) 1999-2002, 2004-2005, 2007-2012 Free Software
|
| - Foundation, Inc.
|
| + Copyright (C) 1999-2013 Free Software Foundation, Inc.
|
|
|
| Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
|
|
|
| @@ -36,6 +35,8 @@
|
| #include "observer.h"
|
| #include "continuations.h"
|
| #include "gdbcmd.h" /* for dont_repeat() */
|
| +#include "annotate.h"
|
| +#include "maint.h"
|
|
|
| /* readline include files. */
|
| #include "readline/readline.h"
|
| @@ -58,9 +59,6 @@ static void handle_sigquit (int sig);
|
| static void handle_sighup (int sig);
|
| #endif
|
| static void handle_sigfpe (int sig);
|
| -#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
|
| -static void handle_sigwinch (int sig);
|
| -#endif
|
|
|
| /* Functions to be invoked by the event loop in response to
|
| signals. */
|
| @@ -126,19 +124,16 @@ int input_fd;
|
| handlers mark these functions as ready to be executed and the event
|
| loop, in a later iteration, calls them. See the function
|
| invoke_async_signal_handler. */
|
| -void *sigint_token;
|
| +static struct async_signal_handler *sigint_token;
|
| #ifdef SIGHUP
|
| -void *sighup_token;
|
| +static struct async_signal_handler *sighup_token;
|
| #endif
|
| #ifdef SIGQUIT
|
| -void *sigquit_token;
|
| -#endif
|
| -void *sigfpe_token;
|
| -#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
|
| -void *sigwinch_token;
|
| +static struct async_signal_handler *sigquit_token;
|
| #endif
|
| +static struct async_signal_handler *sigfpe_token;
|
| #ifdef STOP_SIGNAL
|
| -void *sigtstp_token;
|
| +static struct async_signal_handler *sigtstp_token;
|
| #endif
|
|
|
| /* Structure to save a partially entered command. This is used when
|
| @@ -172,9 +167,11 @@ rl_callback_read_char_wrapper (gdb_client_data client_data)
|
| }
|
|
|
| /* Initialize all the necessary variables, start the event loop,
|
| - register readline, and stdin, start the loop. */
|
| + register readline, and stdin, start the loop. The DATA is the
|
| + interpreter data cookie, ignored for now. */
|
| +
|
| void
|
| -cli_command_loop (void)
|
| +cli_command_loop (void *data)
|
| {
|
| display_gdb_prompt (0);
|
|
|
| @@ -238,6 +235,8 @@ display_gdb_prompt (char *new_prompt)
|
| char *actual_gdb_prompt = NULL;
|
| struct cleanup *old_chain;
|
|
|
| + annotate_display_prompt ();
|
| +
|
| /* Reset the nesting depth used when trace-commands is set. */
|
| reset_command_nest_depth ();
|
|
|
| @@ -272,6 +271,7 @@ display_gdb_prompt (char *new_prompt)
|
| rl_callback_handler_remove(), does the job. */
|
|
|
| rl_callback_handler_remove ();
|
| + do_cleanups (old_chain);
|
| return;
|
| }
|
| else
|
| @@ -415,7 +415,7 @@ command_handler (char *command)
|
| int stdin_is_tty = ISATTY (stdin);
|
| struct cleanup *stat_chain;
|
|
|
| - quit_flag = 0;
|
| + clear_quit_flag ();
|
| if (instream == stdin && stdin_is_tty)
|
| reinitialize_more_filter ();
|
|
|
| @@ -457,8 +457,6 @@ command_line_handler (char *rl)
|
| char *p;
|
| char *p1;
|
| char *nline;
|
| - char got_eof = 0;
|
| -
|
| int repeat = (instream == stdin);
|
|
|
| if (annotation_level > 1 && instream == stdin)
|
| @@ -503,7 +501,6 @@ command_line_handler (char *rl)
|
| and exit from gdb. */
|
| if (!rl || rl == (char *) EOF)
|
| {
|
| - got_eof = 1;
|
| command_handler (0);
|
| return; /* Lint. */
|
| }
|
| @@ -609,8 +606,7 @@ command_line_handler (char *rl)
|
| *p = 0;
|
|
|
| /* Add line to history if appropriate. */
|
| - if (instream == stdin
|
| - && ISATTY (stdin) && *linebuffer)
|
| + if (*linebuffer && input_from_terminal_p ())
|
| add_history (linebuffer);
|
|
|
| /* Note: lines consisting solely of comments are added to the command
|
| @@ -769,11 +765,6 @@ async_init_signals (void)
|
| sigfpe_token =
|
| create_async_signal_handler (async_float_handler, NULL);
|
|
|
| -#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
|
| - signal (SIGWINCH, handle_sigwinch);
|
| - sigwinch_token =
|
| - create_async_signal_handler (SIGWINCH_HANDLER, NULL);
|
| -#endif
|
| #ifdef STOP_SIGNAL
|
| sigtstp_token =
|
| create_async_signal_handler (async_stop_sig, NULL);
|
| @@ -781,12 +772,6 @@ async_init_signals (void)
|
|
|
| }
|
|
|
| -void
|
| -mark_async_signal_handler_wrapper (void *token)
|
| -{
|
| - mark_async_signal_handler ((struct async_signal_handler *) token);
|
| -}
|
| -
|
| /* Tell the event loop what to do if SIGINT is received.
|
| See event-signal.c. */
|
| void
|
| @@ -799,7 +784,7 @@ handle_sigint (int sig)
|
| set quit_flag to 1 here. Then if QUIT is called before we get to
|
| the event loop, we will unwind as expected. */
|
|
|
| - quit_flag = 1;
|
| + set_quit_flag ();
|
|
|
| /* If immediate_quit is set, we go ahead and process the SIGINT right
|
| away, even if we usually would defer this to the event loop. The
|
| @@ -828,10 +813,9 @@ async_request_quit (gdb_client_data arg)
|
| /* If the quit_flag has gotten reset back to 0 by the time we get
|
| back here, that means that an exception was thrown to unwind the
|
| current command before we got back to the event loop. So there
|
| - is no reason to call quit again here, unless immediate_quit is
|
| - set. */
|
| + is no reason to call quit again here. */
|
|
|
| - if (quit_flag || immediate_quit)
|
| + if (check_quit_flag ())
|
| quit ();
|
| }
|
|
|
| @@ -841,7 +825,7 @@ async_request_quit (gdb_client_data arg)
|
| static void
|
| handle_sigquit (int sig)
|
| {
|
| - mark_async_signal_handler_wrapper (sigquit_token);
|
| + mark_async_signal_handler (sigquit_token);
|
| signal (sig, handle_sigquit);
|
| }
|
| #endif
|
| @@ -862,7 +846,7 @@ async_do_nothing (gdb_client_data arg)
|
| static void
|
| handle_sighup (int sig)
|
| {
|
| - mark_async_signal_handler_wrapper (sighup_token);
|
| + mark_async_signal_handler (sighup_token);
|
| signal (sig, handle_sighup);
|
| }
|
|
|
| @@ -886,7 +870,7 @@ async_disconnect (gdb_client_data arg)
|
|
|
| TRY_CATCH (exception, RETURN_MASK_ALL)
|
| {
|
| - pop_all_targets (1);
|
| + pop_all_targets ();
|
| }
|
|
|
| signal (SIGHUP, SIG_DFL); /*FIXME: ??????????? */
|
| @@ -898,7 +882,7 @@ async_disconnect (gdb_client_data arg)
|
| void
|
| handle_stop_sig (int sig)
|
| {
|
| - mark_async_signal_handler_wrapper (sigtstp_token);
|
| + mark_async_signal_handler (sigtstp_token);
|
| signal (sig, handle_stop_sig);
|
| }
|
|
|
| @@ -938,7 +922,7 @@ async_stop_sig (gdb_client_data arg)
|
| static void
|
| handle_sigfpe (int sig)
|
| {
|
| - mark_async_signal_handler_wrapper (sigfpe_token);
|
| + mark_async_signal_handler (sigfpe_token);
|
| signal (sig, handle_sigfpe);
|
| }
|
|
|
| @@ -950,17 +934,6 @@ async_float_handler (gdb_client_data arg)
|
| divide by zero causes this, so "float" is a misnomer. */
|
| error (_("Erroneous arithmetic operation."));
|
| }
|
| -
|
| -/* Tell the event loop what to do if SIGWINCH is received.
|
| - See event-signal.c. */
|
| -#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
|
| -static void
|
| -handle_sigwinch (int sig)
|
| -{
|
| - mark_async_signal_handler_wrapper (sigwinch_token);
|
| - signal (sig, handle_sigwinch);
|
| -}
|
| -#endif
|
|
|
|
|
| /* Called by do_setshow_command. */
|
| @@ -983,7 +956,7 @@ gdb_setup_readline (void)
|
| time. */
|
| if (!batch_silent)
|
| gdb_stdout = stdio_fileopen (stdout);
|
| - gdb_stderr = stdio_fileopen (stderr);
|
| + gdb_stderr = stderr_fileopen ();
|
| gdb_stdlog = gdb_stderr; /* for moment */
|
| gdb_stdtarg = gdb_stderr; /* for moment */
|
| gdb_stdtargerr = gdb_stderr; /* for moment */
|
|
|