| 1 |
227 |
jeremybenn |
/* Top level stuff for GDB, the GNU debugger.
|
| 2 |
|
|
|
| 3 |
|
|
Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005, 2007, 2008, 2009, 2010
|
| 4 |
|
|
Free Software Foundation, Inc.
|
| 5 |
|
|
|
| 6 |
|
|
Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
|
| 7 |
|
|
|
| 8 |
|
|
This file is part of GDB.
|
| 9 |
|
|
|
| 10 |
|
|
This program is free software; you can redistribute it and/or modify
|
| 11 |
|
|
it under the terms of the GNU General Public License as published by
|
| 12 |
|
|
the Free Software Foundation; either version 3 of the License, or
|
| 13 |
|
|
(at your option) any later version.
|
| 14 |
|
|
|
| 15 |
|
|
This program is distributed in the hope that it will be useful,
|
| 16 |
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 17 |
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 18 |
|
|
GNU General Public License for more details.
|
| 19 |
|
|
|
| 20 |
|
|
You should have received a copy of the GNU General Public License
|
| 21 |
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
| 22 |
|
|
|
| 23 |
|
|
#include "defs.h"
|
| 24 |
|
|
#include "top.h"
|
| 25 |
|
|
#include "inferior.h"
|
| 26 |
|
|
#include "target.h"
|
| 27 |
|
|
#include "terminal.h" /* for job_control */
|
| 28 |
|
|
#include "event-loop.h"
|
| 29 |
|
|
#include "event-top.h"
|
| 30 |
|
|
#include "interps.h"
|
| 31 |
|
|
#include <signal.h>
|
| 32 |
|
|
#include "exceptions.h"
|
| 33 |
|
|
#include "cli/cli-script.h" /* for reset_command_nest_depth */
|
| 34 |
|
|
#include "main.h"
|
| 35 |
|
|
#include "gdbthread.h"
|
| 36 |
|
|
|
| 37 |
|
|
/* For dont_repeat() */
|
| 38 |
|
|
#include "gdbcmd.h"
|
| 39 |
|
|
|
| 40 |
|
|
/* readline include files */
|
| 41 |
|
|
#include "readline/readline.h"
|
| 42 |
|
|
#include "readline/history.h"
|
| 43 |
|
|
|
| 44 |
|
|
/* readline defines this. */
|
| 45 |
|
|
#undef savestring
|
| 46 |
|
|
|
| 47 |
|
|
static void rl_callback_read_char_wrapper (gdb_client_data client_data);
|
| 48 |
|
|
static void command_line_handler (char *rl);
|
| 49 |
|
|
static void change_line_handler (void);
|
| 50 |
|
|
static void change_annotation_level (void);
|
| 51 |
|
|
static void command_handler (char *command);
|
| 52 |
|
|
|
| 53 |
|
|
/* Signal handlers. */
|
| 54 |
|
|
#ifdef SIGQUIT
|
| 55 |
|
|
static void handle_sigquit (int sig);
|
| 56 |
|
|
#endif
|
| 57 |
|
|
#ifdef SIGHUP
|
| 58 |
|
|
static void handle_sighup (int sig);
|
| 59 |
|
|
#endif
|
| 60 |
|
|
static void handle_sigfpe (int sig);
|
| 61 |
|
|
#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
|
| 62 |
|
|
static void handle_sigwinch (int sig);
|
| 63 |
|
|
#endif
|
| 64 |
|
|
|
| 65 |
|
|
/* Functions to be invoked by the event loop in response to
|
| 66 |
|
|
signals. */
|
| 67 |
|
|
#if defined (SIGQUIT) || defined (SIGHUP)
|
| 68 |
|
|
static void async_do_nothing (gdb_client_data);
|
| 69 |
|
|
#endif
|
| 70 |
|
|
#ifdef SIGHUP
|
| 71 |
|
|
static void async_disconnect (gdb_client_data);
|
| 72 |
|
|
#endif
|
| 73 |
|
|
static void async_float_handler (gdb_client_data);
|
| 74 |
|
|
#ifdef STOP_SIGNAL
|
| 75 |
|
|
static void async_stop_sig (gdb_client_data);
|
| 76 |
|
|
#endif
|
| 77 |
|
|
|
| 78 |
|
|
/* Readline offers an alternate interface, via callback
|
| 79 |
|
|
functions. These are all included in the file callback.c in the
|
| 80 |
|
|
readline distribution. This file provides (mainly) a function, which
|
| 81 |
|
|
the event loop uses as callback (i.e. event handler) whenever an event
|
| 82 |
|
|
is detected on the standard input file descriptor.
|
| 83 |
|
|
readline_callback_read_char is called (by the GDB event loop) whenever
|
| 84 |
|
|
there is a new character ready on the input stream. This function
|
| 85 |
|
|
incrementally builds a buffer internal to readline where it
|
| 86 |
|
|
accumulates the line read up to the point of invocation. In the
|
| 87 |
|
|
special case in which the character read is newline, the function
|
| 88 |
|
|
invokes a GDB supplied callback routine, which does the processing of
|
| 89 |
|
|
a full command line. This latter routine is the asynchronous analog
|
| 90 |
|
|
of the old command_line_input in gdb. Instead of invoking (and waiting
|
| 91 |
|
|
for) readline to read the command line and pass it back to
|
| 92 |
|
|
command_loop for processing, the new command_line_handler function has
|
| 93 |
|
|
the command line already available as its parameter. INPUT_HANDLER is
|
| 94 |
|
|
to be set to the function that readline will invoke when a complete
|
| 95 |
|
|
line of input is ready. CALL_READLINE is to be set to the function
|
| 96 |
|
|
that readline offers as callback to the event_loop. */
|
| 97 |
|
|
|
| 98 |
|
|
void (*input_handler) (char *);
|
| 99 |
|
|
void (*call_readline) (gdb_client_data);
|
| 100 |
|
|
|
| 101 |
|
|
/* Important variables for the event loop. */
|
| 102 |
|
|
|
| 103 |
|
|
/* This is used to determine if GDB is using the readline library or
|
| 104 |
|
|
its own simplified form of readline. It is used by the asynchronous
|
| 105 |
|
|
form of the set editing command.
|
| 106 |
|
|
ezannoni: as of 1999-04-29 I expect that this
|
| 107 |
|
|
variable will not be used after gdb is changed to use the event
|
| 108 |
|
|
loop as default engine, and event-top.c is merged into top.c. */
|
| 109 |
|
|
int async_command_editing_p;
|
| 110 |
|
|
|
| 111 |
|
|
/* This variable contains the new prompt that the user sets with the
|
| 112 |
|
|
set prompt command. */
|
| 113 |
|
|
char *new_async_prompt;
|
| 114 |
|
|
|
| 115 |
|
|
/* This is the annotation suffix that will be used when the
|
| 116 |
|
|
annotation_level is 2. */
|
| 117 |
|
|
char *async_annotation_suffix;
|
| 118 |
|
|
|
| 119 |
|
|
/* This is used to display the notification of the completion of an
|
| 120 |
|
|
asynchronous execution command. */
|
| 121 |
|
|
int exec_done_display_p = 0;
|
| 122 |
|
|
|
| 123 |
|
|
/* This is the file descriptor for the input stream that GDB uses to
|
| 124 |
|
|
read commands from. */
|
| 125 |
|
|
int input_fd;
|
| 126 |
|
|
|
| 127 |
|
|
/* This is the prompt stack. Prompts will be pushed on the stack as
|
| 128 |
|
|
needed by the different 'kinds' of user inputs GDB is asking
|
| 129 |
|
|
for. See event-loop.h. */
|
| 130 |
|
|
struct prompts the_prompts;
|
| 131 |
|
|
|
| 132 |
|
|
/* signal handling variables */
|
| 133 |
|
|
/* Each of these is a pointer to a function that the event loop will
|
| 134 |
|
|
invoke if the corresponding signal has received. The real signal
|
| 135 |
|
|
handlers mark these functions as ready to be executed and the event
|
| 136 |
|
|
loop, in a later iteration, calls them. See the function
|
| 137 |
|
|
invoke_async_signal_handler. */
|
| 138 |
|
|
void *sigint_token;
|
| 139 |
|
|
#ifdef SIGHUP
|
| 140 |
|
|
void *sighup_token;
|
| 141 |
|
|
#endif
|
| 142 |
|
|
#ifdef SIGQUIT
|
| 143 |
|
|
void *sigquit_token;
|
| 144 |
|
|
#endif
|
| 145 |
|
|
void *sigfpe_token;
|
| 146 |
|
|
#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
|
| 147 |
|
|
void *sigwinch_token;
|
| 148 |
|
|
#endif
|
| 149 |
|
|
#ifdef STOP_SIGNAL
|
| 150 |
|
|
void *sigtstp_token;
|
| 151 |
|
|
#endif
|
| 152 |
|
|
|
| 153 |
|
|
/* Structure to save a partially entered command. This is used when
|
| 154 |
|
|
the user types '\' at the end of a command line. This is necessary
|
| 155 |
|
|
because each line of input is handled by a different call to
|
| 156 |
|
|
command_line_handler, and normally there is no state retained
|
| 157 |
|
|
between different calls. */
|
| 158 |
|
|
int more_to_come = 0;
|
| 159 |
|
|
|
| 160 |
|
|
struct readline_input_state
|
| 161 |
|
|
{
|
| 162 |
|
|
char *linebuffer;
|
| 163 |
|
|
char *linebuffer_ptr;
|
| 164 |
|
|
}
|
| 165 |
|
|
readline_input_state;
|
| 166 |
|
|
|
| 167 |
|
|
/* This hook is called by rl_callback_read_char_wrapper after each
|
| 168 |
|
|
character is processed. */
|
| 169 |
|
|
void (*after_char_processing_hook) ();
|
| 170 |
|
|
|
| 171 |
|
|
|
| 172 |
|
|
/* Wrapper function for calling into the readline library. The event
|
| 173 |
|
|
loop expects the callback function to have a paramter, while readline
|
| 174 |
|
|
expects none. */
|
| 175 |
|
|
static void
|
| 176 |
|
|
rl_callback_read_char_wrapper (gdb_client_data client_data)
|
| 177 |
|
|
{
|
| 178 |
|
|
rl_callback_read_char ();
|
| 179 |
|
|
if (after_char_processing_hook)
|
| 180 |
|
|
(*after_char_processing_hook) ();
|
| 181 |
|
|
}
|
| 182 |
|
|
|
| 183 |
|
|
/* Initialize all the necessary variables, start the event loop,
|
| 184 |
|
|
register readline, and stdin, start the loop. */
|
| 185 |
|
|
void
|
| 186 |
|
|
cli_command_loop (void)
|
| 187 |
|
|
{
|
| 188 |
|
|
/* If we are using readline, set things up and display the first
|
| 189 |
|
|
prompt, otherwise just print the prompt. */
|
| 190 |
|
|
if (async_command_editing_p)
|
| 191 |
|
|
{
|
| 192 |
|
|
int length;
|
| 193 |
|
|
char *a_prompt;
|
| 194 |
|
|
char *gdb_prompt = get_prompt ();
|
| 195 |
|
|
|
| 196 |
|
|
/* Tell readline what the prompt to display is and what function it
|
| 197 |
|
|
will need to call after a whole line is read. This also displays
|
| 198 |
|
|
the first prompt. */
|
| 199 |
|
|
length = strlen (PREFIX (0))
|
| 200 |
|
|
+ strlen (gdb_prompt) + strlen (SUFFIX (0)) + 1;
|
| 201 |
|
|
a_prompt = (char *) alloca (length);
|
| 202 |
|
|
strcpy (a_prompt, PREFIX (0));
|
| 203 |
|
|
strcat (a_prompt, gdb_prompt);
|
| 204 |
|
|
strcat (a_prompt, SUFFIX (0));
|
| 205 |
|
|
rl_callback_handler_install (a_prompt, input_handler);
|
| 206 |
|
|
}
|
| 207 |
|
|
else
|
| 208 |
|
|
display_gdb_prompt (0);
|
| 209 |
|
|
|
| 210 |
|
|
/* Now it's time to start the event loop. */
|
| 211 |
|
|
start_event_loop ();
|
| 212 |
|
|
}
|
| 213 |
|
|
|
| 214 |
|
|
/* Change the function to be invoked every time there is a character
|
| 215 |
|
|
ready on stdin. This is used when the user sets the editing off,
|
| 216 |
|
|
therefore bypassing readline, and letting gdb handle the input
|
| 217 |
|
|
itself, via gdb_readline2. Also it is used in the opposite case in
|
| 218 |
|
|
which the user sets editing on again, by restoring readline
|
| 219 |
|
|
handling of the input. */
|
| 220 |
|
|
static void
|
| 221 |
|
|
change_line_handler (void)
|
| 222 |
|
|
{
|
| 223 |
|
|
/* NOTE: this operates on input_fd, not instream. If we are reading
|
| 224 |
|
|
commands from a file, instream will point to the file. However in
|
| 225 |
|
|
async mode, we always read commands from a file with editing
|
| 226 |
|
|
off. This means that the 'set editing on/off' will have effect
|
| 227 |
|
|
only on the interactive session. */
|
| 228 |
|
|
|
| 229 |
|
|
if (async_command_editing_p)
|
| 230 |
|
|
{
|
| 231 |
|
|
/* Turn on editing by using readline. */
|
| 232 |
|
|
call_readline = rl_callback_read_char_wrapper;
|
| 233 |
|
|
input_handler = command_line_handler;
|
| 234 |
|
|
}
|
| 235 |
|
|
else
|
| 236 |
|
|
{
|
| 237 |
|
|
/* Turn off editing by using gdb_readline2. */
|
| 238 |
|
|
rl_callback_handler_remove ();
|
| 239 |
|
|
call_readline = gdb_readline2;
|
| 240 |
|
|
|
| 241 |
|
|
/* Set up the command handler as well, in case we are called as
|
| 242 |
|
|
first thing from .gdbinit. */
|
| 243 |
|
|
input_handler = command_line_handler;
|
| 244 |
|
|
}
|
| 245 |
|
|
}
|
| 246 |
|
|
|
| 247 |
|
|
/* Displays the prompt. The prompt that is displayed is the current
|
| 248 |
|
|
top of the prompt stack, if the argument NEW_PROMPT is
|
| 249 |
|
|
0. Otherwise, it displays whatever NEW_PROMPT is. This is used
|
| 250 |
|
|
after each gdb command has completed, and in the following cases:
|
| 251 |
|
|
1. when the user enters a command line which is ended by '\'
|
| 252 |
|
|
indicating that the command will continue on the next line.
|
| 253 |
|
|
In that case the prompt that is displayed is the empty string.
|
| 254 |
|
|
2. When the user is entering 'commands' for a breakpoint, or
|
| 255 |
|
|
actions for a tracepoint. In this case the prompt will be '>'
|
| 256 |
|
|
3. Other????
|
| 257 |
|
|
FIXME: 2. & 3. not implemented yet for async. */
|
| 258 |
|
|
void
|
| 259 |
|
|
display_gdb_prompt (char *new_prompt)
|
| 260 |
|
|
{
|
| 261 |
|
|
int prompt_length = 0;
|
| 262 |
|
|
char *gdb_prompt = get_prompt ();
|
| 263 |
|
|
|
| 264 |
|
|
/* Reset the nesting depth used when trace-commands is set. */
|
| 265 |
|
|
reset_command_nest_depth ();
|
| 266 |
|
|
|
| 267 |
|
|
/* Each interpreter has its own rules on displaying the command
|
| 268 |
|
|
prompt. */
|
| 269 |
|
|
if (!current_interp_display_prompt_p ())
|
| 270 |
|
|
return;
|
| 271 |
|
|
|
| 272 |
|
|
if (sync_execution && is_running (inferior_ptid))
|
| 273 |
|
|
{
|
| 274 |
|
|
/* This is to trick readline into not trying to display the
|
| 275 |
|
|
prompt. Even though we display the prompt using this
|
| 276 |
|
|
function, readline still tries to do its own display if we
|
| 277 |
|
|
don't call rl_callback_handler_install and
|
| 278 |
|
|
rl_callback_handler_remove (which readline detects because a
|
| 279 |
|
|
global variable is not set). If readline did that, it could
|
| 280 |
|
|
mess up gdb signal handlers for SIGINT. Readline assumes
|
| 281 |
|
|
that between calls to rl_set_signals and rl_clear_signals gdb
|
| 282 |
|
|
doesn't do anything with the signal handlers. Well, that's
|
| 283 |
|
|
not the case, because when the target executes we change the
|
| 284 |
|
|
SIGINT signal handler. If we allowed readline to display the
|
| 285 |
|
|
prompt, the signal handler change would happen exactly
|
| 286 |
|
|
between the calls to the above two functions.
|
| 287 |
|
|
Calling rl_callback_handler_remove(), does the job. */
|
| 288 |
|
|
|
| 289 |
|
|
rl_callback_handler_remove ();
|
| 290 |
|
|
return;
|
| 291 |
|
|
}
|
| 292 |
|
|
|
| 293 |
|
|
if (!new_prompt)
|
| 294 |
|
|
{
|
| 295 |
|
|
/* Just use the top of the prompt stack. */
|
| 296 |
|
|
prompt_length = strlen (PREFIX (0)) +
|
| 297 |
|
|
strlen (SUFFIX (0)) +
|
| 298 |
|
|
strlen (gdb_prompt) + 1;
|
| 299 |
|
|
|
| 300 |
|
|
new_prompt = (char *) alloca (prompt_length);
|
| 301 |
|
|
|
| 302 |
|
|
/* Prefix needs to have new line at end. */
|
| 303 |
|
|
strcpy (new_prompt, PREFIX (0));
|
| 304 |
|
|
strcat (new_prompt, gdb_prompt);
|
| 305 |
|
|
/* Suffix needs to have a new line at end and \032 \032 at
|
| 306 |
|
|
beginning. */
|
| 307 |
|
|
strcat (new_prompt, SUFFIX (0));
|
| 308 |
|
|
}
|
| 309 |
|
|
|
| 310 |
|
|
if (async_command_editing_p)
|
| 311 |
|
|
{
|
| 312 |
|
|
rl_callback_handler_remove ();
|
| 313 |
|
|
rl_callback_handler_install (new_prompt, input_handler);
|
| 314 |
|
|
}
|
| 315 |
|
|
/* new_prompt at this point can be the top of the stack or the one passed in */
|
| 316 |
|
|
else if (new_prompt)
|
| 317 |
|
|
{
|
| 318 |
|
|
/* Don't use a _filtered function here. It causes the assumed
|
| 319 |
|
|
character position to be off, since the newline we read from
|
| 320 |
|
|
the user is not accounted for. */
|
| 321 |
|
|
fputs_unfiltered (new_prompt, gdb_stdout);
|
| 322 |
|
|
gdb_flush (gdb_stdout);
|
| 323 |
|
|
}
|
| 324 |
|
|
}
|
| 325 |
|
|
|
| 326 |
|
|
/* Used when the user requests a different annotation level, with
|
| 327 |
|
|
'set annotate'. It pushes a new prompt (with prefix and suffix) on top
|
| 328 |
|
|
of the prompt stack, if the annotation level desired is 2, otherwise
|
| 329 |
|
|
it pops the top of the prompt stack when we want the annotation level
|
| 330 |
|
|
to be the normal ones (1 or 0). */
|
| 331 |
|
|
static void
|
| 332 |
|
|
change_annotation_level (void)
|
| 333 |
|
|
{
|
| 334 |
|
|
char *prefix, *suffix;
|
| 335 |
|
|
|
| 336 |
|
|
if (!PREFIX (0) || !PROMPT (0) || !SUFFIX (0))
|
| 337 |
|
|
{
|
| 338 |
|
|
/* The prompt stack has not been initialized to "", we are
|
| 339 |
|
|
using gdb w/o the --async switch */
|
| 340 |
|
|
warning (_("Command has same effect as set annotate"));
|
| 341 |
|
|
return;
|
| 342 |
|
|
}
|
| 343 |
|
|
|
| 344 |
|
|
if (annotation_level > 1)
|
| 345 |
|
|
{
|
| 346 |
|
|
if (!strcmp (PREFIX (0), "") && !strcmp (SUFFIX (0), ""))
|
| 347 |
|
|
{
|
| 348 |
|
|
/* Push a new prompt if the previous annotation_level was not >1. */
|
| 349 |
|
|
prefix = (char *) alloca (strlen (async_annotation_suffix) + 10);
|
| 350 |
|
|
strcpy (prefix, "\n\032\032pre-");
|
| 351 |
|
|
strcat (prefix, async_annotation_suffix);
|
| 352 |
|
|
strcat (prefix, "\n");
|
| 353 |
|
|
|
| 354 |
|
|
suffix = (char *) alloca (strlen (async_annotation_suffix) + 6);
|
| 355 |
|
|
strcpy (suffix, "\n\032\032");
|
| 356 |
|
|
strcat (suffix, async_annotation_suffix);
|
| 357 |
|
|
strcat (suffix, "\n");
|
| 358 |
|
|
|
| 359 |
|
|
push_prompt (prefix, (char *) 0, suffix);
|
| 360 |
|
|
}
|
| 361 |
|
|
}
|
| 362 |
|
|
else
|
| 363 |
|
|
{
|
| 364 |
|
|
if (strcmp (PREFIX (0), "") && strcmp (SUFFIX (0), ""))
|
| 365 |
|
|
{
|
| 366 |
|
|
/* Pop the top of the stack, we are going back to annotation < 1. */
|
| 367 |
|
|
pop_prompt ();
|
| 368 |
|
|
}
|
| 369 |
|
|
}
|
| 370 |
|
|
}
|
| 371 |
|
|
|
| 372 |
|
|
/* Pushes a new prompt on the prompt stack. Each prompt has three
|
| 373 |
|
|
parts: prefix, prompt, suffix. Usually prefix and suffix are empty
|
| 374 |
|
|
strings, except when the annotation level is 2. Memory is allocated
|
| 375 |
|
|
within xstrdup for the new prompt. */
|
| 376 |
|
|
void
|
| 377 |
|
|
push_prompt (char *prefix, char *prompt, char *suffix)
|
| 378 |
|
|
{
|
| 379 |
|
|
the_prompts.top++;
|
| 380 |
|
|
PREFIX (0) = xstrdup (prefix);
|
| 381 |
|
|
|
| 382 |
|
|
/* Note that this function is used by the set annotate 2
|
| 383 |
|
|
command. This is why we take care of saving the old prompt
|
| 384 |
|
|
in case a new one is not specified. */
|
| 385 |
|
|
if (prompt)
|
| 386 |
|
|
PROMPT (0) = xstrdup (prompt);
|
| 387 |
|
|
else
|
| 388 |
|
|
PROMPT (0) = xstrdup (PROMPT (-1));
|
| 389 |
|
|
|
| 390 |
|
|
SUFFIX (0) = xstrdup (suffix);
|
| 391 |
|
|
}
|
| 392 |
|
|
|
| 393 |
|
|
/* Pops the top of the prompt stack, and frees the memory allocated for it. */
|
| 394 |
|
|
void
|
| 395 |
|
|
pop_prompt (void)
|
| 396 |
|
|
{
|
| 397 |
|
|
/* If we are not during a 'synchronous' execution command, in which
|
| 398 |
|
|
case, the top prompt would be empty. */
|
| 399 |
|
|
if (strcmp (PROMPT (0), ""))
|
| 400 |
|
|
/* This is for the case in which the prompt is set while the
|
| 401 |
|
|
annotation level is 2. The top prompt will be changed, but when
|
| 402 |
|
|
we return to annotation level < 2, we want that new prompt to be
|
| 403 |
|
|
in effect, until the user does another 'set prompt'. */
|
| 404 |
|
|
if (strcmp (PROMPT (0), PROMPT (-1)))
|
| 405 |
|
|
{
|
| 406 |
|
|
xfree (PROMPT (-1));
|
| 407 |
|
|
PROMPT (-1) = xstrdup (PROMPT (0));
|
| 408 |
|
|
}
|
| 409 |
|
|
|
| 410 |
|
|
xfree (PREFIX (0));
|
| 411 |
|
|
xfree (PROMPT (0));
|
| 412 |
|
|
xfree (SUFFIX (0));
|
| 413 |
|
|
the_prompts.top--;
|
| 414 |
|
|
}
|
| 415 |
|
|
|
| 416 |
|
|
/* When there is an event ready on the stdin file desriptor, instead
|
| 417 |
|
|
of calling readline directly throught the callback function, or
|
| 418 |
|
|
instead of calling gdb_readline2, give gdb a chance to detect
|
| 419 |
|
|
errors and do something. */
|
| 420 |
|
|
void
|
| 421 |
|
|
stdin_event_handler (int error, gdb_client_data client_data)
|
| 422 |
|
|
{
|
| 423 |
|
|
if (error)
|
| 424 |
|
|
{
|
| 425 |
|
|
printf_unfiltered (_("error detected on stdin\n"));
|
| 426 |
|
|
delete_file_handler (input_fd);
|
| 427 |
|
|
discard_all_continuations ();
|
| 428 |
|
|
discard_all_intermediate_continuations ();
|
| 429 |
|
|
/* If stdin died, we may as well kill gdb. */
|
| 430 |
|
|
quit_command ((char *) 0, stdin == instream);
|
| 431 |
|
|
}
|
| 432 |
|
|
else
|
| 433 |
|
|
(*call_readline) (client_data);
|
| 434 |
|
|
}
|
| 435 |
|
|
|
| 436 |
|
|
/* Re-enable stdin after the end of an execution command in
|
| 437 |
|
|
synchronous mode, or after an error from the target, and we aborted
|
| 438 |
|
|
the exec operation. */
|
| 439 |
|
|
|
| 440 |
|
|
void
|
| 441 |
|
|
async_enable_stdin (void)
|
| 442 |
|
|
{
|
| 443 |
|
|
if (sync_execution)
|
| 444 |
|
|
{
|
| 445 |
|
|
/* See NOTE in async_disable_stdin() */
|
| 446 |
|
|
/* FIXME: cagney/1999-09-27: Call this before clearing
|
| 447 |
|
|
sync_execution. Current target_terminal_ours() implementations
|
| 448 |
|
|
check for sync_execution before switching the terminal. */
|
| 449 |
|
|
target_terminal_ours ();
|
| 450 |
|
|
pop_prompt ();
|
| 451 |
|
|
sync_execution = 0;
|
| 452 |
|
|
}
|
| 453 |
|
|
}
|
| 454 |
|
|
|
| 455 |
|
|
/* Disable reads from stdin (the console) marking the command as
|
| 456 |
|
|
synchronous. */
|
| 457 |
|
|
|
| 458 |
|
|
void
|
| 459 |
|
|
async_disable_stdin (void)
|
| 460 |
|
|
{
|
| 461 |
|
|
if (!sync_execution)
|
| 462 |
|
|
{
|
| 463 |
|
|
sync_execution = 1;
|
| 464 |
|
|
push_prompt ("", "", "");
|
| 465 |
|
|
}
|
| 466 |
|
|
}
|
| 467 |
|
|
|
| 468 |
|
|
|
| 469 |
|
|
/* Handles a gdb command. This function is called by
|
| 470 |
|
|
command_line_handler, which has processed one or more input lines
|
| 471 |
|
|
into COMMAND. */
|
| 472 |
|
|
/* NOTE: 1999-04-30 This is the asynchronous version of the command_loop
|
| 473 |
|
|
function. The command_loop function will be obsolete when we
|
| 474 |
|
|
switch to use the event loop at every execution of gdb. */
|
| 475 |
|
|
static void
|
| 476 |
|
|
command_handler (char *command)
|
| 477 |
|
|
{
|
| 478 |
|
|
int stdin_is_tty = ISATTY (stdin);
|
| 479 |
|
|
long time_at_cmd_start;
|
| 480 |
|
|
#ifdef HAVE_SBRK
|
| 481 |
|
|
long space_at_cmd_start = 0;
|
| 482 |
|
|
#endif
|
| 483 |
|
|
extern int display_time;
|
| 484 |
|
|
extern int display_space;
|
| 485 |
|
|
|
| 486 |
|
|
quit_flag = 0;
|
| 487 |
|
|
if (instream == stdin && stdin_is_tty)
|
| 488 |
|
|
reinitialize_more_filter ();
|
| 489 |
|
|
|
| 490 |
|
|
/* If readline returned a NULL command, it means that the
|
| 491 |
|
|
connection with the terminal is gone. This happens at the
|
| 492 |
|
|
end of a testsuite run, after Expect has hung up
|
| 493 |
|
|
but GDB is still alive. In such a case, we just quit gdb
|
| 494 |
|
|
killing the inferior program too. */
|
| 495 |
|
|
if (command == 0)
|
| 496 |
|
|
{
|
| 497 |
|
|
printf_unfiltered ("quit\n");
|
| 498 |
|
|
execute_command ("quit", stdin == instream);
|
| 499 |
|
|
}
|
| 500 |
|
|
|
| 501 |
|
|
time_at_cmd_start = get_run_time ();
|
| 502 |
|
|
|
| 503 |
|
|
if (display_space)
|
| 504 |
|
|
{
|
| 505 |
|
|
#ifdef HAVE_SBRK
|
| 506 |
|
|
char *lim = (char *) sbrk (0);
|
| 507 |
|
|
space_at_cmd_start = lim - lim_at_start;
|
| 508 |
|
|
#endif
|
| 509 |
|
|
}
|
| 510 |
|
|
|
| 511 |
|
|
execute_command (command, instream == stdin);
|
| 512 |
|
|
|
| 513 |
|
|
/* Do any commands attached to breakpoint we stopped at. */
|
| 514 |
|
|
bpstat_do_actions ();
|
| 515 |
|
|
|
| 516 |
|
|
if (display_time)
|
| 517 |
|
|
{
|
| 518 |
|
|
long cmd_time = get_run_time () - time_at_cmd_start;
|
| 519 |
|
|
|
| 520 |
|
|
printf_unfiltered (_("Command execution time: %ld.%06ld\n"),
|
| 521 |
|
|
cmd_time / 1000000, cmd_time % 1000000);
|
| 522 |
|
|
}
|
| 523 |
|
|
|
| 524 |
|
|
if (display_space)
|
| 525 |
|
|
{
|
| 526 |
|
|
#ifdef HAVE_SBRK
|
| 527 |
|
|
char *lim = (char *) sbrk (0);
|
| 528 |
|
|
long space_now = lim - lim_at_start;
|
| 529 |
|
|
long space_diff = space_now - space_at_cmd_start;
|
| 530 |
|
|
|
| 531 |
|
|
printf_unfiltered (_("Space used: %ld (%c%ld for this command)\n"),
|
| 532 |
|
|
space_now,
|
| 533 |
|
|
(space_diff >= 0 ? '+' : '-'),
|
| 534 |
|
|
space_diff);
|
| 535 |
|
|
#endif
|
| 536 |
|
|
}
|
| 537 |
|
|
}
|
| 538 |
|
|
|
| 539 |
|
|
/* Handle a complete line of input. This is called by the callback
|
| 540 |
|
|
mechanism within the readline library. Deal with incomplete commands
|
| 541 |
|
|
as well, by saving the partial input in a global buffer. */
|
| 542 |
|
|
|
| 543 |
|
|
/* NOTE: 1999-04-30 This is the asynchronous version of the
|
| 544 |
|
|
command_line_input function. command_line_input will become
|
| 545 |
|
|
obsolete once we use the event loop as the default mechanism in
|
| 546 |
|
|
GDB. */
|
| 547 |
|
|
static void
|
| 548 |
|
|
command_line_handler (char *rl)
|
| 549 |
|
|
{
|
| 550 |
|
|
static char *linebuffer = 0;
|
| 551 |
|
|
static unsigned linelength = 0;
|
| 552 |
|
|
char *p;
|
| 553 |
|
|
char *p1;
|
| 554 |
|
|
extern char *line;
|
| 555 |
|
|
extern int linesize;
|
| 556 |
|
|
char *nline;
|
| 557 |
|
|
char got_eof = 0;
|
| 558 |
|
|
|
| 559 |
|
|
|
| 560 |
|
|
int repeat = (instream == stdin);
|
| 561 |
|
|
|
| 562 |
|
|
if (annotation_level > 1 && instream == stdin)
|
| 563 |
|
|
{
|
| 564 |
|
|
printf_unfiltered (("\n\032\032post-"));
|
| 565 |
|
|
puts_unfiltered (async_annotation_suffix);
|
| 566 |
|
|
printf_unfiltered (("\n"));
|
| 567 |
|
|
}
|
| 568 |
|
|
|
| 569 |
|
|
if (linebuffer == 0)
|
| 570 |
|
|
{
|
| 571 |
|
|
linelength = 80;
|
| 572 |
|
|
linebuffer = (char *) xmalloc (linelength);
|
| 573 |
|
|
}
|
| 574 |
|
|
|
| 575 |
|
|
p = linebuffer;
|
| 576 |
|
|
|
| 577 |
|
|
if (more_to_come)
|
| 578 |
|
|
{
|
| 579 |
|
|
strcpy (linebuffer, readline_input_state.linebuffer);
|
| 580 |
|
|
p = readline_input_state.linebuffer_ptr;
|
| 581 |
|
|
xfree (readline_input_state.linebuffer);
|
| 582 |
|
|
more_to_come = 0;
|
| 583 |
|
|
pop_prompt ();
|
| 584 |
|
|
}
|
| 585 |
|
|
|
| 586 |
|
|
#ifdef STOP_SIGNAL
|
| 587 |
|
|
if (job_control)
|
| 588 |
|
|
signal (STOP_SIGNAL, handle_stop_sig);
|
| 589 |
|
|
#endif
|
| 590 |
|
|
|
| 591 |
|
|
/* Make sure that all output has been output. Some machines may let
|
| 592 |
|
|
you get away with leaving out some of the gdb_flush, but not all. */
|
| 593 |
|
|
wrap_here ("");
|
| 594 |
|
|
gdb_flush (gdb_stdout);
|
| 595 |
|
|
gdb_flush (gdb_stderr);
|
| 596 |
|
|
|
| 597 |
|
|
if (source_file_name != NULL)
|
| 598 |
|
|
++source_line_number;
|
| 599 |
|
|
|
| 600 |
|
|
/* If we are in this case, then command_handler will call quit
|
| 601 |
|
|
and exit from gdb. */
|
| 602 |
|
|
if (!rl || rl == (char *) EOF)
|
| 603 |
|
|
{
|
| 604 |
|
|
got_eof = 1;
|
| 605 |
|
|
command_handler (0);
|
| 606 |
|
|
return; /* Lint. */
|
| 607 |
|
|
}
|
| 608 |
|
|
if (strlen (rl) + 1 + (p - linebuffer) > linelength)
|
| 609 |
|
|
{
|
| 610 |
|
|
linelength = strlen (rl) + 1 + (p - linebuffer);
|
| 611 |
|
|
nline = (char *) xrealloc (linebuffer, linelength);
|
| 612 |
|
|
p += nline - linebuffer;
|
| 613 |
|
|
linebuffer = nline;
|
| 614 |
|
|
}
|
| 615 |
|
|
p1 = rl;
|
| 616 |
|
|
/* Copy line. Don't copy null at end. (Leaves line alone
|
| 617 |
|
|
if this was just a newline) */
|
| 618 |
|
|
while (*p1)
|
| 619 |
|
|
*p++ = *p1++;
|
| 620 |
|
|
|
| 621 |
|
|
xfree (rl); /* Allocated in readline. */
|
| 622 |
|
|
|
| 623 |
|
|
if (p > linebuffer && *(p - 1) == '\\')
|
| 624 |
|
|
{
|
| 625 |
|
|
*p = '\0';
|
| 626 |
|
|
p--; /* Put on top of '\'. */
|
| 627 |
|
|
|
| 628 |
|
|
readline_input_state.linebuffer = xstrdup (linebuffer);
|
| 629 |
|
|
readline_input_state.linebuffer_ptr = p;
|
| 630 |
|
|
|
| 631 |
|
|
/* We will not invoke a execute_command if there is more
|
| 632 |
|
|
input expected to complete the command. So, we need to
|
| 633 |
|
|
print an empty prompt here. */
|
| 634 |
|
|
more_to_come = 1;
|
| 635 |
|
|
push_prompt ("", "", "");
|
| 636 |
|
|
display_gdb_prompt (0);
|
| 637 |
|
|
return;
|
| 638 |
|
|
}
|
| 639 |
|
|
|
| 640 |
|
|
#ifdef STOP_SIGNAL
|
| 641 |
|
|
if (job_control)
|
| 642 |
|
|
signal (STOP_SIGNAL, SIG_DFL);
|
| 643 |
|
|
#endif
|
| 644 |
|
|
|
| 645 |
|
|
#define SERVER_COMMAND_LENGTH 7
|
| 646 |
|
|
server_command =
|
| 647 |
|
|
(p - linebuffer > SERVER_COMMAND_LENGTH)
|
| 648 |
|
|
&& strncmp (linebuffer, "server ", SERVER_COMMAND_LENGTH) == 0;
|
| 649 |
|
|
if (server_command)
|
| 650 |
|
|
{
|
| 651 |
|
|
/* Note that we don't set `line'. Between this and the check in
|
| 652 |
|
|
dont_repeat, this insures that repeating will still do the
|
| 653 |
|
|
right thing. */
|
| 654 |
|
|
*p = '\0';
|
| 655 |
|
|
command_handler (linebuffer + SERVER_COMMAND_LENGTH);
|
| 656 |
|
|
display_gdb_prompt (0);
|
| 657 |
|
|
return;
|
| 658 |
|
|
}
|
| 659 |
|
|
|
| 660 |
|
|
/* Do history expansion if that is wished. */
|
| 661 |
|
|
if (history_expansion_p && instream == stdin
|
| 662 |
|
|
&& ISATTY (instream))
|
| 663 |
|
|
{
|
| 664 |
|
|
char *history_value;
|
| 665 |
|
|
int expanded;
|
| 666 |
|
|
|
| 667 |
|
|
*p = '\0'; /* Insert null now. */
|
| 668 |
|
|
expanded = history_expand (linebuffer, &history_value);
|
| 669 |
|
|
if (expanded)
|
| 670 |
|
|
{
|
| 671 |
|
|
/* Print the changes. */
|
| 672 |
|
|
printf_unfiltered ("%s\n", history_value);
|
| 673 |
|
|
|
| 674 |
|
|
/* If there was an error, call this function again. */
|
| 675 |
|
|
if (expanded < 0)
|
| 676 |
|
|
{
|
| 677 |
|
|
xfree (history_value);
|
| 678 |
|
|
return;
|
| 679 |
|
|
}
|
| 680 |
|
|
if (strlen (history_value) > linelength)
|
| 681 |
|
|
{
|
| 682 |
|
|
linelength = strlen (history_value) + 1;
|
| 683 |
|
|
linebuffer = (char *) xrealloc (linebuffer, linelength);
|
| 684 |
|
|
}
|
| 685 |
|
|
strcpy (linebuffer, history_value);
|
| 686 |
|
|
p = linebuffer + strlen (linebuffer);
|
| 687 |
|
|
}
|
| 688 |
|
|
xfree (history_value);
|
| 689 |
|
|
}
|
| 690 |
|
|
|
| 691 |
|
|
/* If we just got an empty line, and that is supposed
|
| 692 |
|
|
to repeat the previous command, return the value in the
|
| 693 |
|
|
global buffer. */
|
| 694 |
|
|
if (repeat && p == linebuffer && *p != '\\')
|
| 695 |
|
|
{
|
| 696 |
|
|
command_handler (line);
|
| 697 |
|
|
display_gdb_prompt (0);
|
| 698 |
|
|
return;
|
| 699 |
|
|
}
|
| 700 |
|
|
|
| 701 |
|
|
for (p1 = linebuffer; *p1 == ' ' || *p1 == '\t'; p1++);
|
| 702 |
|
|
if (repeat && !*p1)
|
| 703 |
|
|
{
|
| 704 |
|
|
command_handler (line);
|
| 705 |
|
|
display_gdb_prompt (0);
|
| 706 |
|
|
return;
|
| 707 |
|
|
}
|
| 708 |
|
|
|
| 709 |
|
|
*p = 0;
|
| 710 |
|
|
|
| 711 |
|
|
/* Add line to history if appropriate. */
|
| 712 |
|
|
if (instream == stdin
|
| 713 |
|
|
&& ISATTY (stdin) && *linebuffer)
|
| 714 |
|
|
add_history (linebuffer);
|
| 715 |
|
|
|
| 716 |
|
|
/* Note: lines consisting solely of comments are added to the command
|
| 717 |
|
|
history. This is useful when you type a command, and then
|
| 718 |
|
|
realize you don't want to execute it quite yet. You can comment
|
| 719 |
|
|
out the command and then later fetch it from the value history
|
| 720 |
|
|
and remove the '#'. The kill ring is probably better, but some
|
| 721 |
|
|
people are in the habit of commenting things out. */
|
| 722 |
|
|
if (*p1 == '#')
|
| 723 |
|
|
*p1 = '\0'; /* Found a comment. */
|
| 724 |
|
|
|
| 725 |
|
|
/* Save into global buffer if appropriate. */
|
| 726 |
|
|
if (repeat)
|
| 727 |
|
|
{
|
| 728 |
|
|
if (linelength > linesize)
|
| 729 |
|
|
{
|
| 730 |
|
|
line = xrealloc (line, linelength);
|
| 731 |
|
|
linesize = linelength;
|
| 732 |
|
|
}
|
| 733 |
|
|
strcpy (line, linebuffer);
|
| 734 |
|
|
if (!more_to_come)
|
| 735 |
|
|
{
|
| 736 |
|
|
command_handler (line);
|
| 737 |
|
|
display_gdb_prompt (0);
|
| 738 |
|
|
}
|
| 739 |
|
|
return;
|
| 740 |
|
|
}
|
| 741 |
|
|
|
| 742 |
|
|
command_handler (linebuffer);
|
| 743 |
|
|
display_gdb_prompt (0);
|
| 744 |
|
|
return;
|
| 745 |
|
|
}
|
| 746 |
|
|
|
| 747 |
|
|
/* Does reading of input from terminal w/o the editing features
|
| 748 |
|
|
provided by the readline library. */
|
| 749 |
|
|
|
| 750 |
|
|
/* NOTE: 1999-04-30 Asynchronous version of gdb_readline. gdb_readline
|
| 751 |
|
|
will become obsolete when the event loop is made the default
|
| 752 |
|
|
execution for gdb. */
|
| 753 |
|
|
void
|
| 754 |
|
|
gdb_readline2 (gdb_client_data client_data)
|
| 755 |
|
|
{
|
| 756 |
|
|
int c;
|
| 757 |
|
|
char *result;
|
| 758 |
|
|
int input_index = 0;
|
| 759 |
|
|
int result_size = 80;
|
| 760 |
|
|
static int done_once = 0;
|
| 761 |
|
|
|
| 762 |
|
|
/* Unbuffer the input stream, so that, later on, the calls to fgetc
|
| 763 |
|
|
fetch only one char at the time from the stream. The fgetc's will
|
| 764 |
|
|
get up to the first newline, but there may be more chars in the
|
| 765 |
|
|
stream after '\n'. If we buffer the input and fgetc drains the
|
| 766 |
|
|
stream, getting stuff beyond the newline as well, a select, done
|
| 767 |
|
|
afterwards will not trigger. */
|
| 768 |
|
|
if (!done_once && !ISATTY (instream))
|
| 769 |
|
|
{
|
| 770 |
|
|
setbuf (instream, NULL);
|
| 771 |
|
|
done_once = 1;
|
| 772 |
|
|
}
|
| 773 |
|
|
|
| 774 |
|
|
result = (char *) xmalloc (result_size);
|
| 775 |
|
|
|
| 776 |
|
|
/* We still need the while loop here, even though it would seem
|
| 777 |
|
|
obvious to invoke gdb_readline2 at every character entered. If
|
| 778 |
|
|
not using the readline library, the terminal is in cooked mode,
|
| 779 |
|
|
which sends the characters all at once. Poll will notice that the
|
| 780 |
|
|
input fd has changed state only after enter is pressed. At this
|
| 781 |
|
|
point we still need to fetch all the chars entered. */
|
| 782 |
|
|
|
| 783 |
|
|
while (1)
|
| 784 |
|
|
{
|
| 785 |
|
|
/* Read from stdin if we are executing a user defined command.
|
| 786 |
|
|
This is the right thing for prompt_for_continue, at least. */
|
| 787 |
|
|
c = fgetc (instream ? instream : stdin);
|
| 788 |
|
|
|
| 789 |
|
|
if (c == EOF)
|
| 790 |
|
|
{
|
| 791 |
|
|
if (input_index > 0)
|
| 792 |
|
|
/* The last line does not end with a newline. Return it, and
|
| 793 |
|
|
if we are called again fgetc will still return EOF and
|
| 794 |
|
|
we'll return NULL then. */
|
| 795 |
|
|
break;
|
| 796 |
|
|
xfree (result);
|
| 797 |
|
|
(*input_handler) (0);
|
| 798 |
|
|
return;
|
| 799 |
|
|
}
|
| 800 |
|
|
|
| 801 |
|
|
if (c == '\n')
|
| 802 |
|
|
{
|
| 803 |
|
|
if (input_index > 0 && result[input_index - 1] == '\r')
|
| 804 |
|
|
input_index--;
|
| 805 |
|
|
break;
|
| 806 |
|
|
}
|
| 807 |
|
|
|
| 808 |
|
|
result[input_index++] = c;
|
| 809 |
|
|
while (input_index >= result_size)
|
| 810 |
|
|
{
|
| 811 |
|
|
result_size *= 2;
|
| 812 |
|
|
result = (char *) xrealloc (result, result_size);
|
| 813 |
|
|
}
|
| 814 |
|
|
}
|
| 815 |
|
|
|
| 816 |
|
|
result[input_index++] = '\0';
|
| 817 |
|
|
(*input_handler) (result);
|
| 818 |
|
|
}
|
| 819 |
|
|
|
| 820 |
|
|
|
| 821 |
|
|
/* Initialization of signal handlers and tokens. There is a function
|
| 822 |
|
|
handle_sig* for each of the signals GDB cares about. Specifically:
|
| 823 |
|
|
SIGINT, SIGFPE, SIGQUIT, SIGTSTP, SIGHUP, SIGWINCH. These
|
| 824 |
|
|
functions are the actual signal handlers associated to the signals
|
| 825 |
|
|
via calls to signal(). The only job for these functions is to
|
| 826 |
|
|
enqueue the appropriate event/procedure with the event loop. Such
|
| 827 |
|
|
procedures are the old signal handlers. The event loop will take
|
| 828 |
|
|
care of invoking the queued procedures to perform the usual tasks
|
| 829 |
|
|
associated with the reception of the signal. */
|
| 830 |
|
|
/* NOTE: 1999-04-30 This is the asynchronous version of init_signals.
|
| 831 |
|
|
init_signals will become obsolete as we move to have to event loop
|
| 832 |
|
|
as the default for gdb. */
|
| 833 |
|
|
void
|
| 834 |
|
|
async_init_signals (void)
|
| 835 |
|
|
{
|
| 836 |
|
|
signal (SIGINT, handle_sigint);
|
| 837 |
|
|
sigint_token =
|
| 838 |
|
|
create_async_signal_handler (async_request_quit, NULL);
|
| 839 |
|
|
signal (SIGTERM, handle_sigterm);
|
| 840 |
|
|
|
| 841 |
|
|
/* If SIGTRAP was set to SIG_IGN, then the SIG_IGN will get passed
|
| 842 |
|
|
to the inferior and breakpoints will be ignored. */
|
| 843 |
|
|
#ifdef SIGTRAP
|
| 844 |
|
|
signal (SIGTRAP, SIG_DFL);
|
| 845 |
|
|
#endif
|
| 846 |
|
|
|
| 847 |
|
|
#ifdef SIGQUIT
|
| 848 |
|
|
/* If we initialize SIGQUIT to SIG_IGN, then the SIG_IGN will get
|
| 849 |
|
|
passed to the inferior, which we don't want. It would be
|
| 850 |
|
|
possible to do a "signal (SIGQUIT, SIG_DFL)" after we fork, but
|
| 851 |
|
|
on BSD4.3 systems using vfork, that can affect the
|
| 852 |
|
|
GDB process as well as the inferior (the signal handling tables
|
| 853 |
|
|
might be in memory, shared between the two). Since we establish
|
| 854 |
|
|
a handler for SIGQUIT, when we call exec it will set the signal
|
| 855 |
|
|
to SIG_DFL for us. */
|
| 856 |
|
|
signal (SIGQUIT, handle_sigquit);
|
| 857 |
|
|
sigquit_token =
|
| 858 |
|
|
create_async_signal_handler (async_do_nothing, NULL);
|
| 859 |
|
|
#endif
|
| 860 |
|
|
#ifdef SIGHUP
|
| 861 |
|
|
if (signal (SIGHUP, handle_sighup) != SIG_IGN)
|
| 862 |
|
|
sighup_token =
|
| 863 |
|
|
create_async_signal_handler (async_disconnect, NULL);
|
| 864 |
|
|
else
|
| 865 |
|
|
sighup_token =
|
| 866 |
|
|
create_async_signal_handler (async_do_nothing, NULL);
|
| 867 |
|
|
#endif
|
| 868 |
|
|
signal (SIGFPE, handle_sigfpe);
|
| 869 |
|
|
sigfpe_token =
|
| 870 |
|
|
create_async_signal_handler (async_float_handler, NULL);
|
| 871 |
|
|
|
| 872 |
|
|
#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
|
| 873 |
|
|
signal (SIGWINCH, handle_sigwinch);
|
| 874 |
|
|
sigwinch_token =
|
| 875 |
|
|
create_async_signal_handler (SIGWINCH_HANDLER, NULL);
|
| 876 |
|
|
#endif
|
| 877 |
|
|
#ifdef STOP_SIGNAL
|
| 878 |
|
|
sigtstp_token =
|
| 879 |
|
|
create_async_signal_handler (async_stop_sig, NULL);
|
| 880 |
|
|
#endif
|
| 881 |
|
|
|
| 882 |
|
|
}
|
| 883 |
|
|
|
| 884 |
|
|
void
|
| 885 |
|
|
mark_async_signal_handler_wrapper (void *token)
|
| 886 |
|
|
{
|
| 887 |
|
|
mark_async_signal_handler ((struct async_signal_handler *) token);
|
| 888 |
|
|
}
|
| 889 |
|
|
|
| 890 |
|
|
/* Tell the event loop what to do if SIGINT is received.
|
| 891 |
|
|
See event-signal.c. */
|
| 892 |
|
|
void
|
| 893 |
|
|
handle_sigint (int sig)
|
| 894 |
|
|
{
|
| 895 |
|
|
signal (sig, handle_sigint);
|
| 896 |
|
|
|
| 897 |
|
|
/* We could be running in a loop reading in symfiles or something so
|
| 898 |
|
|
it may be quite a while before we get back to the event loop. So
|
| 899 |
|
|
set quit_flag to 1 here. Then if QUIT is called before we get to
|
| 900 |
|
|
the event loop, we will unwind as expected. */
|
| 901 |
|
|
|
| 902 |
|
|
quit_flag = 1;
|
| 903 |
|
|
|
| 904 |
|
|
/* If immediate_quit is set, we go ahead and process the SIGINT right
|
| 905 |
|
|
away, even if we usually would defer this to the event loop. The
|
| 906 |
|
|
assumption here is that it is safe to process ^C immediately if
|
| 907 |
|
|
immediate_quit is set. If we didn't, SIGINT would be really
|
| 908 |
|
|
processed only the next time through the event loop. To get to
|
| 909 |
|
|
that point, though, the command that we want to interrupt needs to
|
| 910 |
|
|
finish first, which is unacceptable. If immediate quit is not set,
|
| 911 |
|
|
we process SIGINT the next time through the loop, which is fine. */
|
| 912 |
|
|
gdb_call_async_signal_handler (sigint_token, immediate_quit);
|
| 913 |
|
|
}
|
| 914 |
|
|
|
| 915 |
|
|
/* Quit GDB if SIGTERM is received.
|
| 916 |
|
|
GDB would quit anyway, but this way it will clean up properly. */
|
| 917 |
|
|
void
|
| 918 |
|
|
handle_sigterm (int sig)
|
| 919 |
|
|
{
|
| 920 |
|
|
signal (sig, handle_sigterm);
|
| 921 |
|
|
quit_force ((char *) 0, stdin == instream);
|
| 922 |
|
|
}
|
| 923 |
|
|
|
| 924 |
|
|
/* Do the quit. All the checks have been done by the caller. */
|
| 925 |
|
|
void
|
| 926 |
|
|
async_request_quit (gdb_client_data arg)
|
| 927 |
|
|
{
|
| 928 |
|
|
/* If the quit_flag has gotten reset back to 0 by the time we get
|
| 929 |
|
|
back here, that means that an exception was thrown to unwind the
|
| 930 |
|
|
current command before we got back to the event loop. So there
|
| 931 |
|
|
is no reason to call quit again here, unless immediate_quit is
|
| 932 |
|
|
set.*/
|
| 933 |
|
|
|
| 934 |
|
|
if (quit_flag || immediate_quit)
|
| 935 |
|
|
quit ();
|
| 936 |
|
|
}
|
| 937 |
|
|
|
| 938 |
|
|
#ifdef SIGQUIT
|
| 939 |
|
|
/* Tell the event loop what to do if SIGQUIT is received.
|
| 940 |
|
|
See event-signal.c. */
|
| 941 |
|
|
static void
|
| 942 |
|
|
handle_sigquit (int sig)
|
| 943 |
|
|
{
|
| 944 |
|
|
mark_async_signal_handler_wrapper (sigquit_token);
|
| 945 |
|
|
signal (sig, handle_sigquit);
|
| 946 |
|
|
}
|
| 947 |
|
|
#endif
|
| 948 |
|
|
|
| 949 |
|
|
#if defined (SIGQUIT) || defined (SIGHUP)
|
| 950 |
|
|
/* Called by the event loop in response to a SIGQUIT or an
|
| 951 |
|
|
ignored SIGHUP. */
|
| 952 |
|
|
static void
|
| 953 |
|
|
async_do_nothing (gdb_client_data arg)
|
| 954 |
|
|
{
|
| 955 |
|
|
/* Empty function body. */
|
| 956 |
|
|
}
|
| 957 |
|
|
#endif
|
| 958 |
|
|
|
| 959 |
|
|
#ifdef SIGHUP
|
| 960 |
|
|
/* Tell the event loop what to do if SIGHUP is received.
|
| 961 |
|
|
See event-signal.c. */
|
| 962 |
|
|
static void
|
| 963 |
|
|
handle_sighup (int sig)
|
| 964 |
|
|
{
|
| 965 |
|
|
mark_async_signal_handler_wrapper (sighup_token);
|
| 966 |
|
|
signal (sig, handle_sighup);
|
| 967 |
|
|
}
|
| 968 |
|
|
|
| 969 |
|
|
/* Called by the event loop to process a SIGHUP */
|
| 970 |
|
|
static void
|
| 971 |
|
|
async_disconnect (gdb_client_data arg)
|
| 972 |
|
|
{
|
| 973 |
|
|
catch_errors (quit_cover, NULL,
|
| 974 |
|
|
"Could not kill the program being debugged",
|
| 975 |
|
|
RETURN_MASK_ALL);
|
| 976 |
|
|
signal (SIGHUP, SIG_DFL); /*FIXME: ??????????? */
|
| 977 |
|
|
raise (SIGHUP);
|
| 978 |
|
|
}
|
| 979 |
|
|
#endif
|
| 980 |
|
|
|
| 981 |
|
|
#ifdef STOP_SIGNAL
|
| 982 |
|
|
void
|
| 983 |
|
|
handle_stop_sig (int sig)
|
| 984 |
|
|
{
|
| 985 |
|
|
mark_async_signal_handler_wrapper (sigtstp_token);
|
| 986 |
|
|
signal (sig, handle_stop_sig);
|
| 987 |
|
|
}
|
| 988 |
|
|
|
| 989 |
|
|
static void
|
| 990 |
|
|
async_stop_sig (gdb_client_data arg)
|
| 991 |
|
|
{
|
| 992 |
|
|
char *prompt = get_prompt ();
|
| 993 |
|
|
#if STOP_SIGNAL == SIGTSTP
|
| 994 |
|
|
signal (SIGTSTP, SIG_DFL);
|
| 995 |
|
|
#if HAVE_SIGPROCMASK
|
| 996 |
|
|
{
|
| 997 |
|
|
sigset_t zero;
|
| 998 |
|
|
|
| 999 |
|
|
sigemptyset (&zero);
|
| 1000 |
|
|
sigprocmask (SIG_SETMASK, &zero, 0);
|
| 1001 |
|
|
}
|
| 1002 |
|
|
#elif HAVE_SIGSETMASK
|
| 1003 |
|
|
sigsetmask (0);
|
| 1004 |
|
|
#endif
|
| 1005 |
|
|
raise (SIGTSTP);
|
| 1006 |
|
|
signal (SIGTSTP, handle_stop_sig);
|
| 1007 |
|
|
#else
|
| 1008 |
|
|
signal (STOP_SIGNAL, handle_stop_sig);
|
| 1009 |
|
|
#endif
|
| 1010 |
|
|
printf_unfiltered ("%s", prompt);
|
| 1011 |
|
|
gdb_flush (gdb_stdout);
|
| 1012 |
|
|
|
| 1013 |
|
|
/* Forget about any previous command -- null line now will do nothing. */
|
| 1014 |
|
|
dont_repeat ();
|
| 1015 |
|
|
}
|
| 1016 |
|
|
#endif /* STOP_SIGNAL */
|
| 1017 |
|
|
|
| 1018 |
|
|
/* Tell the event loop what to do if SIGFPE is received.
|
| 1019 |
|
|
See event-signal.c. */
|
| 1020 |
|
|
static void
|
| 1021 |
|
|
handle_sigfpe (int sig)
|
| 1022 |
|
|
{
|
| 1023 |
|
|
mark_async_signal_handler_wrapper (sigfpe_token);
|
| 1024 |
|
|
signal (sig, handle_sigfpe);
|
| 1025 |
|
|
}
|
| 1026 |
|
|
|
| 1027 |
|
|
/* Event loop will call this functin to process a SIGFPE. */
|
| 1028 |
|
|
static void
|
| 1029 |
|
|
async_float_handler (gdb_client_data arg)
|
| 1030 |
|
|
{
|
| 1031 |
|
|
/* This message is based on ANSI C, section 4.7. Note that integer
|
| 1032 |
|
|
divide by zero causes this, so "float" is a misnomer. */
|
| 1033 |
|
|
error (_("Erroneous arithmetic operation."));
|
| 1034 |
|
|
}
|
| 1035 |
|
|
|
| 1036 |
|
|
/* Tell the event loop what to do if SIGWINCH is received.
|
| 1037 |
|
|
See event-signal.c. */
|
| 1038 |
|
|
#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
|
| 1039 |
|
|
static void
|
| 1040 |
|
|
handle_sigwinch (int sig)
|
| 1041 |
|
|
{
|
| 1042 |
|
|
mark_async_signal_handler_wrapper (sigwinch_token);
|
| 1043 |
|
|
signal (sig, handle_sigwinch);
|
| 1044 |
|
|
}
|
| 1045 |
|
|
#endif
|
| 1046 |
|
|
|
| 1047 |
|
|
|
| 1048 |
|
|
/* Called by do_setshow_command. */
|
| 1049 |
|
|
void
|
| 1050 |
|
|
set_async_editing_command (char *args, int from_tty, struct cmd_list_element *c)
|
| 1051 |
|
|
{
|
| 1052 |
|
|
change_line_handler ();
|
| 1053 |
|
|
}
|
| 1054 |
|
|
|
| 1055 |
|
|
/* Called by do_setshow_command. */
|
| 1056 |
|
|
void
|
| 1057 |
|
|
set_async_annotation_level (char *args, int from_tty, struct cmd_list_element *c)
|
| 1058 |
|
|
{
|
| 1059 |
|
|
change_annotation_level ();
|
| 1060 |
|
|
}
|
| 1061 |
|
|
|
| 1062 |
|
|
/* Called by do_setshow_command. */
|
| 1063 |
|
|
void
|
| 1064 |
|
|
set_async_prompt (char *args, int from_tty, struct cmd_list_element *c)
|
| 1065 |
|
|
{
|
| 1066 |
|
|
PROMPT (0) = xstrdup (new_async_prompt);
|
| 1067 |
|
|
}
|
| 1068 |
|
|
|
| 1069 |
|
|
/* Set things up for readline to be invoked via the alternate
|
| 1070 |
|
|
interface, i.e. via a callback function (rl_callback_read_char),
|
| 1071 |
|
|
and hook up instream to the event loop. */
|
| 1072 |
|
|
void
|
| 1073 |
|
|
gdb_setup_readline (void)
|
| 1074 |
|
|
{
|
| 1075 |
|
|
/* This function is a noop for the sync case. The assumption is
|
| 1076 |
|
|
that the sync setup is ALL done in gdb_init, and we would only
|
| 1077 |
|
|
mess it up here. The sync stuff should really go away over
|
| 1078 |
|
|
time. */
|
| 1079 |
|
|
if (!batch_silent)
|
| 1080 |
|
|
gdb_stdout = stdio_fileopen (stdout);
|
| 1081 |
|
|
gdb_stderr = stdio_fileopen (stderr);
|
| 1082 |
|
|
gdb_stdlog = gdb_stderr; /* for moment */
|
| 1083 |
|
|
gdb_stdtarg = gdb_stderr; /* for moment */
|
| 1084 |
|
|
|
| 1085 |
|
|
/* If the input stream is connected to a terminal, turn on
|
| 1086 |
|
|
editing. */
|
| 1087 |
|
|
if (ISATTY (instream))
|
| 1088 |
|
|
{
|
| 1089 |
|
|
/* Tell gdb that we will be using the readline library. This
|
| 1090 |
|
|
could be overwritten by a command in .gdbinit like 'set
|
| 1091 |
|
|
editing on' or 'off'. */
|
| 1092 |
|
|
async_command_editing_p = 1;
|
| 1093 |
|
|
|
| 1094 |
|
|
/* When a character is detected on instream by select or poll,
|
| 1095 |
|
|
readline will be invoked via this callback function. */
|
| 1096 |
|
|
call_readline = rl_callback_read_char_wrapper;
|
| 1097 |
|
|
}
|
| 1098 |
|
|
else
|
| 1099 |
|
|
{
|
| 1100 |
|
|
async_command_editing_p = 0;
|
| 1101 |
|
|
call_readline = gdb_readline2;
|
| 1102 |
|
|
}
|
| 1103 |
|
|
|
| 1104 |
|
|
/* When readline has read an end-of-line character, it passes the
|
| 1105 |
|
|
complete line to gdb for processing. command_line_handler is the
|
| 1106 |
|
|
function that does this. */
|
| 1107 |
|
|
input_handler = command_line_handler;
|
| 1108 |
|
|
|
| 1109 |
|
|
/* Tell readline to use the same input stream that gdb uses. */
|
| 1110 |
|
|
rl_instream = instream;
|
| 1111 |
|
|
|
| 1112 |
|
|
/* Get a file descriptor for the input stream, so that we can
|
| 1113 |
|
|
register it with the event loop. */
|
| 1114 |
|
|
input_fd = fileno (instream);
|
| 1115 |
|
|
|
| 1116 |
|
|
/* Now we need to create the event sources for the input file
|
| 1117 |
|
|
descriptor. */
|
| 1118 |
|
|
/* At this point in time, this is the only event source that we
|
| 1119 |
|
|
register with the even loop. Another source is going to be the
|
| 1120 |
|
|
target program (inferior), but that must be registered only when
|
| 1121 |
|
|
it actually exists (I.e. after we say 'run' or after we connect
|
| 1122 |
|
|
to a remote target. */
|
| 1123 |
|
|
add_file_handler (input_fd, stdin_event_handler, 0);
|
| 1124 |
|
|
}
|
| 1125 |
|
|
|
| 1126 |
|
|
/* Disable command input through the standard CLI channels. Used in
|
| 1127 |
|
|
the suspend proc for interpreters that use the standard gdb readline
|
| 1128 |
|
|
interface, like the cli & the mi. */
|
| 1129 |
|
|
void
|
| 1130 |
|
|
gdb_disable_readline (void)
|
| 1131 |
|
|
{
|
| 1132 |
|
|
/* FIXME - It is too heavyweight to delete and remake these every
|
| 1133 |
|
|
time you run an interpreter that needs readline. It is probably
|
| 1134 |
|
|
better to have the interpreters cache these, which in turn means
|
| 1135 |
|
|
that this needs to be moved into interpreter specific code. */
|
| 1136 |
|
|
|
| 1137 |
|
|
#if 0
|
| 1138 |
|
|
ui_file_delete (gdb_stdout);
|
| 1139 |
|
|
ui_file_delete (gdb_stderr);
|
| 1140 |
|
|
gdb_stdlog = NULL;
|
| 1141 |
|
|
gdb_stdtarg = NULL;
|
| 1142 |
|
|
#endif
|
| 1143 |
|
|
|
| 1144 |
|
|
rl_callback_handler_remove ();
|
| 1145 |
|
|
delete_file_handler (input_fd);
|
| 1146 |
|
|
}
|