1999-05-11 22:29:07 +02:00
|
|
|
|
/* Top level stuff for GDB, the GNU debugger.
|
2005-01-17 17:17:36 +01:00
|
|
|
|
|
2012-01-04 09:17:56 +01:00
|
|
|
|
Copyright (C) 1999-2002, 2004-2005, 2007-2012 Free Software
|
|
|
|
|
Foundation, Inc.
|
2005-01-17 17:17:36 +01:00
|
|
|
|
|
1999-05-11 22:29:07 +02:00
|
|
|
|
Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
|
|
|
|
|
|
|
|
|
|
This file is part of GDB.
|
|
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU General Public License as published by
|
2007-08-23 20:08:50 +02:00
|
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
1999-05-11 22:29:07 +02:00
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
2010-12-29 01:58:14 +01:00
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
#include "defs.h"
|
1999-06-14 20:08:47 +02:00
|
|
|
|
#include "top.h"
|
1999-05-11 22:29:07 +02:00
|
|
|
|
#include "inferior.h"
|
1999-10-26 05:43:48 +02:00
|
|
|
|
#include "target.h"
|
1999-07-07 22:19:36 +02:00
|
|
|
|
#include "terminal.h" /* for job_control */
|
1999-06-21 15:27:42 +02:00
|
|
|
|
#include "event-loop.h"
|
1999-09-22 05:28:34 +02:00
|
|
|
|
#include "event-top.h"
|
2003-02-05 Jim Ingham <jingham@apple.com>
Keith Seitz <keiths@redhat.com>
Elena Zannoni <ezannoni@redhat.com>
Andrew Cagney <ac131313@redhat.com>
* Makefile.in (SUBDIR_CLI_OBS): Add "cli-interp.o".
(SUBDIR_CLI_SRCS): Add "cli/cli-interp.c".
(SUBDIR_MI_OBS): Add "mi-interp.o".
(SUBDIR_MI_SRCS): Add "mi/mi-interp.c".
(SFILES): Add "interps.c".
(COMMON_OBS): Add "interps.o".
(interps_h, mi_main_h): Define.
(interps.o, cli-interp.o, mi-interp.o): Add dependencies.
(mi-main.o, main.o, event-top.o): Update dependencies.
* cli/cli-interp.c: New file.
* interps.h, interps.c: New files.
* top.c: (gdb_init): Don't install the default interpreter, handed
by captured_main.
* main.c: Include "interps.h".
(interpreter_p): Note that it should malloc'ed.
(captured_command_loop): Call current_interp_command_loop.
(captured_main): Initialize interpreter_p to INTERP_CONSOLE. Use
xfree and xstrdup when updating interpreter_p. Install the
default interpreter. Add hack to stop mi1's copyright notice
being encoded.
* event-top.h (gdb_setup_readline): Declare.
(gdb_disable_readline): Declare.
* event-top.c: Include "interps.h".
(display_gdb_prompt): Call current_interp_display_prompt_p.
(gdb_setup_readline): Initialize gdb_stdout, gdb_stderr,
gdb_stdlog, and gdb_stdtarg.
(_initialize_event_loop): Don't call gdb_setup_readline.
* cli-out.c (cli_out_set_stream): New function.
* cli-out.h (cli_out_set_stream): Declare.
2003-02-06 02:19:12 +01:00
|
|
|
|
#include "interps.h"
|
2001-02-06 05:17:03 +01:00
|
|
|
|
#include <signal.h>
|
2005-01-12 Andrew Cagney <cagney@gnu.org>
* exceptions.h (enum return_reason, RETURN_MASK)
(RETURN_MASK_QUIT, RETURN_MASK_ERROR, RETURN_MASK_ALL)
(return_mask, throw_exception, catch_exceptions_ftype)
(catch_exceptions_with_msg, catch_errors_ftype, catch_errors)
(catch_command_errors_ftype, catch_command_errors): Move to
exceptions.h.
* exceptions.c, exceptions.h: New files.
* top.c: Do not include <setjmp.h>.
(SIGJMP_BUF, SIGSETJMP, SIGLONGJMP, catch_return)
(throw_exception, catcher, catch_exceptions)
(catch_exceptions_with_msg, struct catch_errors_args)
(do_catch_errors, catch_errors, struct captured_command_args)
(do_captured_command, catch_command_errors): Move to exceptions.c.
* wrapper.c, wince.c, win32-nat.c, utils.c: Include "exceptions.h".
* tui/tui-interp.c, top.c, thread.c, symmisc.c: Ditto.
* symfile-mem.c, stack.c, solib.c, rs6000-nat.c: Ditto.
* remote-sds.c, remote-mips.c, remote-fileio.c: Ditto.
* remote-e7000.c, objc-lang.c, ocd.c: Ditto.
* remote.c, nto-procfs.c, monitor.c, mi/mi-main.c: Ditto.
* main.c, m32r-rom.c, infrun.c, inf-loop.c: Ditto.
* hppa-hpux-tdep.c, frame.c, event-top.c, event-loop.c: Ditto.
* corelow.c, corefile.c, cli/cli-interp.c, breakpoint.c: Ditto.
* ada-valprint.c, ada-lang.c: Ditto.
* Makefile.in (HFILES_NO_SRCDIR, COMMON_OBS): Add exceptions.h and
exceptions.o. Update all dependencies.
2005-01-12 19:31:35 +01:00
|
|
|
|
#include "exceptions.h"
|
2006-07-21 16:46:56 +02:00
|
|
|
|
#include "cli/cli-script.h" /* for reset_command_nest_depth */
|
2008-05-02 15:58:38 +02:00
|
|
|
|
#include "main.h"
|
2008-07-10 00:16:15 +02:00
|
|
|
|
#include "gdbthread.h"
|
2011-07-21 13:03:48 +02:00
|
|
|
|
#include "observer.h"
|
2011-05-27 Pedro Alves <pedro@codesourcery.com>
* defs.h (struct continuation, continuation_ftype)
(continuation_free_arg_ftype, add_continuation)
(do_all_continuations, do_all_continuations_thread)
(discard_all_continuations, discard_all_continuations_thread)
(add_intermediate_continuation, do_all_intermediate_continuations)
(do_all_intermediate_continuations_thread)
(discard_all_intermediate_continuations)
(discard_all_intermediate_continuations_thread)
(add_inferior_continuation, do_all_inferior_continuations)
(discard_all_inferior_continuations): Move to ...
* continuations.h: ... this new file.
* breakpoint.c, continuations.c, event-top.c, inf-loop.c,
infcmd.c, inferior.c, infrun.c, interps.c: Include
continuations.h.
2011-05-27 20:28:18 +02:00
|
|
|
|
#include "continuations.h"
|
2010-12-29 01:58:14 +01:00
|
|
|
|
#include "gdbcmd.h" /* for dont_repeat() */
|
1999-08-31 03:14:27 +02:00
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* readline include files. */
|
2004-02-28 Andrew Cagney <cagney@redhat.com>
* utils.c: Use "", instead of <>, to include readline.
tui/tui-win.c, tui/tui.c, tui/tui-hooks.c: Ditto.
* tracepoint.c, top.c, symmisc.c, symfile.c: Ditto.
* source.c, solib.c, exec.c, event-top.c: Ditto.
* corelow.c, completer.c, cli/cli-setshow.c: Ditto.
* cli/cli-dump.c, cli/cli-cmds.c: Ditto.
* Makefile.in: Update all dependencies.
(readline_tilde_h, readline_history_h): Define.
(readline_headers): Delete.
2004-02-28 19:04:37 +01:00
|
|
|
|
#include "readline/readline.h"
|
|
|
|
|
#include "readline/history.h"
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
/* readline defines this. */
|
|
|
|
|
#undef savestring
|
|
|
|
|
|
1999-09-22 05:28:34 +02:00
|
|
|
|
static void rl_callback_read_char_wrapper (gdb_client_data client_data);
|
|
|
|
|
static void command_line_handler (char *rl);
|
|
|
|
|
static void change_line_handler (void);
|
|
|
|
|
static void command_handler (char *command);
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
static char *top_level_prompt (void);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Signal handlers. */
|
2005-03-16 18:05:31 +01:00
|
|
|
|
#ifdef SIGQUIT
|
1999-09-22 05:28:34 +02:00
|
|
|
|
static void handle_sigquit (int sig);
|
2005-03-16 18:05:31 +01:00
|
|
|
|
#endif
|
2006-02-23 19:37:42 +01:00
|
|
|
|
#ifdef SIGHUP
|
1999-09-22 05:28:34 +02:00
|
|
|
|
static void handle_sighup (int sig);
|
2006-02-23 19:37:42 +01:00
|
|
|
|
#endif
|
1999-09-22 05:28:34 +02:00
|
|
|
|
static void handle_sigfpe (int sig);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
/* Functions to be invoked by the event loop in response to
|
2010-12-29 01:58:14 +01:00
|
|
|
|
signals. */
|
2006-02-23 19:37:42 +01:00
|
|
|
|
#if defined (SIGQUIT) || defined (SIGHUP)
|
1999-09-22 05:28:34 +02:00
|
|
|
|
static void async_do_nothing (gdb_client_data);
|
2006-02-23 19:37:42 +01:00
|
|
|
|
#endif
|
|
|
|
|
#ifdef SIGHUP
|
1999-09-22 05:28:34 +02:00
|
|
|
|
static void async_disconnect (gdb_client_data);
|
2006-02-23 19:37:42 +01:00
|
|
|
|
#endif
|
1999-09-22 05:28:34 +02:00
|
|
|
|
static void async_float_handler (gdb_client_data);
|
2006-02-23 19:37:42 +01:00
|
|
|
|
#ifdef STOP_SIGNAL
|
1999-09-22 05:28:34 +02:00
|
|
|
|
static void async_stop_sig (gdb_client_data);
|
2006-02-23 19:37:42 +01:00
|
|
|
|
#endif
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
/* Readline offers an alternate interface, via callback
|
2010-12-29 01:58:14 +01:00
|
|
|
|
functions. These are all included in the file callback.c in the
|
1999-05-11 22:29:07 +02:00
|
|
|
|
readline distribution. This file provides (mainly) a function, which
|
|
|
|
|
the event loop uses as callback (i.e. event handler) whenever an event
|
|
|
|
|
is detected on the standard input file descriptor.
|
|
|
|
|
readline_callback_read_char is called (by the GDB event loop) whenever
|
2010-12-29 01:58:14 +01:00
|
|
|
|
there is a new character ready on the input stream. This function
|
1999-05-11 22:29:07 +02:00
|
|
|
|
incrementally builds a buffer internal to readline where it
|
|
|
|
|
accumulates the line read up to the point of invocation. In the
|
|
|
|
|
special case in which the character read is newline, the function
|
|
|
|
|
invokes a GDB supplied callback routine, which does the processing of
|
|
|
|
|
a full command line. This latter routine is the asynchronous analog
|
2010-12-29 01:58:14 +01:00
|
|
|
|
of the old command_line_input in gdb. Instead of invoking (and waiting
|
1999-05-11 22:29:07 +02:00
|
|
|
|
for) readline to read the command line and pass it back to
|
|
|
|
|
command_loop for processing, the new command_line_handler function has
|
|
|
|
|
the command line already available as its parameter. INPUT_HANDLER is
|
|
|
|
|
to be set to the function that readline will invoke when a complete
|
|
|
|
|
line of input is ready. CALL_READLINE is to be set to the function
|
2010-12-29 01:58:14 +01:00
|
|
|
|
that readline offers as callback to the event_loop. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
1999-09-22 05:28:34 +02:00
|
|
|
|
void (*input_handler) (char *);
|
|
|
|
|
void (*call_readline) (gdb_client_data);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Important variables for the event loop. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
/* This is used to determine if GDB is using the readline library or
|
2010-12-29 01:58:14 +01:00
|
|
|
|
its own simplified form of readline. It is used by the asynchronous
|
1999-06-14 20:08:47 +02:00
|
|
|
|
form of the set editing command.
|
1999-05-25 20:09:09 +02:00
|
|
|
|
ezannoni: as of 1999-04-29 I expect that this
|
1999-05-11 22:29:07 +02:00
|
|
|
|
variable will not be used after gdb is changed to use the event
|
2010-12-29 01:58:14 +01:00
|
|
|
|
loop as default engine, and event-top.c is merged into top.c. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
int async_command_editing_p;
|
|
|
|
|
|
|
|
|
|
/* This is the annotation suffix that will be used when the
|
2010-12-29 01:58:14 +01:00
|
|
|
|
annotation_level is 2. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
char *async_annotation_suffix;
|
|
|
|
|
|
1999-08-31 03:14:27 +02:00
|
|
|
|
/* This is used to display the notification of the completion of an
|
2010-12-29 01:58:14 +01:00
|
|
|
|
asynchronous execution command. */
|
1999-08-31 03:14:27 +02:00
|
|
|
|
int exec_done_display_p = 0;
|
|
|
|
|
|
1999-05-11 22:29:07 +02:00
|
|
|
|
/* This is the file descriptor for the input stream that GDB uses to
|
2010-12-29 01:58:14 +01:00
|
|
|
|
read commands from. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
int input_fd;
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Signal handling variables. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
/* Each of these is a pointer to a function that the event loop will
|
2010-12-29 01:58:14 +01:00
|
|
|
|
invoke if the corresponding signal has received. The real signal
|
1999-05-11 22:29:07 +02:00
|
|
|
|
handlers mark these functions as ready to be executed and the event
|
2010-12-29 01:58:14 +01:00
|
|
|
|
loop, in a later iteration, calls them. See the function
|
|
|
|
|
invoke_async_signal_handler. */
|
2012-10-23 08:12:04 +02:00
|
|
|
|
static struct async_signal_handler *sigint_token;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
#ifdef SIGHUP
|
2012-10-23 08:12:04 +02:00
|
|
|
|
static struct async_signal_handler *sighup_token;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
#endif
|
2005-03-16 18:05:31 +01:00
|
|
|
|
#ifdef SIGQUIT
|
2012-10-23 08:12:04 +02:00
|
|
|
|
static struct async_signal_handler *sigquit_token;
|
2005-03-16 18:05:31 +01:00
|
|
|
|
#endif
|
2012-10-23 08:12:04 +02:00
|
|
|
|
static struct async_signal_handler *sigfpe_token;
|
1999-06-14 20:08:47 +02:00
|
|
|
|
#ifdef STOP_SIGNAL
|
2012-10-23 08:12:04 +02:00
|
|
|
|
static struct async_signal_handler *sigtstp_token;
|
1999-06-14 20:08:47 +02:00
|
|
|
|
#endif
|
|
|
|
|
|
1999-05-11 22:29:07 +02:00
|
|
|
|
/* Structure to save a partially entered command. This is used when
|
2010-12-29 01:58:14 +01:00
|
|
|
|
the user types '\' at the end of a command line. This is necessary
|
1999-05-11 22:29:07 +02:00
|
|
|
|
because each line of input is handled by a different call to
|
|
|
|
|
command_line_handler, and normally there is no state retained
|
2010-12-29 01:58:14 +01:00
|
|
|
|
between different calls. */
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
static int more_to_come = 0;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
struct readline_input_state
|
|
|
|
|
{
|
|
|
|
|
char *linebuffer;
|
|
|
|
|
char *linebuffer_ptr;
|
|
|
|
|
}
|
|
|
|
|
readline_input_state;
|
2001-11-27 05:15:09 +01:00
|
|
|
|
|
|
|
|
|
/* This hook is called by rl_callback_read_char_wrapper after each
|
|
|
|
|
character is processed. */
|
2011-03-16 16:18:58 +01:00
|
|
|
|
void (*after_char_processing_hook) (void);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Wrapper function for calling into the readline library. The event
|
|
|
|
|
loop expects the callback function to have a paramter, while
|
|
|
|
|
readline expects none. */
|
1999-09-22 05:28:34 +02:00
|
|
|
|
static void
|
|
|
|
|
rl_callback_read_char_wrapper (gdb_client_data client_data)
|
|
|
|
|
{
|
|
|
|
|
rl_callback_read_char ();
|
2001-11-27 05:15:09 +01:00
|
|
|
|
if (after_char_processing_hook)
|
|
|
|
|
(*after_char_processing_hook) ();
|
1999-09-22 05:28:34 +02:00
|
|
|
|
}
|
|
|
|
|
|
1999-05-11 22:29:07 +02:00
|
|
|
|
/* Initialize all the necessary variables, start the event loop,
|
2010-12-29 01:58:14 +01:00
|
|
|
|
register readline, and stdin, start the loop. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
cli_command_loop (void)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2011-09-02 23:16:54 +02:00
|
|
|
|
display_gdb_prompt (0);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Now it's time to start the event loop. */
|
1999-06-28 18:06:02 +02:00
|
|
|
|
start_event_loop ();
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Change the function to be invoked every time there is a character
|
2010-12-29 01:58:14 +01:00
|
|
|
|
ready on stdin. This is used when the user sets the editing off,
|
1999-05-11 22:29:07 +02:00
|
|
|
|
therefore bypassing readline, and letting gdb handle the input
|
2010-12-29 01:58:14 +01:00
|
|
|
|
itself, via gdb_readline2. Also it is used in the opposite case in
|
1999-05-11 22:29:07 +02:00
|
|
|
|
which the user sets editing on again, by restoring readline
|
2010-12-29 01:58:14 +01:00
|
|
|
|
handling of the input. */
|
1999-05-25 20:09:09 +02:00
|
|
|
|
static void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
change_line_handler (void)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* NOTE: this operates on input_fd, not instream. If we are reading
|
|
|
|
|
commands from a file, instream will point to the file. However in
|
1999-09-22 05:28:34 +02:00
|
|
|
|
async mode, we always read commands from a file with editing
|
2010-12-29 01:58:14 +01:00
|
|
|
|
off. This means that the 'set editing on/off' will have effect
|
|
|
|
|
only on the interactive session. */
|
1999-09-22 05:28:34 +02:00
|
|
|
|
|
1999-05-11 22:29:07 +02:00
|
|
|
|
if (async_command_editing_p)
|
|
|
|
|
{
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Turn on editing by using readline. */
|
1999-09-22 05:28:34 +02:00
|
|
|
|
call_readline = rl_callback_read_char_wrapper;
|
1999-06-14 20:08:47 +02:00
|
|
|
|
input_handler = command_line_handler;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Turn off editing by using gdb_readline2. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
rl_callback_handler_remove ();
|
|
|
|
|
call_readline = gdb_readline2;
|
1999-06-14 20:08:47 +02:00
|
|
|
|
|
|
|
|
|
/* Set up the command handler as well, in case we are called as
|
2010-12-29 01:58:14 +01:00
|
|
|
|
first thing from .gdbinit. */
|
1999-06-14 20:08:47 +02:00
|
|
|
|
input_handler = command_line_handler;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
/* Displays the prompt. If the argument NEW_PROMPT is NULL, the
|
|
|
|
|
prompt that is displayed is the current top level prompt.
|
|
|
|
|
Otherwise, it displays whatever NEW_PROMPT is as a local/secondary
|
|
|
|
|
prompt.
|
|
|
|
|
|
|
|
|
|
This is used after each gdb command has completed, and in the
|
|
|
|
|
following cases:
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
1. When the user enters a command line which is ended by '\'
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
indicating that the command will continue on the next line. In
|
|
|
|
|
that case the prompt that is displayed is the empty string.
|
|
|
|
|
|
1999-06-14 20:08:47 +02:00
|
|
|
|
2. When the user is entering 'commands' for a breakpoint, or
|
2010-12-29 01:58:14 +01:00
|
|
|
|
actions for a tracepoint. In this case the prompt will be '>'
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
|
|
|
|
|
3. On prompting for pagination. */
|
|
|
|
|
|
1999-05-11 22:29:07 +02:00
|
|
|
|
void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
display_gdb_prompt (char *new_prompt)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2011-07-21 13:03:48 +02:00
|
|
|
|
char *actual_gdb_prompt = NULL;
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
struct cleanup *old_chain;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
2006-07-21 16:46:56 +02:00
|
|
|
|
/* Reset the nesting depth used when trace-commands is set. */
|
|
|
|
|
reset_command_nest_depth ();
|
|
|
|
|
|
2003-02-05 Jim Ingham <jingham@apple.com>
Keith Seitz <keiths@redhat.com>
Elena Zannoni <ezannoni@redhat.com>
Andrew Cagney <ac131313@redhat.com>
* Makefile.in (SUBDIR_CLI_OBS): Add "cli-interp.o".
(SUBDIR_CLI_SRCS): Add "cli/cli-interp.c".
(SUBDIR_MI_OBS): Add "mi-interp.o".
(SUBDIR_MI_SRCS): Add "mi/mi-interp.c".
(SFILES): Add "interps.c".
(COMMON_OBS): Add "interps.o".
(interps_h, mi_main_h): Define.
(interps.o, cli-interp.o, mi-interp.o): Add dependencies.
(mi-main.o, main.o, event-top.o): Update dependencies.
* cli/cli-interp.c: New file.
* interps.h, interps.c: New files.
* top.c: (gdb_init): Don't install the default interpreter, handed
by captured_main.
* main.c: Include "interps.h".
(interpreter_p): Note that it should malloc'ed.
(captured_command_loop): Call current_interp_command_loop.
(captured_main): Initialize interpreter_p to INTERP_CONSOLE. Use
xfree and xstrdup when updating interpreter_p. Install the
default interpreter. Add hack to stop mi1's copyright notice
being encoded.
* event-top.h (gdb_setup_readline): Declare.
(gdb_disable_readline): Declare.
* event-top.c: Include "interps.h".
(display_gdb_prompt): Call current_interp_display_prompt_p.
(gdb_setup_readline): Initialize gdb_stdout, gdb_stderr,
gdb_stdlog, and gdb_stdtarg.
(_initialize_event_loop): Don't call gdb_setup_readline.
* cli-out.c (cli_out_set_stream): New function.
* cli-out.h (cli_out_set_stream): Declare.
2003-02-06 02:19:12 +01:00
|
|
|
|
/* Each interpreter has its own rules on displaying the command
|
|
|
|
|
prompt. */
|
|
|
|
|
if (!current_interp_display_prompt_p ())
|
2000-02-23 01:25:43 +01:00
|
|
|
|
return;
|
|
|
|
|
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
old_chain = make_cleanup (free_current_contents, &actual_gdb_prompt);
|
2011-07-21 13:03:48 +02:00
|
|
|
|
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
/* Do not call the python hook on an explicit prompt change as
|
|
|
|
|
passed to this function, as this forms a secondary/local prompt,
|
|
|
|
|
IE, displayed but not set. */
|
|
|
|
|
if (! new_prompt)
|
1999-07-20 01:30:11 +02:00
|
|
|
|
{
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
if (sync_execution)
|
2011-07-21 13:03:48 +02:00
|
|
|
|
{
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
/* This is to trick readline into not trying to display the
|
|
|
|
|
prompt. Even though we display the prompt using this
|
|
|
|
|
function, readline still tries to do its own display if
|
|
|
|
|
we don't call rl_callback_handler_install and
|
|
|
|
|
rl_callback_handler_remove (which readline detects
|
|
|
|
|
because a global variable is not set). If readline did
|
|
|
|
|
that, it could mess up gdb signal handlers for SIGINT.
|
|
|
|
|
Readline assumes that between calls to rl_set_signals and
|
|
|
|
|
rl_clear_signals gdb doesn't do anything with the signal
|
|
|
|
|
handlers. Well, that's not the case, because when the
|
|
|
|
|
target executes we change the SIGINT signal handler. If
|
|
|
|
|
we allowed readline to display the prompt, the signal
|
|
|
|
|
handler change would happen exactly between the calls to
|
|
|
|
|
the above two functions. Calling
|
|
|
|
|
rl_callback_handler_remove(), does the job. */
|
|
|
|
|
|
|
|
|
|
rl_callback_handler_remove ();
|
|
|
|
|
return;
|
2011-07-21 13:03:48 +02:00
|
|
|
|
}
|
|
|
|
|
else
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
{
|
|
|
|
|
/* Display the top level prompt. */
|
|
|
|
|
actual_gdb_prompt = top_level_prompt ();
|
|
|
|
|
}
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
else
|
|
|
|
|
actual_gdb_prompt = xstrdup (new_prompt);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
if (async_command_editing_p)
|
|
|
|
|
{
|
|
|
|
|
rl_callback_handler_remove ();
|
2011-07-21 13:03:48 +02:00
|
|
|
|
rl_callback_handler_install (actual_gdb_prompt, input_handler);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* new_prompt at this point can be the top of the stack or the one
|
2011-03-01 22:12:27 +01:00
|
|
|
|
passed in. It can't be NULL. */
|
|
|
|
|
else
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
|
|
|
|
/* Don't use a _filtered function here. It causes the assumed
|
|
|
|
|
character position to be off, since the newline we read from
|
|
|
|
|
the user is not accounted for. */
|
2011-07-21 13:03:48 +02:00
|
|
|
|
fputs_unfiltered (actual_gdb_prompt, gdb_stdout);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
gdb_flush (gdb_stdout);
|
|
|
|
|
}
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
|
|
|
|
|
do_cleanups (old_chain);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
/* Return the top level prompt, as specified by "set prompt", possibly
|
|
|
|
|
overriden by the python gdb.prompt_hook hook, and then composed
|
|
|
|
|
with the prompt prefix and suffix (annotations). The caller is
|
|
|
|
|
responsible for freeing the returned string. */
|
|
|
|
|
|
|
|
|
|
static char *
|
|
|
|
|
top_level_prompt (void)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
char *prefix;
|
|
|
|
|
char *prompt = NULL;
|
|
|
|
|
char *suffix;
|
|
|
|
|
char *composed_prompt;
|
|
|
|
|
size_t prompt_length;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
/* Give observers a chance of changing the prompt. E.g., the python
|
|
|
|
|
`gdb.prompt_hook' is installed as an observer. */
|
|
|
|
|
observer_notify_before_prompt (get_prompt ());
|
|
|
|
|
|
|
|
|
|
prompt = xstrdup (get_prompt ());
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
if (annotation_level >= 2)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
/* Prefix needs to have new line at end. */
|
|
|
|
|
prefix = (char *) alloca (strlen (async_annotation_suffix) + 10);
|
|
|
|
|
strcpy (prefix, "\n\032\032pre-");
|
|
|
|
|
strcat (prefix, async_annotation_suffix);
|
|
|
|
|
strcat (prefix, "\n");
|
|
|
|
|
|
|
|
|
|
/* Suffix needs to have a new line at end and \032 \032 at
|
|
|
|
|
beginning. */
|
|
|
|
|
suffix = (char *) alloca (strlen (async_annotation_suffix) + 6);
|
|
|
|
|
strcpy (suffix, "\n\032\032");
|
|
|
|
|
strcat (suffix, async_annotation_suffix);
|
|
|
|
|
strcat (suffix, "\n");
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
prefix = "";
|
|
|
|
|
suffix = "";
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
prompt_length = strlen (prefix) + strlen (prompt) + strlen (suffix);
|
|
|
|
|
composed_prompt = xmalloc (prompt_length + 1);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
strcpy (composed_prompt, prefix);
|
|
|
|
|
strcat (composed_prompt, prompt);
|
|
|
|
|
strcat (composed_prompt, suffix);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
xfree (prompt);
|
|
|
|
|
|
|
|
|
|
return composed_prompt;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
1999-09-22 05:28:34 +02:00
|
|
|
|
|
|
|
|
|
/* When there is an event ready on the stdin file desriptor, instead
|
|
|
|
|
of calling readline directly throught the callback function, or
|
|
|
|
|
instead of calling gdb_readline2, give gdb a chance to detect
|
2010-12-29 01:58:14 +01:00
|
|
|
|
errors and do something. */
|
1999-09-22 05:28:34 +02:00
|
|
|
|
void
|
1999-10-06 01:13:56 +02:00
|
|
|
|
stdin_event_handler (int error, gdb_client_data client_data)
|
1999-09-22 05:28:34 +02:00
|
|
|
|
{
|
|
|
|
|
if (error)
|
|
|
|
|
{
|
2005-02-11 Andrew Cagney <cagney@gnu.org>
Mark up some of printf_filtered and printf_unfiltered.
* ada-lang.c, annotate.c, arch-utils.c, breakpoint.c: Update.
* corelow.c, cp-namespace.c, cp-support.c, dcache.c: Update.
* demangle.c, dsrec.c, dwarf2read.c, dwarfread.c: Update.
* event-loop.c, event-top.c, exec.c, f-valprint.c: Update.
* gdbtypes.c, inf-loop.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcmd.c, inflow.c, infrun.c, inftarg.c, language.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, maint.c: Update.
* mdebugread.c, memattr.c, monitor.c, objc-lang.c: Update.
* ocd.c, osabi.c, printcmd.c, procfs.c, regcache.c: Update.
* remote.c, solib-som.c, solib.c, somsolib.c, source.c: Update.
* stack.c, symfile.c, symmisc.c, target.c, thread.c: Update.
* top.c, utils.c, valprint.c, value.c, cli/cli-cmds.c: Update.
* cli/cli-dump.c, cli/cli-logging.c, tui/tui-hooks.c: Update.
* tui/tui-regs.c, tui/tui-win.c: Update.
2005-02-12 01:39:24 +01:00
|
|
|
|
printf_unfiltered (_("error detected on stdin\n"));
|
1999-10-06 01:13:56 +02:00
|
|
|
|
delete_file_handler (input_fd);
|
1999-09-22 05:28:34 +02:00
|
|
|
|
discard_all_continuations ();
|
2008-07-12 21:25:42 +02:00
|
|
|
|
discard_all_intermediate_continuations ();
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* If stdin died, we may as well kill gdb. */
|
2000-01-18 01:55:13 +01:00
|
|
|
|
quit_command ((char *) 0, stdin == instream);
|
1999-09-22 05:28:34 +02:00
|
|
|
|
}
|
|
|
|
|
else
|
1999-09-28 23:55:21 +02:00
|
|
|
|
(*call_readline) (client_data);
|
1999-09-22 05:28:34 +02:00
|
|
|
|
}
|
|
|
|
|
|
1999-09-28 23:55:21 +02:00
|
|
|
|
/* Re-enable stdin after the end of an execution command in
|
|
|
|
|
synchronous mode, or after an error from the target, and we aborted
|
2010-12-29 01:58:14 +01:00
|
|
|
|
the exec operation. */
|
1999-09-28 23:55:21 +02:00
|
|
|
|
|
|
|
|
|
void
|
2008-03-14 20:55:51 +01:00
|
|
|
|
async_enable_stdin (void)
|
1999-09-28 23:55:21 +02:00
|
|
|
|
{
|
2008-03-14 19:57:44 +01:00
|
|
|
|
if (sync_execution)
|
|
|
|
|
{
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* See NOTE in async_disable_stdin(). */
|
2008-03-14 19:57:44 +01:00
|
|
|
|
/* FIXME: cagney/1999-09-27: Call this before clearing
|
|
|
|
|
sync_execution. Current target_terminal_ours() implementations
|
2010-12-29 01:58:14 +01:00
|
|
|
|
check for sync_execution before switching the terminal. */
|
2008-03-14 19:57:44 +01:00
|
|
|
|
target_terminal_ours ();
|
|
|
|
|
sync_execution = 0;
|
|
|
|
|
}
|
1999-09-28 23:55:21 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Disable reads from stdin (the console) marking the command as
|
2010-12-29 01:58:14 +01:00
|
|
|
|
synchronous. */
|
1999-09-28 23:55:21 +02:00
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
async_disable_stdin (void)
|
|
|
|
|
{
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
sync_execution = 1;
|
1999-09-28 23:55:21 +02:00
|
|
|
|
}
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
1999-09-28 23:55:21 +02:00
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Handles a gdb command. This function is called by
|
1999-05-11 22:29:07 +02:00
|
|
|
|
command_line_handler, which has processed one or more input lines
|
2010-12-29 01:58:14 +01:00
|
|
|
|
into COMMAND. */
|
1999-05-25 20:09:09 +02:00
|
|
|
|
/* NOTE: 1999-04-30 This is the asynchronous version of the command_loop
|
1999-05-11 22:29:07 +02:00
|
|
|
|
function. The command_loop function will be obsolete when we
|
2010-12-29 01:58:14 +01:00
|
|
|
|
switch to use the event loop at every execution of gdb. */
|
1999-05-25 20:09:09 +02:00
|
|
|
|
static void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
command_handler (char *command)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
|
|
|
|
int stdin_is_tty = ISATTY (stdin);
|
2010-06-26 08:44:47 +02:00
|
|
|
|
struct cleanup *stat_chain;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
2012-08-22 19:48:55 +02:00
|
|
|
|
clear_quit_flag ();
|
1999-05-11 22:29:07 +02:00
|
|
|
|
if (instream == stdin && stdin_is_tty)
|
|
|
|
|
reinitialize_more_filter ();
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* If readline returned a NULL command, it means that the connection
|
|
|
|
|
with the terminal is gone. This happens at the end of a
|
|
|
|
|
testsuite run, after Expect has hung up but GDB is still alive.
|
|
|
|
|
In such a case, we just quit gdb killing the inferior program
|
|
|
|
|
too. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
if (command == 0)
|
2006-12-06 17:49:57 +01:00
|
|
|
|
{
|
|
|
|
|
printf_unfiltered ("quit\n");
|
|
|
|
|
execute_command ("quit", stdin == instream);
|
|
|
|
|
}
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
2010-06-26 08:44:47 +02:00
|
|
|
|
stat_chain = make_command_stats_cleanup (1);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
execute_command (command, instream == stdin);
|
1999-07-07 22:19:36 +02:00
|
|
|
|
|
2008-09-08 23:46:21 +02:00
|
|
|
|
/* Do any commands attached to breakpoint we stopped at. */
|
|
|
|
|
bpstat_do_actions ();
|
1999-07-07 22:19:36 +02:00
|
|
|
|
|
2010-06-26 08:44:47 +02:00
|
|
|
|
do_cleanups (stat_chain);
|
1999-07-05 19:58:44 +02:00
|
|
|
|
}
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Handle a complete line of input. This is called by the callback
|
|
|
|
|
mechanism within the readline library. Deal with incomplete
|
|
|
|
|
commands as well, by saving the partial input in a global
|
|
|
|
|
buffer. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
1999-05-25 20:09:09 +02:00
|
|
|
|
/* NOTE: 1999-04-30 This is the asynchronous version of the
|
2010-12-29 01:58:14 +01:00
|
|
|
|
command_line_input function; command_line_input will become
|
1999-05-11 22:29:07 +02:00
|
|
|
|
obsolete once we use the event loop as the default mechanism in
|
2010-12-29 01:58:14 +01:00
|
|
|
|
GDB. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
static void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
command_line_handler (char *rl)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
|
|
|
|
static char *linebuffer = 0;
|
|
|
|
|
static unsigned linelength = 0;
|
2003-09-14 Andrew Cagney <cagney@redhat.com>
* alpha-nat.c: Remove some occurances of "register".
* alpha-tdep.c, arm-tdep.c, blockframe.c, breakpoint.c: Ditto.
* buildsym.c, c-typeprint.c, c-valprint.c, coffread.c: Ditto.
* corefile.c, cp-support.c, cp-valprint.c, cris-tdep.c: Ditto.
* dbxread.c, dcache.c, dwarf2read.c, elfread.c: Ditto.
* environ.c, eval.c, event-top.c, f-typeprint.c: Ditto.
* f-valprint.c, findvar.c, frame.c, gdbtypes.c: Ditto.
* h8300-tdep.c, hppa-tdep.c, hppab-nat.c, hppah-nat.c: Ditto.
* hppam3-nat.c, hpread.c, ia64-aix-nat.c, ia64-linux-nat.c: Ditto.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Ditto.
* infttrace.c, irix5-nat.c, jv-typeprint.c: Ditto.
* jv-valprint.c, m68k-tdep.c, m68klinux-nat.c, main.c: Ditto.
* mdebugread.c, minsyms.c, mips-linux-tdep.c: Ditto.
* mips-nat.c, mips-tdep.c, mipsread.c, mipsv4-nat.c: Ditto.
* ns32k-tdep.c, objfiles.c, p-typeprint.c: Ditto.
* p-valprint.c, ppc-linux-nat.c, printcmd.c: Ditto.
* remote-mips.c, remote-vx.c, rs6000-nat.c: Ditto.
* rs6000-tdep.c, scm-exp.c, sh-tdep.c, sh64-tdep.c: Ditto.
* solib.c, somread.c, source.c, sparc-tdep.c: Ditto.
* stabsread.c, stack.c, standalone.c, symfile.c: Ditto.
* symmisc.c, symtab.c, top.c, tracepoint.c: Ditto.
* typeprint.c, utils.c, valarith.c, valops.c: Ditto.
* values.c, vax-tdep.c, xcoffread.c: Ditto.
2003-09-14 18:32:14 +02:00
|
|
|
|
char *p;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
char *p1;
|
|
|
|
|
char *nline;
|
|
|
|
|
char got_eof = 0;
|
|
|
|
|
|
|
|
|
|
int repeat = (instream == stdin);
|
|
|
|
|
|
|
|
|
|
if (annotation_level > 1 && instream == stdin)
|
|
|
|
|
{
|
2005-02-11 Andrew Cagney <cagney@gnu.org>
Mark up some of printf_filtered and printf_unfiltered.
* ada-lang.c, annotate.c, arch-utils.c, breakpoint.c: Update.
* corelow.c, cp-namespace.c, cp-support.c, dcache.c: Update.
* demangle.c, dsrec.c, dwarf2read.c, dwarfread.c: Update.
* event-loop.c, event-top.c, exec.c, f-valprint.c: Update.
* gdbtypes.c, inf-loop.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcmd.c, inflow.c, infrun.c, inftarg.c, language.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, maint.c: Update.
* mdebugread.c, memattr.c, monitor.c, objc-lang.c: Update.
* ocd.c, osabi.c, printcmd.c, procfs.c, regcache.c: Update.
* remote.c, solib-som.c, solib.c, somsolib.c, source.c: Update.
* stack.c, symfile.c, symmisc.c, target.c, thread.c: Update.
* top.c, utils.c, valprint.c, value.c, cli/cli-cmds.c: Update.
* cli/cli-dump.c, cli/cli-logging.c, tui/tui-hooks.c: Update.
* tui/tui-regs.c, tui/tui-win.c: Update.
2005-02-12 01:39:24 +01:00
|
|
|
|
printf_unfiltered (("\n\032\032post-"));
|
2003-08-04 David Carlton <carlton@kealia.com>
* charset.c (cached_iconv_convert): Add __FILE__ and __LINE__ args
to internal_error call.
* source.c (forward_search_command): Add "%s" format argument.
(reverse_search_command): Ditto.
* top.c (quit_confirm): Ditto.
* cli/cli-setshow.c (do_setshow_command): Ditto.
* cp-valprint.c (cp_print_class_method): Replace
{f,}printf_{un,}filtered by {f,}puts_{un,}filtered.
(cp_print_class_member): Ditto.
* event-top.c (command_line_handler): Ditto.
* linux-proc.c (linux_info_proc_cmd): Ditto.
* p-typeprint.c (pascal_type_print_base): Ditto.
* p-valprint.c (pascal_object_print_class_method): Ditto.
(pascal_object_print_class_member): Ditto.
* printcmd.c (print_scalar_formatted,printf_command): Ditto.
* remote.c (remote_cisco_section_offsets): Ditto.
* top.c (command_line_input): Ditto.
* utils.c (vwarning,error_stream,quit): Ditto.
* valprint.c (print_floating,print_binary_chars)
(print_octal_chars,print_decimal_chars,print_hex_chars): Ditto.
2003-08-04 David Carlton <carlton@kealia.com>
* mi-main.c (mi_error_last_message): Add "%s" second argument to
xasprintf call.
2003-08-04 David Carlton <carlton@kealia.com>
* generic/gdbtk.c (gdbtk_source_start_file): Add "%s" first
argument to error call.
(tk_command): Ditto.
(view_command): Ditto.
2003-08-04 19:08:24 +02:00
|
|
|
|
puts_unfiltered (async_annotation_suffix);
|
2005-02-11 Andrew Cagney <cagney@gnu.org>
Mark up some of printf_filtered and printf_unfiltered.
* ada-lang.c, annotate.c, arch-utils.c, breakpoint.c: Update.
* corelow.c, cp-namespace.c, cp-support.c, dcache.c: Update.
* demangle.c, dsrec.c, dwarf2read.c, dwarfread.c: Update.
* event-loop.c, event-top.c, exec.c, f-valprint.c: Update.
* gdbtypes.c, inf-loop.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcmd.c, inflow.c, infrun.c, inftarg.c, language.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, maint.c: Update.
* mdebugread.c, memattr.c, monitor.c, objc-lang.c: Update.
* ocd.c, osabi.c, printcmd.c, procfs.c, regcache.c: Update.
* remote.c, solib-som.c, solib.c, somsolib.c, source.c: Update.
* stack.c, symfile.c, symmisc.c, target.c, thread.c: Update.
* top.c, utils.c, valprint.c, value.c, cli/cli-cmds.c: Update.
* cli/cli-dump.c, cli/cli-logging.c, tui/tui-hooks.c: Update.
* tui/tui-regs.c, tui/tui-win.c: Update.
2005-02-12 01:39:24 +01:00
|
|
|
|
printf_unfiltered (("\n"));
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (linebuffer == 0)
|
|
|
|
|
{
|
|
|
|
|
linelength = 80;
|
|
|
|
|
linebuffer = (char *) xmalloc (linelength);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
p = linebuffer;
|
|
|
|
|
|
|
|
|
|
if (more_to_come)
|
|
|
|
|
{
|
|
|
|
|
strcpy (linebuffer, readline_input_state.linebuffer);
|
|
|
|
|
p = readline_input_state.linebuffer_ptr;
|
2000-12-15 02:01:51 +01:00
|
|
|
|
xfree (readline_input_state.linebuffer);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
more_to_come = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef STOP_SIGNAL
|
|
|
|
|
if (job_control)
|
1999-06-14 20:08:47 +02:00
|
|
|
|
signal (STOP_SIGNAL, handle_stop_sig);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/* Make sure that all output has been output. Some machines may let
|
2010-12-29 01:58:14 +01:00
|
|
|
|
you get away with leaving out some of the gdb_flush, but not
|
|
|
|
|
all. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
wrap_here ("");
|
|
|
|
|
gdb_flush (gdb_stdout);
|
|
|
|
|
gdb_flush (gdb_stderr);
|
|
|
|
|
|
|
|
|
|
if (source_file_name != NULL)
|
2005-01-17 17:17:36 +01:00
|
|
|
|
++source_line_number;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
/* If we are in this case, then command_handler will call quit
|
2010-12-29 01:58:14 +01:00
|
|
|
|
and exit from gdb. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
if (!rl || rl == (char *) EOF)
|
|
|
|
|
{
|
|
|
|
|
got_eof = 1;
|
|
|
|
|
command_handler (0);
|
2010-12-29 01:58:14 +01:00
|
|
|
|
return; /* Lint. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
if (strlen (rl) + 1 + (p - linebuffer) > linelength)
|
|
|
|
|
{
|
|
|
|
|
linelength = strlen (rl) + 1 + (p - linebuffer);
|
|
|
|
|
nline = (char *) xrealloc (linebuffer, linelength);
|
|
|
|
|
p += nline - linebuffer;
|
|
|
|
|
linebuffer = nline;
|
|
|
|
|
}
|
|
|
|
|
p1 = rl;
|
|
|
|
|
/* Copy line. Don't copy null at end. (Leaves line alone
|
2010-12-29 01:58:14 +01:00
|
|
|
|
if this was just a newline). */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
while (*p1)
|
|
|
|
|
*p++ = *p1++;
|
|
|
|
|
|
2000-12-15 02:01:51 +01:00
|
|
|
|
xfree (rl); /* Allocated in readline. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
2002-07-03 22:27:12 +02:00
|
|
|
|
if (p > linebuffer && *(p - 1) == '\\')
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2009-09-23 19:27:39 +02:00
|
|
|
|
*p = '\0';
|
1999-05-11 22:29:07 +02:00
|
|
|
|
p--; /* Put on top of '\'. */
|
|
|
|
|
|
gdb/
Replace the savestring calls by xstrdup calls where possible.
* breakpoint.c (condition_command, set_raw_breakpoint)
(create_catchpoint, update_breakpoint_locations): Replace the
savestring calls by xstrdup calls where possible.
* buildsym.c (start_subfile, patch_subfile_names, record_debugformat)
(record_producer): Likewise.
* coffread.c (coff_start_symtab, complete_symtab): Likewise.
* corefile.c (set_gnutarget): Likewise.
* dbxread.c (add_new_header_file): Likewise.
* demangle.c (set_demangling_command, set_demangling_style): Likewise.
* event-top.c (push_prompt, pop_prompt, command_line_handler)
(set_async_prompt): Likewise.
* infcmd.c (set_inferior_io_terminal, attach_command_post_wait):
Likewise.
* language.c (set_language_command, _initialize_language): Likewise.
* linespec.c (decode_line_2): Likewise.
* rs6000-nat.c (add_vmap): Likewise.
* top.c (set_prompt, init_history, init_main): Likewise.
* tracepoint.c (stringify_collection_list): Likewise.
* varobj.c (varobj_create): Remove variable expr_len. Replace the
savestring calls by xstrdup calls where possible.
(value_of_root, c_name_of_variable, c_describe_child): Replace the
savestring calls by xstrdup calls where possible.
* xcoffread.c (complete_symtab): Likewise.
* cli/cli-script.c (build_command_line, define_command): Likewise.
* cli/cli-setshow.c (do_setshow_command): Likewise.
2009-05-23 18:17:18 +02:00
|
|
|
|
readline_input_state.linebuffer = xstrdup (linebuffer);
|
2002-03-27 22:20:15 +01:00
|
|
|
|
readline_input_state.linebuffer_ptr = p;
|
|
|
|
|
|
|
|
|
|
/* We will not invoke a execute_command if there is more
|
2010-12-29 01:58:14 +01:00
|
|
|
|
input expected to complete the command. So, we need to
|
|
|
|
|
print an empty prompt here. */
|
2002-03-27 22:20:15 +01:00
|
|
|
|
more_to_come = 1;
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
display_gdb_prompt ("");
|
2002-03-27 22:20:15 +01:00
|
|
|
|
return;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef STOP_SIGNAL
|
|
|
|
|
if (job_control)
|
|
|
|
|
signal (STOP_SIGNAL, SIG_DFL);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#define SERVER_COMMAND_LENGTH 7
|
|
|
|
|
server_command =
|
|
|
|
|
(p - linebuffer > SERVER_COMMAND_LENGTH)
|
2003-11-06 23:54:02 +01:00
|
|
|
|
&& strncmp (linebuffer, "server ", SERVER_COMMAND_LENGTH) == 0;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
if (server_command)
|
|
|
|
|
{
|
|
|
|
|
/* Note that we don't set `line'. Between this and the check in
|
|
|
|
|
dont_repeat, this insures that repeating will still do the
|
|
|
|
|
right thing. */
|
|
|
|
|
*p = '\0';
|
|
|
|
|
command_handler (linebuffer + SERVER_COMMAND_LENGTH);
|
|
|
|
|
display_gdb_prompt (0);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Do history expansion if that is wished. */
|
|
|
|
|
if (history_expansion_p && instream == stdin
|
|
|
|
|
&& ISATTY (instream))
|
|
|
|
|
{
|
|
|
|
|
char *history_value;
|
|
|
|
|
int expanded;
|
|
|
|
|
|
|
|
|
|
*p = '\0'; /* Insert null now. */
|
|
|
|
|
expanded = history_expand (linebuffer, &history_value);
|
|
|
|
|
if (expanded)
|
|
|
|
|
{
|
|
|
|
|
/* Print the changes. */
|
|
|
|
|
printf_unfiltered ("%s\n", history_value);
|
|
|
|
|
|
|
|
|
|
/* If there was an error, call this function again. */
|
|
|
|
|
if (expanded < 0)
|
|
|
|
|
{
|
2000-12-15 02:01:51 +01:00
|
|
|
|
xfree (history_value);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (strlen (history_value) > linelength)
|
|
|
|
|
{
|
|
|
|
|
linelength = strlen (history_value) + 1;
|
|
|
|
|
linebuffer = (char *) xrealloc (linebuffer, linelength);
|
|
|
|
|
}
|
|
|
|
|
strcpy (linebuffer, history_value);
|
|
|
|
|
p = linebuffer + strlen (linebuffer);
|
|
|
|
|
}
|
2007-08-14 01:02:08 +02:00
|
|
|
|
xfree (history_value);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* If we just got an empty line, and that is supposed to repeat the
|
|
|
|
|
previous command, return the value in the global buffer. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
if (repeat && p == linebuffer && *p != '\\')
|
|
|
|
|
{
|
2011-06-13 12:55:27 +02:00
|
|
|
|
command_handler (saved_command_line);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
display_gdb_prompt (0);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (p1 = linebuffer; *p1 == ' ' || *p1 == '\t'; p1++);
|
|
|
|
|
if (repeat && !*p1)
|
|
|
|
|
{
|
2011-06-13 12:55:27 +02:00
|
|
|
|
command_handler (saved_command_line);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
display_gdb_prompt (0);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
*p = 0;
|
|
|
|
|
|
|
|
|
|
/* Add line to history if appropriate. */
|
|
|
|
|
if (instream == stdin
|
|
|
|
|
&& ISATTY (stdin) && *linebuffer)
|
|
|
|
|
add_history (linebuffer);
|
|
|
|
|
|
|
|
|
|
/* Note: lines consisting solely of comments are added to the command
|
|
|
|
|
history. This is useful when you type a command, and then
|
|
|
|
|
realize you don't want to execute it quite yet. You can comment
|
|
|
|
|
out the command and then later fetch it from the value history
|
|
|
|
|
and remove the '#'. The kill ring is probably better, but some
|
|
|
|
|
people are in the habit of commenting things out. */
|
|
|
|
|
if (*p1 == '#')
|
2010-12-29 01:58:14 +01:00
|
|
|
|
*p1 = '\0'; /* Found a comment. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
/* Save into global buffer if appropriate. */
|
|
|
|
|
if (repeat)
|
|
|
|
|
{
|
2011-06-13 12:55:27 +02:00
|
|
|
|
if (linelength > saved_command_line_size)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2011-06-13 12:55:27 +02:00
|
|
|
|
saved_command_line = xrealloc (saved_command_line, linelength);
|
|
|
|
|
saved_command_line_size = linelength;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
2011-06-13 12:55:27 +02:00
|
|
|
|
strcpy (saved_command_line, linebuffer);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
if (!more_to_come)
|
|
|
|
|
{
|
2011-06-13 12:55:27 +02:00
|
|
|
|
command_handler (saved_command_line);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
display_gdb_prompt (0);
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
command_handler (linebuffer);
|
|
|
|
|
display_gdb_prompt (0);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Does reading of input from terminal w/o the editing features
|
2010-12-29 01:58:14 +01:00
|
|
|
|
provided by the readline library. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* NOTE: 1999-04-30 Asynchronous version of gdb_readline; gdb_readline
|
1999-05-11 22:29:07 +02:00
|
|
|
|
will become obsolete when the event loop is made the default
|
2010-12-29 01:58:14 +01:00
|
|
|
|
execution for gdb. */
|
1999-06-28 18:06:02 +02:00
|
|
|
|
void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
gdb_readline2 (gdb_client_data client_data)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
|
|
|
|
int c;
|
|
|
|
|
char *result;
|
|
|
|
|
int input_index = 0;
|
|
|
|
|
int result_size = 80;
|
1999-08-16 21:57:19 +02:00
|
|
|
|
static int done_once = 0;
|
|
|
|
|
|
|
|
|
|
/* Unbuffer the input stream, so that, later on, the calls to fgetc
|
2010-12-29 01:58:14 +01:00
|
|
|
|
fetch only one char at the time from the stream. The fgetc's will
|
1999-08-16 21:57:19 +02:00
|
|
|
|
get up to the first newline, but there may be more chars in the
|
2010-12-29 01:58:14 +01:00
|
|
|
|
stream after '\n'. If we buffer the input and fgetc drains the
|
1999-08-16 21:57:19 +02:00
|
|
|
|
stream, getting stuff beyond the newline as well, a select, done
|
2010-12-29 01:58:14 +01:00
|
|
|
|
afterwards will not trigger. */
|
1999-08-16 21:57:19 +02:00
|
|
|
|
if (!done_once && !ISATTY (instream))
|
|
|
|
|
{
|
|
|
|
|
setbuf (instream, NULL);
|
|
|
|
|
done_once = 1;
|
|
|
|
|
}
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
result = (char *) xmalloc (result_size);
|
|
|
|
|
|
|
|
|
|
/* We still need the while loop here, even though it would seem
|
|
|
|
|
obvious to invoke gdb_readline2 at every character entered. If
|
|
|
|
|
not using the readline library, the terminal is in cooked mode,
|
2010-12-29 01:58:14 +01:00
|
|
|
|
which sends the characters all at once. Poll will notice that the
|
|
|
|
|
input fd has changed state only after enter is pressed. At this
|
|
|
|
|
point we still need to fetch all the chars entered. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
while (1)
|
|
|
|
|
{
|
|
|
|
|
/* Read from stdin if we are executing a user defined command.
|
|
|
|
|
This is the right thing for prompt_for_continue, at least. */
|
|
|
|
|
c = fgetc (instream ? instream : stdin);
|
|
|
|
|
|
|
|
|
|
if (c == EOF)
|
|
|
|
|
{
|
|
|
|
|
if (input_index > 0)
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* The last line does not end with a newline. Return it,
|
|
|
|
|
and if we are called again fgetc will still return EOF
|
|
|
|
|
and we'll return NULL then. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
break;
|
2000-12-15 02:01:51 +01:00
|
|
|
|
xfree (result);
|
1999-06-14 20:08:47 +02:00
|
|
|
|
(*input_handler) (0);
|
2007-08-30 00:04:15 +02:00
|
|
|
|
return;
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (c == '\n')
|
|
|
|
|
{
|
|
|
|
|
if (input_index > 0 && result[input_index - 1] == '\r')
|
|
|
|
|
input_index--;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result[input_index++] = c;
|
|
|
|
|
while (input_index >= result_size)
|
|
|
|
|
{
|
|
|
|
|
result_size *= 2;
|
|
|
|
|
result = (char *) xrealloc (result, result_size);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result[input_index++] = '\0';
|
1999-06-14 20:08:47 +02:00
|
|
|
|
(*input_handler) (result);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Initialization of signal handlers and tokens. There is a function
|
2010-12-29 01:58:14 +01:00
|
|
|
|
handle_sig* for each of the signals GDB cares about. Specifically:
|
1999-05-11 22:29:07 +02:00
|
|
|
|
SIGINT, SIGFPE, SIGQUIT, SIGTSTP, SIGHUP, SIGWINCH. These
|
|
|
|
|
functions are the actual signal handlers associated to the signals
|
|
|
|
|
via calls to signal(). The only job for these functions is to
|
|
|
|
|
enqueue the appropriate event/procedure with the event loop. Such
|
2010-12-29 01:58:14 +01:00
|
|
|
|
procedures are the old signal handlers. The event loop will take
|
1999-05-11 22:29:07 +02:00
|
|
|
|
care of invoking the queued procedures to perform the usual tasks
|
2010-12-29 01:58:14 +01:00
|
|
|
|
associated with the reception of the signal. */
|
1999-05-25 20:09:09 +02:00
|
|
|
|
/* NOTE: 1999-04-30 This is the asynchronous version of init_signals.
|
1999-05-11 22:29:07 +02:00
|
|
|
|
init_signals will become obsolete as we move to have to event loop
|
2010-12-29 01:58:14 +01:00
|
|
|
|
as the default for gdb. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
async_init_signals (void)
|
1999-07-07 22:19:36 +02:00
|
|
|
|
{
|
1999-05-11 22:29:07 +02:00
|
|
|
|
signal (SIGINT, handle_sigint);
|
|
|
|
|
sigint_token =
|
1999-06-14 20:08:47 +02:00
|
|
|
|
create_async_signal_handler (async_request_quit, NULL);
|
2005-11-25 19:33:12 +01:00
|
|
|
|
signal (SIGTERM, handle_sigterm);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
/* If SIGTRAP was set to SIG_IGN, then the SIG_IGN will get passed
|
|
|
|
|
to the inferior and breakpoints will be ignored. */
|
|
|
|
|
#ifdef SIGTRAP
|
|
|
|
|
signal (SIGTRAP, SIG_DFL);
|
|
|
|
|
#endif
|
|
|
|
|
|
2005-03-16 18:05:31 +01:00
|
|
|
|
#ifdef SIGQUIT
|
1999-05-11 22:29:07 +02:00
|
|
|
|
/* If we initialize SIGQUIT to SIG_IGN, then the SIG_IGN will get
|
|
|
|
|
passed to the inferior, which we don't want. It would be
|
|
|
|
|
possible to do a "signal (SIGQUIT, SIG_DFL)" after we fork, but
|
|
|
|
|
on BSD4.3 systems using vfork, that can affect the
|
|
|
|
|
GDB process as well as the inferior (the signal handling tables
|
|
|
|
|
might be in memory, shared between the two). Since we establish
|
|
|
|
|
a handler for SIGQUIT, when we call exec it will set the signal
|
|
|
|
|
to SIG_DFL for us. */
|
|
|
|
|
signal (SIGQUIT, handle_sigquit);
|
|
|
|
|
sigquit_token =
|
1999-06-14 20:08:47 +02:00
|
|
|
|
create_async_signal_handler (async_do_nothing, NULL);
|
2005-03-16 18:05:31 +01:00
|
|
|
|
#endif
|
1999-05-11 22:29:07 +02:00
|
|
|
|
#ifdef SIGHUP
|
|
|
|
|
if (signal (SIGHUP, handle_sighup) != SIG_IGN)
|
|
|
|
|
sighup_token =
|
1999-06-14 20:08:47 +02:00
|
|
|
|
create_async_signal_handler (async_disconnect, NULL);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
else
|
|
|
|
|
sighup_token =
|
1999-06-14 20:08:47 +02:00
|
|
|
|
create_async_signal_handler (async_do_nothing, NULL);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
#endif
|
|
|
|
|
signal (SIGFPE, handle_sigfpe);
|
|
|
|
|
sigfpe_token =
|
1999-06-14 20:08:47 +02:00
|
|
|
|
create_async_signal_handler (async_float_handler, NULL);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
1999-06-14 20:08:47 +02:00
|
|
|
|
#ifdef STOP_SIGNAL
|
|
|
|
|
sigtstp_token =
|
|
|
|
|
create_async_signal_handler (async_stop_sig, NULL);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Tell the event loop what to do if SIGINT is received.
|
|
|
|
|
See event-signal.c. */
|
1999-07-07 22:19:36 +02:00
|
|
|
|
void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
handle_sigint (int sig)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
|
|
|
|
signal (sig, handle_sigint);
|
|
|
|
|
|
2007-02-08 17:25:25 +01:00
|
|
|
|
/* We could be running in a loop reading in symfiles or something so
|
|
|
|
|
it may be quite a while before we get back to the event loop. So
|
2010-12-29 01:58:14 +01:00
|
|
|
|
set quit_flag to 1 here. Then if QUIT is called before we get to
|
2007-02-08 17:25:25 +01:00
|
|
|
|
the event loop, we will unwind as expected. */
|
|
|
|
|
|
2012-08-22 19:48:55 +02:00
|
|
|
|
set_quit_flag ();
|
2007-02-08 17:25:25 +01:00
|
|
|
|
|
1999-05-11 22:29:07 +02:00
|
|
|
|
/* If immediate_quit is set, we go ahead and process the SIGINT right
|
2010-12-29 01:58:14 +01:00
|
|
|
|
away, even if we usually would defer this to the event loop. The
|
1999-05-11 22:29:07 +02:00
|
|
|
|
assumption here is that it is safe to process ^C immediately if
|
2010-12-29 01:58:14 +01:00
|
|
|
|
immediate_quit is set. If we didn't, SIGINT would be really
|
1999-05-11 22:29:07 +02:00
|
|
|
|
processed only the next time through the event loop. To get to
|
|
|
|
|
that point, though, the command that we want to interrupt needs to
|
2008-03-05 18:21:10 +01:00
|
|
|
|
finish first, which is unacceptable. If immediate quit is not set,
|
2010-12-29 01:58:14 +01:00
|
|
|
|
we process SIGINT the next time through the loop, which is fine. */
|
2008-03-05 18:21:10 +01:00
|
|
|
|
gdb_call_async_signal_handler (sigint_token, immediate_quit);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
|
2005-11-25 19:33:12 +01:00
|
|
|
|
/* Quit GDB if SIGTERM is received.
|
|
|
|
|
GDB would quit anyway, but this way it will clean up properly. */
|
|
|
|
|
void
|
|
|
|
|
handle_sigterm (int sig)
|
|
|
|
|
{
|
|
|
|
|
signal (sig, handle_sigterm);
|
|
|
|
|
quit_force ((char *) 0, stdin == instream);
|
|
|
|
|
}
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Do the quit. All the checks have been done by the caller. */
|
1999-07-07 22:19:36 +02:00
|
|
|
|
void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
async_request_quit (gdb_client_data arg)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2007-02-08 17:25:25 +01:00
|
|
|
|
/* If the quit_flag has gotten reset back to 0 by the time we get
|
2007-02-10 00:45:35 +01:00
|
|
|
|
back here, that means that an exception was thrown to unwind the
|
|
|
|
|
current command before we got back to the event loop. So there
|
2012-08-22 19:48:55 +02:00
|
|
|
|
is no reason to call quit again here. */
|
2007-02-08 17:25:25 +01:00
|
|
|
|
|
2012-08-22 19:48:55 +02:00
|
|
|
|
if (check_quit_flag ())
|
2007-02-10 00:45:35 +01:00
|
|
|
|
quit ();
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
|
2005-03-16 18:05:31 +01:00
|
|
|
|
#ifdef SIGQUIT
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Tell the event loop what to do if SIGQUIT is received.
|
|
|
|
|
See event-signal.c. */
|
1999-07-07 22:19:36 +02:00
|
|
|
|
static void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
handle_sigquit (int sig)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2012-10-23 08:20:49 +02:00
|
|
|
|
mark_async_signal_handler (sigquit_token);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
signal (sig, handle_sigquit);
|
|
|
|
|
}
|
2005-03-16 18:05:31 +01:00
|
|
|
|
#endif
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
2006-02-23 19:37:42 +01:00
|
|
|
|
#if defined (SIGQUIT) || defined (SIGHUP)
|
|
|
|
|
/* Called by the event loop in response to a SIGQUIT or an
|
|
|
|
|
ignored SIGHUP. */
|
1999-07-07 22:19:36 +02:00
|
|
|
|
static void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
async_do_nothing (gdb_client_data arg)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Empty function body. */
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
2006-02-23 19:37:42 +01:00
|
|
|
|
#endif
|
1999-05-11 22:29:07 +02:00
|
|
|
|
|
|
|
|
|
#ifdef SIGHUP
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Tell the event loop what to do if SIGHUP is received.
|
|
|
|
|
See event-signal.c. */
|
1999-07-07 22:19:36 +02:00
|
|
|
|
static void
|
2000-07-30 03:48:28 +02:00
|
|
|
|
handle_sighup (int sig)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2012-10-23 08:20:49 +02:00
|
|
|
|
mark_async_signal_handler (sighup_token);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
signal (sig, handle_sighup);
|
|
|
|
|
}
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Called by the event loop to process a SIGHUP. */
|
1999-07-07 22:19:36 +02:00
|
|
|
|
static void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
async_disconnect (gdb_client_data arg)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2011-09-21 17:21:28 +02:00
|
|
|
|
volatile struct gdb_exception exception;
|
|
|
|
|
|
|
|
|
|
TRY_CATCH (exception, RETURN_MASK_ALL)
|
|
|
|
|
{
|
|
|
|
|
quit_cover ();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (exception.reason < 0)
|
|
|
|
|
{
|
|
|
|
|
fputs_filtered ("Could not kill the program being debugged",
|
|
|
|
|
gdb_stderr);
|
|
|
|
|
exception_print (gdb_stderr, exception);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TRY_CATCH (exception, RETURN_MASK_ALL)
|
|
|
|
|
{
|
|
|
|
|
pop_all_targets (1);
|
|
|
|
|
}
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
signal (SIGHUP, SIG_DFL); /*FIXME: ??????????? */
|
2009-01-09 12:00:00 +01:00
|
|
|
|
raise (SIGHUP);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
1999-06-14 20:08:47 +02:00
|
|
|
|
#ifdef STOP_SIGNAL
|
1999-07-07 22:19:36 +02:00
|
|
|
|
void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
handle_stop_sig (int sig)
|
1999-06-14 20:08:47 +02:00
|
|
|
|
{
|
2012-10-23 08:20:49 +02:00
|
|
|
|
mark_async_signal_handler (sigtstp_token);
|
1999-07-07 22:19:36 +02:00
|
|
|
|
signal (sig, handle_stop_sig);
|
1999-06-14 20:08:47 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
async_stop_sig (gdb_client_data arg)
|
1999-06-14 20:08:47 +02:00
|
|
|
|
{
|
2011-09-06 Pedro Alves <pedro@codesourcery.com>
* event-top.h (MAXPROMPTS, struct prompts): Delete.
(set_async_annotation_level, set_async_prompt, pop_prompt)
(push_prompt, new_async_prompt): Delete declarations.
* top.h (get_prompt, set_prompt): Change prototype.
(get_prefix, set_prefix, get_suffix, set_suffix): Delete
declarations.
* top.c (command_loop):
(top_prompt): New global.
(get_prefix, set_prefix, get_suffix, ): Delete.
(get_prompt, set_prompt): Rewrite.
(show_new_async_prompt): Rename to ...
(show_prompt): ... this.
(init_main): Adjust. Don't handle --annotate=2 here.
* event-top.c (new_async_prompt): Delete.
(the_prompts): Delete.
(more_to_come): Make static.
(display_gdb_prompt): Use top_level_prompt() to compute the top
level prompt, and don't notify the before_prompt observers
directly here. Always trick readline into not trying to display
the prompt if sync_execution and displaying the primary prompt.
If displaying a local/secondary prompt, always show it, even if
sync_execution is set.
(change_annotation_level): Delete.
(top_level_prompt): New, based on change_annotation_level.
(push_prompt, pop_prompt): Delete.
(async_disable_stdin): No longer pushes prompt.
(command_line_handler): No longer pushes or pops prompt. If more
input is expected, call display_gdb_prompt with an explicit empty
prompt.
(async_stop_sig): Adjust.
(set_async_annotation_level, set_async_prompt): Delete.
* python/python.c (before_prompt_hook): Adjust.
2011-09-06 16:49:00 +02:00
|
|
|
|
char *prompt = get_prompt ();
|
2010-05-14 20:35:11 +02:00
|
|
|
|
|
1999-06-14 20:08:47 +02:00
|
|
|
|
#if STOP_SIGNAL == SIGTSTP
|
|
|
|
|
signal (SIGTSTP, SIG_DFL);
|
1999-10-06 01:13:56 +02:00
|
|
|
|
#if HAVE_SIGPROCMASK
|
|
|
|
|
{
|
|
|
|
|
sigset_t zero;
|
2001-08-28 00:39:56 +02:00
|
|
|
|
|
1999-10-06 01:13:56 +02:00
|
|
|
|
sigemptyset (&zero);
|
|
|
|
|
sigprocmask (SIG_SETMASK, &zero, 0);
|
|
|
|
|
}
|
2001-08-28 00:39:56 +02:00
|
|
|
|
#elif HAVE_SIGSETMASK
|
1999-06-14 20:08:47 +02:00
|
|
|
|
sigsetmask (0);
|
1999-10-06 01:13:56 +02:00
|
|
|
|
#endif
|
2009-01-09 12:00:00 +01:00
|
|
|
|
raise (SIGTSTP);
|
1999-06-14 20:08:47 +02:00
|
|
|
|
signal (SIGTSTP, handle_stop_sig);
|
|
|
|
|
#else
|
|
|
|
|
signal (STOP_SIGNAL, handle_stop_sig);
|
|
|
|
|
#endif
|
|
|
|
|
printf_unfiltered ("%s", prompt);
|
|
|
|
|
gdb_flush (gdb_stdout);
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Forget about any previous command -- null line now will do
|
|
|
|
|
nothing. */
|
1999-06-14 20:08:47 +02:00
|
|
|
|
dont_repeat ();
|
|
|
|
|
}
|
|
|
|
|
#endif /* STOP_SIGNAL */
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Tell the event loop what to do if SIGFPE is received.
|
|
|
|
|
See event-signal.c. */
|
1999-07-07 22:19:36 +02:00
|
|
|
|
static void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
handle_sigfpe (int sig)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2012-10-23 08:20:49 +02:00
|
|
|
|
mark_async_signal_handler (sigfpe_token);
|
1999-05-11 22:29:07 +02:00
|
|
|
|
signal (sig, handle_sigfpe);
|
|
|
|
|
}
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Event loop will call this functin to process a SIGFPE. */
|
1999-07-07 22:19:36 +02:00
|
|
|
|
static void
|
1999-09-22 05:28:34 +02:00
|
|
|
|
async_float_handler (gdb_client_data arg)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* This message is based on ANSI C, section 4.7. Note that integer
|
|
|
|
|
divide by zero causes this, so "float" is a misnomer. */
|
2005-02-10 Andrew Cagney <cagney@gnu.org>
Mark up all error and warning messages.
* ada-lang.c, amd64-tdep.c, arch-utils.c, breakpoint.c: Update.
* bsd-kvm.c, bsd-uthread.c, coff-solib.h, coffread.c: Update.
* core-aout.c, core-regset.c, corefile.c, corelow.c: Update.
* cp-abi.c, cp-support.c, cp-valprint.c, cris-tdep.c: Update.
* dbxread.c, demangle.c, doublest.c, dsrec.c: Update.
* dve3900-rom.c, dwarf2expr.c, dwarf2loc.c: Update.
* dwarf2read.c, dwarfread.c, elfread.c, eval.c: Update.
* event-top.c, exec.c, expprint.c, f-lang.c: Update.
* f-typeprint.c, f-valprint.c, fbsd-nat.c, findvar.c: Update.
* frame.c, frv-linux-tdep.c, gcore.c, gdbtypes.c: Update.
* gnu-nat.c, gnu-v2-abi.c, gnu-v3-abi.c, go32-nat.c: Update.
* hpacc-abi.c, hppa-hpux-nat.c, hppa-hpux-tdep.c: Update.
* hppa-linux-nat.c, hppa-linux-tdep.c, hppa-tdep.c: Update.
* hpread.c, hpux-thread.c, i386-linux-nat.c: Update.
* i386-linux-tdep.c, i386-tdep.c, i386bsd-nat.c: Update.
* i386gnu-nat.c, i387-tdep.c, ia64-linux-nat.c: Update.
* ia64-tdep.c, inf-child.c, inf-ptrace.c, inf-ttrace.c: Update.
* infcall.c, infcmd.c, inflow.c, infptrace.c, infrun.c: Update.
* inftarg.c, interps.c, irix5-nat.c, jv-lang.c: Update.
* kod-cisco.c, kod.c, language.c, libunwind-frame.c: Update.
* linespec.c, linux-nat.c, linux-thread-db.c, m2-lang.c: Update.
* m32r-rom.c, m68hc11-tdep.c, m68k-tdep.c: Update.
* m68klinux-nat.c, macrocmd.c, macroexp.c, main.c: Update.
* maint.c, mdebugread.c, mem-break.c, memattr.c: Update.
* mips-linux-tdep.c, mips-tdep.c, mipsread.c, monitor.c: Update.
* nlmread.c, nto-procfs.c, objc-lang.c, objfiles.c: Update.
* observer.c, ocd.c, p-lang.c, p-typeprint.c: Update.
* p-valprint.c, pa64solib.c, parse.c, ppc-linux-tdep.c: Update.
* ppcnbsd-tdep.c, printcmd.c, procfs.c, remote-e7000.c: Update.
* remote-fileio.c, remote-m32r-sdi.c, remote-rdi.c: Update.
* remote-rdp.c, remote-sim.c, remote-st.c: Update.
* remote-utils.c, remote-utils.h, remote.c: Update.
* rom68k-rom.c, rs6000-nat.c, s390-tdep.c, scm-lang.c: Update.
* ser-e7kpc.c, ser-tcp.c, ser-unix.c, sh-tdep.c: Update.
* sh3-rom.c, shnbsd-tdep.c, sol-thread.c, solib-aix5.c: Update.
* solib-frv.c, solib-irix.c, solib-osf.c, solib-pa64.c: Update.
* solib-som.c, solib-sunos.c, solib-svr4.c, solib.c: Update.
* somread.c, somsolib.c, source.c, stabsread.c: Update.
* stack.c, std-regs.c, symfile-mem.c, symfile.c: Update.
* symmisc.c, symtab.c, target.c, thread.c, top.c: Update.
* tracepoint.c, trad-frame.c, typeprint.c, utils.c: Update.
* uw-thread.c, valarith.c, valops.c, valprint.c: Update.
* value.c, varobj.c, version.in, win32-nat.c, wince.c: Update.
* xcoffread.c, xcoffsolib.c, cli/cli-cmds.c: Update.
* cli/cli-decode.c, cli/cli-dump.c, cli/cli-logging.c: Update.
* cli/cli-script.c, cli/cli-setshow.c, mi/mi-cmd-break.c: Update.
* mi/mi-cmd-disas.c, mi/mi-cmd-env.c, mi/mi-cmd-file.c: Update.
* mi/mi-cmd-stack.c, mi/mi-cmd-var.c, mi/mi-getopt.c: Update.
* mi/mi-symbol-cmds.c, tui/tui-layout.c, tui/tui-stack.c: Update.
* tui/tui-win.c: Update.
2005-02-11 05:06:14 +01:00
|
|
|
|
error (_("Erroneous arithmetic operation."));
|
1999-05-11 22:29:07 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Called by do_setshow_command. */
|
|
|
|
|
void
|
2010-12-29 01:58:14 +01:00
|
|
|
|
set_async_editing_command (char *args, int from_tty,
|
|
|
|
|
struct cmd_list_element *c)
|
1999-05-11 22:29:07 +02:00
|
|
|
|
{
|
|
|
|
|
change_line_handler ();
|
|
|
|
|
}
|
|
|
|
|
|
1999-06-14 20:08:47 +02:00
|
|
|
|
/* Set things up for readline to be invoked via the alternate
|
|
|
|
|
interface, i.e. via a callback function (rl_callback_read_char),
|
2010-12-29 01:58:14 +01:00
|
|
|
|
and hook up instream to the event loop. */
|
1999-06-14 20:08:47 +02:00
|
|
|
|
void
|
2002-10-03 03:23:50 +02:00
|
|
|
|
gdb_setup_readline (void)
|
1999-06-14 20:08:47 +02:00
|
|
|
|
{
|
2004-09-13 Andrew Cagney <cagney@gnu.org>
Eliminate event_loop_p, always has the value 1.
* defs.h (event_loop_p): Delete macro.
* breakpoint.c (until_break_command): Simplify.
* utils.c (prompt_for_continue): Simplify.
* tracepoint.c (read_actions): Simplify.
* top.c (throw_exception, execute_command, gdb_readline_wrapper)
(gdb_rl_operate_and_get_next, command_line_input, get_prompt)
(set_prompt, init_main): Simplify.
(init_signals, disconnect): Delete, unused.
* remote.c (remote_async_resume)
(extended_remote_async_create_inferior): Simplify.
* mi/mi-interp.c (mi_input): Delete, unused.
(mi_interpreter_resume, mi_command_loop): Simplify.
* interps.c (current_interp_command_loop): Simplify.
* infrun.c (proceed): Simplify.
* infcmd.c (run_command, continue_command, step_1, jump_command)
(until_command, advance_command, finish_command)
(interrupt_target_command): Simplify.
* event-top.c (gdb_setup_readline, gdb_disable_readline): Simplify.
2004-09-13 20:26:31 +02:00
|
|
|
|
/* This function is a noop for the sync case. The assumption is
|
|
|
|
|
that the sync setup is ALL done in gdb_init, and we would only
|
|
|
|
|
mess it up here. The sync stuff should really go away over
|
|
|
|
|
time. */
|
2005-11-01 12:09:18 +01:00
|
|
|
|
if (!batch_silent)
|
|
|
|
|
gdb_stdout = stdio_fileopen (stdout);
|
2004-09-13 Andrew Cagney <cagney@gnu.org>
Eliminate event_loop_p, always has the value 1.
* defs.h (event_loop_p): Delete macro.
* breakpoint.c (until_break_command): Simplify.
* utils.c (prompt_for_continue): Simplify.
* tracepoint.c (read_actions): Simplify.
* top.c (throw_exception, execute_command, gdb_readline_wrapper)
(gdb_rl_operate_and_get_next, command_line_input, get_prompt)
(set_prompt, init_main): Simplify.
(init_signals, disconnect): Delete, unused.
* remote.c (remote_async_resume)
(extended_remote_async_create_inferior): Simplify.
* mi/mi-interp.c (mi_input): Delete, unused.
(mi_interpreter_resume, mi_command_loop): Simplify.
* interps.c (current_interp_command_loop): Simplify.
* infrun.c (proceed): Simplify.
* infcmd.c (run_command, continue_command, step_1, jump_command)
(until_command, advance_command, finish_command)
(interrupt_target_command): Simplify.
* event-top.c (gdb_setup_readline, gdb_disable_readline): Simplify.
2004-09-13 20:26:31 +02:00
|
|
|
|
gdb_stderr = stdio_fileopen (stderr);
|
|
|
|
|
gdb_stdlog = gdb_stderr; /* for moment */
|
|
|
|
|
gdb_stdtarg = gdb_stderr; /* for moment */
|
2010-09-11 18:00:27 +02:00
|
|
|
|
gdb_stdtargerr = gdb_stderr; /* for moment */
|
2004-09-13 Andrew Cagney <cagney@gnu.org>
Eliminate event_loop_p, always has the value 1.
* defs.h (event_loop_p): Delete macro.
* breakpoint.c (until_break_command): Simplify.
* utils.c (prompt_for_continue): Simplify.
* tracepoint.c (read_actions): Simplify.
* top.c (throw_exception, execute_command, gdb_readline_wrapper)
(gdb_rl_operate_and_get_next, command_line_input, get_prompt)
(set_prompt, init_main): Simplify.
(init_signals, disconnect): Delete, unused.
* remote.c (remote_async_resume)
(extended_remote_async_create_inferior): Simplify.
* mi/mi-interp.c (mi_input): Delete, unused.
(mi_interpreter_resume, mi_command_loop): Simplify.
* interps.c (current_interp_command_loop): Simplify.
* infrun.c (proceed): Simplify.
* infcmd.c (run_command, continue_command, step_1, jump_command)
(until_command, advance_command, finish_command)
(interrupt_target_command): Simplify.
* event-top.c (gdb_setup_readline, gdb_disable_readline): Simplify.
2004-09-13 20:26:31 +02:00
|
|
|
|
|
|
|
|
|
/* If the input stream is connected to a terminal, turn on
|
|
|
|
|
editing. */
|
|
|
|
|
if (ISATTY (instream))
|
1999-06-21 15:27:42 +02:00
|
|
|
|
{
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Tell gdb that we will be using the readline library. This
|
2004-09-13 Andrew Cagney <cagney@gnu.org>
Eliminate event_loop_p, always has the value 1.
* defs.h (event_loop_p): Delete macro.
* breakpoint.c (until_break_command): Simplify.
* utils.c (prompt_for_continue): Simplify.
* tracepoint.c (read_actions): Simplify.
* top.c (throw_exception, execute_command, gdb_readline_wrapper)
(gdb_rl_operate_and_get_next, command_line_input, get_prompt)
(set_prompt, init_main): Simplify.
(init_signals, disconnect): Delete, unused.
* remote.c (remote_async_resume)
(extended_remote_async_create_inferior): Simplify.
* mi/mi-interp.c (mi_input): Delete, unused.
(mi_interpreter_resume, mi_command_loop): Simplify.
* interps.c (current_interp_command_loop): Simplify.
* infrun.c (proceed): Simplify.
* infcmd.c (run_command, continue_command, step_1, jump_command)
(until_command, advance_command, finish_command)
(interrupt_target_command): Simplify.
* event-top.c (gdb_setup_readline, gdb_disable_readline): Simplify.
2004-09-13 20:26:31 +02:00
|
|
|
|
could be overwritten by a command in .gdbinit like 'set
|
|
|
|
|
editing on' or 'off'. */
|
|
|
|
|
async_command_editing_p = 1;
|
2000-03-19 13:30:38 +01:00
|
|
|
|
|
2004-09-13 Andrew Cagney <cagney@gnu.org>
Eliminate event_loop_p, always has the value 1.
* defs.h (event_loop_p): Delete macro.
* breakpoint.c (until_break_command): Simplify.
* utils.c (prompt_for_continue): Simplify.
* tracepoint.c (read_actions): Simplify.
* top.c (throw_exception, execute_command, gdb_readline_wrapper)
(gdb_rl_operate_and_get_next, command_line_input, get_prompt)
(set_prompt, init_main): Simplify.
(init_signals, disconnect): Delete, unused.
* remote.c (remote_async_resume)
(extended_remote_async_create_inferior): Simplify.
* mi/mi-interp.c (mi_input): Delete, unused.
(mi_interpreter_resume, mi_command_loop): Simplify.
* interps.c (current_interp_command_loop): Simplify.
* infrun.c (proceed): Simplify.
* infcmd.c (run_command, continue_command, step_1, jump_command)
(until_command, advance_command, finish_command)
(interrupt_target_command): Simplify.
* event-top.c (gdb_setup_readline, gdb_disable_readline): Simplify.
2004-09-13 20:26:31 +02:00
|
|
|
|
/* When a character is detected on instream by select or poll,
|
|
|
|
|
readline will be invoked via this callback function. */
|
|
|
|
|
call_readline = rl_callback_read_char_wrapper;
|
1999-06-21 15:27:42 +02:00
|
|
|
|
}
|
2004-09-13 Andrew Cagney <cagney@gnu.org>
Eliminate event_loop_p, always has the value 1.
* defs.h (event_loop_p): Delete macro.
* breakpoint.c (until_break_command): Simplify.
* utils.c (prompt_for_continue): Simplify.
* tracepoint.c (read_actions): Simplify.
* top.c (throw_exception, execute_command, gdb_readline_wrapper)
(gdb_rl_operate_and_get_next, command_line_input, get_prompt)
(set_prompt, init_main): Simplify.
(init_signals, disconnect): Delete, unused.
* remote.c (remote_async_resume)
(extended_remote_async_create_inferior): Simplify.
* mi/mi-interp.c (mi_input): Delete, unused.
(mi_interpreter_resume, mi_command_loop): Simplify.
* interps.c (current_interp_command_loop): Simplify.
* infrun.c (proceed): Simplify.
* infcmd.c (run_command, continue_command, step_1, jump_command)
(until_command, advance_command, finish_command)
(interrupt_target_command): Simplify.
* event-top.c (gdb_setup_readline, gdb_disable_readline): Simplify.
2004-09-13 20:26:31 +02:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
async_command_editing_p = 0;
|
|
|
|
|
call_readline = gdb_readline2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* When readline has read an end-of-line character, it passes the
|
2010-12-29 01:58:14 +01:00
|
|
|
|
complete line to gdb for processing; command_line_handler is the
|
2004-09-13 Andrew Cagney <cagney@gnu.org>
Eliminate event_loop_p, always has the value 1.
* defs.h (event_loop_p): Delete macro.
* breakpoint.c (until_break_command): Simplify.
* utils.c (prompt_for_continue): Simplify.
* tracepoint.c (read_actions): Simplify.
* top.c (throw_exception, execute_command, gdb_readline_wrapper)
(gdb_rl_operate_and_get_next, command_line_input, get_prompt)
(set_prompt, init_main): Simplify.
(init_signals, disconnect): Delete, unused.
* remote.c (remote_async_resume)
(extended_remote_async_create_inferior): Simplify.
* mi/mi-interp.c (mi_input): Delete, unused.
(mi_interpreter_resume, mi_command_loop): Simplify.
* interps.c (current_interp_command_loop): Simplify.
* infrun.c (proceed): Simplify.
* infcmd.c (run_command, continue_command, step_1, jump_command)
(until_command, advance_command, finish_command)
(interrupt_target_command): Simplify.
* event-top.c (gdb_setup_readline, gdb_disable_readline): Simplify.
2004-09-13 20:26:31 +02:00
|
|
|
|
function that does this. */
|
|
|
|
|
input_handler = command_line_handler;
|
|
|
|
|
|
2010-12-29 01:58:14 +01:00
|
|
|
|
/* Tell readline to use the same input stream that gdb uses. */
|
2004-09-13 Andrew Cagney <cagney@gnu.org>
Eliminate event_loop_p, always has the value 1.
* defs.h (event_loop_p): Delete macro.
* breakpoint.c (until_break_command): Simplify.
* utils.c (prompt_for_continue): Simplify.
* tracepoint.c (read_actions): Simplify.
* top.c (throw_exception, execute_command, gdb_readline_wrapper)
(gdb_rl_operate_and_get_next, command_line_input, get_prompt)
(set_prompt, init_main): Simplify.
(init_signals, disconnect): Delete, unused.
* remote.c (remote_async_resume)
(extended_remote_async_create_inferior): Simplify.
* mi/mi-interp.c (mi_input): Delete, unused.
(mi_interpreter_resume, mi_command_loop): Simplify.
* interps.c (current_interp_command_loop): Simplify.
* infrun.c (proceed): Simplify.
* infcmd.c (run_command, continue_command, step_1, jump_command)
(until_command, advance_command, finish_command)
(interrupt_target_command): Simplify.
* event-top.c (gdb_setup_readline, gdb_disable_readline): Simplify.
2004-09-13 20:26:31 +02:00
|
|
|
|
rl_instream = instream;
|
|
|
|
|
|
|
|
|
|
/* Get a file descriptor for the input stream, so that we can
|
|
|
|
|
register it with the event loop. */
|
|
|
|
|
input_fd = fileno (instream);
|
|
|
|
|
|
|
|
|
|
/* Now we need to create the event sources for the input file
|
|
|
|
|
descriptor. */
|
|
|
|
|
/* At this point in time, this is the only event source that we
|
2010-12-29 01:58:14 +01:00
|
|
|
|
register with the even loop. Another source is going to be the
|
2004-09-13 Andrew Cagney <cagney@gnu.org>
Eliminate event_loop_p, always has the value 1.
* defs.h (event_loop_p): Delete macro.
* breakpoint.c (until_break_command): Simplify.
* utils.c (prompt_for_continue): Simplify.
* tracepoint.c (read_actions): Simplify.
* top.c (throw_exception, execute_command, gdb_readline_wrapper)
(gdb_rl_operate_and_get_next, command_line_input, get_prompt)
(set_prompt, init_main): Simplify.
(init_signals, disconnect): Delete, unused.
* remote.c (remote_async_resume)
(extended_remote_async_create_inferior): Simplify.
* mi/mi-interp.c (mi_input): Delete, unused.
(mi_interpreter_resume, mi_command_loop): Simplify.
* interps.c (current_interp_command_loop): Simplify.
* infrun.c (proceed): Simplify.
* infcmd.c (run_command, continue_command, step_1, jump_command)
(until_command, advance_command, finish_command)
(interrupt_target_command): Simplify.
* event-top.c (gdb_setup_readline, gdb_disable_readline): Simplify.
2004-09-13 20:26:31 +02:00
|
|
|
|
target program (inferior), but that must be registered only when
|
|
|
|
|
it actually exists (I.e. after we say 'run' or after we connect
|
|
|
|
|
to a remote target. */
|
|
|
|
|
add_file_handler (input_fd, stdin_event_handler, 0);
|
1999-06-14 20:08:47 +02:00
|
|
|
|
}
|
2002-10-03 03:23:50 +02:00
|
|
|
|
|
2002-11-05 23:38:11 +01:00
|
|
|
|
/* Disable command input through the standard CLI channels. Used in
|
|
|
|
|
the suspend proc for interpreters that use the standard gdb readline
|
|
|
|
|
interface, like the cli & the mi. */
|
|
|
|
|
void
|
|
|
|
|
gdb_disable_readline (void)
|
|
|
|
|
{
|
2004-09-13 Andrew Cagney <cagney@gnu.org>
Eliminate event_loop_p, always has the value 1.
* defs.h (event_loop_p): Delete macro.
* breakpoint.c (until_break_command): Simplify.
* utils.c (prompt_for_continue): Simplify.
* tracepoint.c (read_actions): Simplify.
* top.c (throw_exception, execute_command, gdb_readline_wrapper)
(gdb_rl_operate_and_get_next, command_line_input, get_prompt)
(set_prompt, init_main): Simplify.
(init_signals, disconnect): Delete, unused.
* remote.c (remote_async_resume)
(extended_remote_async_create_inferior): Simplify.
* mi/mi-interp.c (mi_input): Delete, unused.
(mi_interpreter_resume, mi_command_loop): Simplify.
* interps.c (current_interp_command_loop): Simplify.
* infrun.c (proceed): Simplify.
* infcmd.c (run_command, continue_command, step_1, jump_command)
(until_command, advance_command, finish_command)
(interrupt_target_command): Simplify.
* event-top.c (gdb_setup_readline, gdb_disable_readline): Simplify.
2004-09-13 20:26:31 +02:00
|
|
|
|
/* FIXME - It is too heavyweight to delete and remake these every
|
|
|
|
|
time you run an interpreter that needs readline. It is probably
|
|
|
|
|
better to have the interpreters cache these, which in turn means
|
|
|
|
|
that this needs to be moved into interpreter specific code. */
|
2002-11-05 23:38:11 +01:00
|
|
|
|
|
|
|
|
|
#if 0
|
2004-09-13 Andrew Cagney <cagney@gnu.org>
Eliminate event_loop_p, always has the value 1.
* defs.h (event_loop_p): Delete macro.
* breakpoint.c (until_break_command): Simplify.
* utils.c (prompt_for_continue): Simplify.
* tracepoint.c (read_actions): Simplify.
* top.c (throw_exception, execute_command, gdb_readline_wrapper)
(gdb_rl_operate_and_get_next, command_line_input, get_prompt)
(set_prompt, init_main): Simplify.
(init_signals, disconnect): Delete, unused.
* remote.c (remote_async_resume)
(extended_remote_async_create_inferior): Simplify.
* mi/mi-interp.c (mi_input): Delete, unused.
(mi_interpreter_resume, mi_command_loop): Simplify.
* interps.c (current_interp_command_loop): Simplify.
* infrun.c (proceed): Simplify.
* infcmd.c (run_command, continue_command, step_1, jump_command)
(until_command, advance_command, finish_command)
(interrupt_target_command): Simplify.
* event-top.c (gdb_setup_readline, gdb_disable_readline): Simplify.
2004-09-13 20:26:31 +02:00
|
|
|
|
ui_file_delete (gdb_stdout);
|
|
|
|
|
ui_file_delete (gdb_stderr);
|
|
|
|
|
gdb_stdlog = NULL;
|
|
|
|
|
gdb_stdtarg = NULL;
|
2010-09-11 18:00:27 +02:00
|
|
|
|
gdb_stdtargerr = NULL;
|
2002-11-05 23:38:11 +01:00
|
|
|
|
#endif
|
|
|
|
|
|
2004-09-13 Andrew Cagney <cagney@gnu.org>
Eliminate event_loop_p, always has the value 1.
* defs.h (event_loop_p): Delete macro.
* breakpoint.c (until_break_command): Simplify.
* utils.c (prompt_for_continue): Simplify.
* tracepoint.c (read_actions): Simplify.
* top.c (throw_exception, execute_command, gdb_readline_wrapper)
(gdb_rl_operate_and_get_next, command_line_input, get_prompt)
(set_prompt, init_main): Simplify.
(init_signals, disconnect): Delete, unused.
* remote.c (remote_async_resume)
(extended_remote_async_create_inferior): Simplify.
* mi/mi-interp.c (mi_input): Delete, unused.
(mi_interpreter_resume, mi_command_loop): Simplify.
* interps.c (current_interp_command_loop): Simplify.
* infrun.c (proceed): Simplify.
* infcmd.c (run_command, continue_command, step_1, jump_command)
(until_command, advance_command, finish_command)
(interrupt_target_command): Simplify.
* event-top.c (gdb_setup_readline, gdb_disable_readline): Simplify.
2004-09-13 20:26:31 +02:00
|
|
|
|
rl_callback_handler_remove ();
|
|
|
|
|
delete_file_handler (input_fd);
|
2002-11-05 23:38:11 +01:00
|
|
|
|
}
|