OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [event-top.c] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.