diff options
author | matt rice <ratmice@gmail.com> | 2011-09-02 21:16:54 +0000 |
---|---|---|
committer | matt rice <ratmice@gmail.com> | 2011-09-02 21:16:54 +0000 |
commit | 7d8e6458d594b84b94099d1069bb44619885e293 (patch) | |
tree | 36392698de0fd93e578dac1b77aabc50400bb906 /gdb/event-top.c | |
parent | 84636d2874122cf547b3eaee494544636931c083 (diff) | |
download | gdb-7d8e6458d594b84b94099d1069bb44619885e293.zip gdb-7d8e6458d594b84b94099d1069bb44619885e293.tar.gz gdb-7d8e6458d594b84b94099d1069bb44619885e293.tar.bz2 |
PR gdb/10720
* event-top.c (cli_command_loop): Replace readline setup with
direct call to display_gdb_prompt.
(display_gdb_prompt): Do not call observer mechanism during
synchronous execution.
testsuite:
* lib/prompt.exp: New file for testing the first prompt.
* gdb.python/py-prompt.exp: Ditto.
* gdb.python/py-prompt.c: Ditto (copy of ext-attach.c).
Diffstat (limited to 'gdb/event-top.c')
-rw-r--r-- | gdb/event-top.c | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/gdb/event-top.c b/gdb/event-top.c index 37882728..09bd89f 100644 --- a/gdb/event-top.c +++ b/gdb/event-top.c @@ -185,27 +185,7 @@ rl_callback_read_char_wrapper (gdb_client_data client_data) void cli_command_loop (void) { - /* If we are using readline, set things up and display the first - prompt, otherwise just print the prompt. */ - if (async_command_editing_p) - { - int length; - char *a_prompt; - char *gdb_prompt = get_prompt (0); - - /* Tell readline what the prompt to display is and what function - it will need to call after a whole line is read. This also - displays the first prompt. */ - length = strlen (get_prefix (0)) - + strlen (gdb_prompt) + strlen (get_suffix(0)) + 1; - a_prompt = (char *) alloca (length); - strcpy (a_prompt, get_prefix (0)); - strcat (a_prompt, gdb_prompt); - strcat (a_prompt, get_suffix (0)); - rl_callback_handler_install (a_prompt, input_handler); - } - else - display_gdb_prompt (0); + display_gdb_prompt (0); /* Now it's time to start the event loop. */ start_event_loop (); @@ -272,8 +252,11 @@ display_gdb_prompt (char *new_prompt) /* Get the prompt before the observers are called as observer hook functions may change the prompt. Do not call observers on an explicit prompt change as passed to this function, as this forms - a temporary prompt, IE, displayed but not set. */ - if (! new_prompt) + a temporary prompt, IE, displayed but not set. Do not call + observers for a prompt change if sync_execution is set, it will + call us again with sync_execution not set when it wants to + display an actual prompt. */ + if (! sync_execution && ! new_prompt) { char *post_gdb_prompt = NULL; char *pre_gdb_prompt = xstrdup (get_prompt (0)); @@ -288,6 +271,10 @@ display_gdb_prompt (char *new_prompt) xfree (pre_gdb_prompt); } + /* In the sync_execution && !is_running case we need to display the prompt + even though it may be "" to avoid a double prompt, while installing the + callback handlers, in the async_editing_p case for pagination, + So fall through. */ if (sync_execution && is_running (inferior_ptid)) { /* This is to trick readline into not trying to display the |