2003-02-12 16:31:30 +01:00
|
|
|
/* Definitions used by event-top.c, for GDB, the GNU debugger.
|
|
|
|
|
2015-01-01 10:32:14 +01:00
|
|
|
Copyright (C) 1999-2015 Free Software Foundation, Inc.
|
2003-02-12 16:31:30 +01:00
|
|
|
|
1999-09-22 05:28:34 +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-09-22 05:28:34 +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
|
2007-08-23 20:08:50 +02:00
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
1999-09-22 05:28:34 +02:00
|
|
|
|
2003-02-12 16:31:30 +01:00
|
|
|
#ifndef EVENT_TOP_H
|
|
|
|
#define EVENT_TOP_H
|
|
|
|
|
2003-04-12 Andrew Cagney <cagney@redhat.com>
* gdbarch.sh: Add missing opaque declarations.
* gdbarch.h: Regnerate.
* symtab.h: Add missing opaque declarations.
* value.h, target.h, symfile.h, stabsread.h: Ditto.
* x86-64-tdep.h, xmodem.h, monitor.h, typeprint.h: Ditto.
* srec.h, solib-svr4.h, source.h, inferior.h: Ditto.
* ser-unix.h, serial.h, remote-utils.h, gdbcore.h: Ditto.
* ppc-tdep.h, ocd.h, mips-tdep.h, gdbtypes.h: Ditto.
* buildsym.h, builtin-regs.h, linespec.h, language.h: Ditto.
* i387-tdep.h, gdbthread.h, event-top.h, gdb.h: Ditto.
* dwarf2cfi.h, doublest.h, disasm.h, cp-abi.h: Ditto.
* cli-out.h, c-lang.h, ax-gdb.h, arch-utils.h: Ditto.
* ada-lang.h, config/nm-lynx.h, config/nm-linux.h: Ditto.
* config/sparc/tm-sp64.h, config/rs6000/tm-rs6000.h: Ditto.
* config/pa/tm-hppah.h, config/m68k/tm-delta68.h: Ditto.
* cli/cli-setshow.h, cli/cli-script.h: Ditto.
2003-04-12 19:41:26 +02:00
|
|
|
struct cmd_list_element;
|
|
|
|
|
2011-01-07 20:36:19 +01:00
|
|
|
/* Exported functions from event-top.c.
|
2001-04-20 16:25:59 +02:00
|
|
|
FIXME: these should really go into top.h. */
|
1999-09-22 05:28:34 +02:00
|
|
|
|
Fix build with Python 3.4 (PR python/16784)
The type of the function pointer PyOS_ReadlineFunctionPointer (part of the
Python C API), which we use, slightly changed starting with Python 3.4. The
signature went from
PyAPI_DATA(char) *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, char *);
to
PyAPI_DATA(char) *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *);
The parameter that changed is the prompt text.
This commits adjust gdb accordingly by making the prompt_arg parameter
const, as well as the fallouts of that. I needed to rework how
annotations are added to the prompt, since the it is now const. If
annotations are enabled, it will make a copy of the prompt overwrite the
prompt variable that is used throughout the function. Otherwise, no copy
is done and the original prompt_arg value is passed.
I changed the signature of deprecated_readline_hook. I would've changed any
user of it, but it seems like nothing is using it,
Built-tested with python 2.7.x, 3.3.y and 3.4.z.
gdb/ChangeLog:
* defs.h (gdb_readline): Constify argument.
(gdb_readline_wrapper): Same.
(command_line_input): Same.
(deprecated_readline_hook): Same.
* top.c (deprecated_readline_hook): Same.
(gdb_readline): Same.
(gdb_readline_wrapper): Same.
(command_line_input): Constify argument. Pass prompt to
called functions instead of local_prompt, overwriting prompt
if using annotations.
* event-top.h (display_gdb_prompt): Constify argument.
* event-top.c (display_gdb_prompt): Same.
* python/py-gdb-readline.c (gdbpy_readline_wrapper): Constify
argument if building with Python 3.4 and up.
Signed-off-by: Simon Marchi <simon.marchi@ericsson.com>
2014-12-15 17:38:03 +01:00
|
|
|
extern void display_gdb_prompt (const char *new_prompt);
|
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
|
|
|
void gdb_setup_readline (void);
|
|
|
|
void gdb_disable_readline (void);
|
1999-09-22 05:28:34 +02:00
|
|
|
extern void async_init_signals (void);
|
2001-04-20 16:25:59 +02:00
|
|
|
extern void set_async_editing_command (char *args, int from_tty,
|
|
|
|
struct cmd_list_element *c);
|
1999-09-22 05:28:34 +02:00
|
|
|
|
|
|
|
/* Signal to catch ^Z typed while reading a command: SIGTSTP or SIGCONT. */
|
|
|
|
#ifndef STOP_SIGNAL
|
2001-02-08 06:06:13 +01:00
|
|
|
#include <signal.h>
|
1999-09-22 05:28:34 +02:00
|
|
|
#ifdef SIGTSTP
|
|
|
|
#define STOP_SIGNAL SIGTSTP
|
|
|
|
extern void handle_stop_sig (int sig);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
extern void handle_sigint (int sig);
|
2005-11-25 19:33:12 +01:00
|
|
|
extern void handle_sigterm (int sig);
|
1999-10-06 01:13:56 +02:00
|
|
|
extern void gdb_readline2 (void *client_data);
|
|
|
|
extern void async_request_quit (void *arg);
|
|
|
|
extern void stdin_event_handler (int error, void *client_data);
|
1999-09-28 23:55:21 +02:00
|
|
|
extern void async_disable_stdin (void);
|
2008-03-14 20:55:51 +01:00
|
|
|
extern void async_enable_stdin (void);
|
1999-09-22 05:28:34 +02:00
|
|
|
|
|
|
|
/* Exported variables from event-top.c.
|
2001-04-20 16:25:59 +02:00
|
|
|
FIXME: these should really go into top.h. */
|
1999-09-22 05:28:34 +02:00
|
|
|
|
|
|
|
extern int async_command_editing_p;
|
|
|
|
extern int exec_done_display_p;
|
|
|
|
extern char *async_annotation_suffix;
|
|
|
|
extern struct prompts the_prompts;
|
1999-10-06 01:13:56 +02:00
|
|
|
extern void (*call_readline) (void *);
|
1999-09-22 05:28:34 +02:00
|
|
|
extern void (*input_handler) (char *);
|
|
|
|
extern int input_fd;
|
2001-11-27 05:15:09 +01:00
|
|
|
extern void (*after_char_processing_hook) (void);
|
2014-11-23 11:03:39 +01:00
|
|
|
extern int call_stdin_event_handler_again_p;
|
2003-02-12 16:31:30 +01:00
|
|
|
|
PR python/17372 - Python hangs when displaying help()
This is more of a readline/terminal issue than a Python one.
PR17372 is a regression in 7.8 caused by the fix for PR17072:
commit 0017922d0292d8c374584f6100874580659c9973
Author: Pedro Alves <palves@redhat.com>
Date: Mon Jul 14 19:55:32 2014 +0100
Background execution + pagination aborts readline/gdb
gdb_readline_wrapper_line removes the handler after a line is
processed. Usually, we'll end up re-displaying the prompt, and that
reinstalls the handler. But if the output is coming out of handling
a stop event, we don't re-display the prompt, and nothing restores the
handler. So the next input wakes up the event loop and calls into
readline, which aborts.
...
gdb/
2014-07-14 Pedro Alves <palves@redhat.com>
PR gdb/17072
* top.c (gdb_readline_wrapper_line): Tweak comment.
(gdb_readline_wrapper_cleanup): If readline is enabled, reinstall
the input handler callback.
The problem is that installing the input handler callback also preps
the terminal, putting it in raw mode and with echo disabled, which is
bad if we're going to call a command that assumes cooked/canonical
mode, and echo enabled, like in the case of the PR, Python's
interactive shell. Another example I came up with that doesn't depend
on Python is starting a subshell with "(gdb) shell /bin/sh" from a
multi-line command. Tests covering both these examples are added.
The fix is to revert the original fix for PR gdb/17072, and instead
restore the callback handler after processing an asynchronous target
event.
Furthermore, calling rl_callback_handler_install when we already have
some input in readline's line buffer discards that input, which is
obviously a bad thing to do while the user is typing. No specific
test is added for that, because I first tried calling it even if the
callback handler was still installed and that resulted in hundreds of
failures in the testsuite.
gdb/
2014-10-29 Pedro Alves <palves@redhat.com>
PR python/17372
* event-top.c (change_line_handler): Call
gdb_rl_callback_handler_remove instead of
rl_callback_handler_remove.
(callback_handler_installed): New global.
(gdb_rl_callback_handler_remove, gdb_rl_callback_handler_install)
(gdb_rl_callback_handler_reinstall): New functions.
(display_gdb_prompt): Call gdb_rl_callback_handler_remove and
gdb_rl_callback_handler_install instead of
rl_callback_handler_remove and rl_callback_handler_install.
(gdb_disable_readline): Call gdb_rl_callback_handler_remove
instead of rl_callback_handler_remove.
* event-top.h (gdb_rl_callback_handler_remove)
(gdb_rl_callback_handler_install)
(gdb_rl_callback_handler_reinstall): New declarations.
* infrun.c (reinstall_readline_callback_handler_cleanup): New
cleanup function.
(fetch_inferior_event): Install it.
* top.c (gdb_readline_wrapper_line) Call
gdb_rl_callback_handler_remove instead of
rl_callback_handler_remove.
(gdb_readline_wrapper_cleanup): Don't call
rl_callback_handler_install.
gdb/testsuite/
2014-10-29 Pedro Alves <palves@redhat.com>
PR python/17372
* gdb.python/python.exp: Test a multi-line command that spawns
interactive Python.
* gdb.base/multi-line-starts-subshell.exp: New file.
2014-10-23 18:13:35 +02:00
|
|
|
/* Wrappers for rl_callback_handler_remove and
|
|
|
|
rl_callback_handler_install that keep track of whether the callback
|
|
|
|
handler is installed in readline. Do not call the readline
|
|
|
|
versions directly. */
|
|
|
|
extern void gdb_rl_callback_handler_remove (void);
|
|
|
|
extern void gdb_rl_callback_handler_install (const char *prompt);
|
|
|
|
|
|
|
|
/* Reinstall the readline callback handler (with no prompt), if not
|
|
|
|
currently installed. */
|
|
|
|
extern void gdb_rl_callback_handler_reinstall (void);
|
|
|
|
|
2013-09-06 10:53:09 +02:00
|
|
|
extern void cli_command_loop (void *);
|
2003-02-12 16:31:30 +01:00
|
|
|
|
|
|
|
#endif
|