Upgrade GDB from 7.0 and 7.2 on the vendor branch
[dragonfly.git] / contrib / gdb-7 / gdb / event-loop.c
1 /* Event loop machinery for GDB, the GNU debugger.
2    Copyright (C) 1999, 2000, 2001, 2002, 2005, 2006, 2007, 2008, 2009, 2010
3    Free Software Foundation, Inc.
4    Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
20
21 #include "defs.h"
22 #include "event-loop.h"
23 #include "event-top.h"
24
25 #ifdef HAVE_POLL
26 #if defined (HAVE_POLL_H)
27 #include <poll.h>
28 #elif defined (HAVE_SYS_POLL_H)
29 #include <sys/poll.h>
30 #endif
31 #endif
32
33 #include <sys/types.h>
34 #include "gdb_string.h"
35 #include <errno.h>
36 #include <sys/time.h>
37 #include "exceptions.h"
38 #include "gdb_assert.h"
39 #include "gdb_select.h"
40
41 /* Tell create_file_handler what events we are interested in. 
42    This is used by the select version of the event loop. */
43
44 #define GDB_READABLE    (1<<1)
45 #define GDB_WRITABLE    (1<<2)
46 #define GDB_EXCEPTION   (1<<3)
47
48 /* Data point to pass to the event handler.  */
49 typedef union event_data
50 {
51   void *ptr;
52   int integer;
53 } event_data;
54
55 typedef struct gdb_event gdb_event;
56 typedef void (event_handler_func) (event_data);
57
58 /* Event for the GDB event system.  Events are queued by calling
59    async_queue_event and serviced later on by gdb_do_one_event. An
60    event can be, for instance, a file descriptor becoming ready to be
61    read.  Servicing an event simply means that the procedure PROC will
62    be called.  We have 2 queues, one for file handlers that we listen
63    to in the event loop, and one for the file handlers+events that are
64    ready. The procedure PROC associated with each event is dependant
65    of the event source.  In the case of monitored file descriptors, it
66    is always the same (handle_file_event).  Its duty is to invoke the
67    handler associated with the file descriptor whose state change
68    generated the event, plus doing other cleanups and such.  In the
69    case of async signal handlers, it is
70    invoke_async_signal_handler.  */
71
72 struct gdb_event
73   {
74     /* Procedure to call to service this event.  */
75     event_handler_func *proc;
76
77     /* Data to pass to the event handler.  */
78     event_data data;
79
80     /* Next in list of events or NULL.  */
81     struct gdb_event *next_event;
82   };
83
84 /* Information about each file descriptor we register with the event
85    loop. */
86
87 typedef struct file_handler
88   {
89     int fd;                     /* File descriptor. */
90     int mask;                   /* Events we want to monitor: POLLIN, etc. */
91     int ready_mask;             /* Events that have been seen since
92                                    the last time. */
93     handler_func *proc;         /* Procedure to call when fd is ready. */
94     gdb_client_data client_data;        /* Argument to pass to proc. */
95     int error;                  /* Was an error detected on this fd? */
96     struct file_handler *next_file;     /* Next registered file descriptor. */
97   }
98 file_handler;
99
100 /* PROC is a function to be invoked when the READY flag is set. This
101    happens when there has been a signal and the corresponding signal
102    handler has 'triggered' this async_signal_handler for
103    execution. The actual work to be done in response to a signal will
104    be carried out by PROC at a later time, within process_event. This
105    provides a deferred execution of signal handlers.
106    Async_init_signals takes care of setting up such an
107    async_signal_handler for each interesting signal. */
108 typedef struct async_signal_handler
109   {
110     int ready;                  /* If ready, call this handler from the main event loop, 
111                                    using invoke_async_handler. */
112     struct async_signal_handler *next_handler;  /* Ptr to next handler */
113     sig_handler_func *proc;     /* Function to call to do the work */
114     gdb_client_data client_data;        /* Argument to async_handler_func */
115   }
116 async_signal_handler;
117
118 /* PROC is a function to be invoked when the READY flag is set.  This
119    happens when the event has been marked with
120    MARK_ASYNC_EVENT_HANDLER.  The actual work to be done in response
121    to an event will be carried out by PROC at a later time, within
122    process_event.  This provides a deferred execution of event
123    handlers.  */
124 typedef struct async_event_handler
125   {
126     /* If ready, call this handler from the main event loop, using
127        invoke_event_handler.  */
128     int ready;
129
130     /* Point to next handler.  */
131     struct async_event_handler *next_handler;
132
133     /* Function to call to do the work.  */
134     async_event_handler_func *proc;
135
136     /* Argument to PROC.  */
137     gdb_client_data client_data;
138   }
139 async_event_handler;
140
141
142 /* Event queue:  
143    - the first event in the queue is the head of the queue. 
144    It will be the next to be serviced.
145    - the last event in the queue 
146
147    Events can be inserted at the front of the queue or at the end of
148    the queue.  Events will be extracted from the queue for processing
149    starting from the head.  Therefore, events inserted at the head of
150    the queue will be processed in a last in first out fashion, while
151    those inserted at the tail of the queue will be processed in a first
152    in first out manner.  All the fields are NULL if the queue is
153    empty. */
154
155 static struct
156   {
157     gdb_event *first_event;     /* First pending event */
158     gdb_event *last_event;      /* Last pending event */
159   }
160 event_queue;
161
162 /* Gdb_notifier is just a list of file descriptors gdb is interested in.
163    These are the input file descriptor, and the target file
164    descriptor. We have two flavors of the notifier, one for platforms
165    that have the POLL function, the other for those that don't, and
166    only support SELECT. Each of the elements in the gdb_notifier list is
167    basically a description of what kind of events gdb is interested
168    in, for each fd. */
169
170 /* As of 1999-04-30 only the input file descriptor is registered with the
171    event loop. */
172
173 /* Do we use poll or select ? */
174 #ifdef HAVE_POLL
175 #define USE_POLL 1
176 #else
177 #define USE_POLL 0
178 #endif /* HAVE_POLL */
179
180 static unsigned char use_poll = USE_POLL;
181
182 #ifdef USE_WIN32API
183 #include <windows.h>
184 #include <io.h>
185 #endif
186
187 static struct
188   {
189     /* Ptr to head of file handler list. */
190     file_handler *first_file_handler;
191
192 #ifdef HAVE_POLL
193     /* Ptr to array of pollfd structures. */
194     struct pollfd *poll_fds;
195
196     /* Timeout in milliseconds for calls to poll(). */
197     int poll_timeout;
198 #endif
199
200     /* Masks to be used in the next call to select.
201        Bits are set in response to calls to create_file_handler. */
202     fd_set check_masks[3];
203
204     /* What file descriptors were found ready by select. */
205     fd_set ready_masks[3];
206
207     /* Number of file descriptors to monitor. (for poll) */
208     /* Number of valid bits (highest fd value + 1). (for select) */
209     int num_fds;
210
211     /* Time structure for calls to select(). */
212     struct timeval select_timeout;
213
214     /* Flag to tell whether the timeout should be used. */
215     int timeout_valid;
216   }
217 gdb_notifier;
218
219 /* Structure associated with a timer. PROC will be executed at the
220    first occasion after WHEN. */
221 struct gdb_timer
222   {
223     struct timeval when;
224     int timer_id;
225     struct gdb_timer *next;
226     timer_handler_func *proc;   /* Function to call to do the work */
227     gdb_client_data client_data;        /* Argument to async_handler_func */
228   };
229
230 /* List of currently active timers. It is sorted in order of
231    increasing timers. */
232 static struct
233   {
234     /* Pointer to first in timer list. */
235     struct gdb_timer *first_timer;
236
237     /* Id of the last timer created. */
238     int num_timers;
239   }
240 timer_list;
241
242 /* All the async_signal_handlers gdb is interested in are kept onto
243    this list. */
244 static struct
245   {
246     /* Pointer to first in handler list. */
247     async_signal_handler *first_handler;
248
249     /* Pointer to last in handler list. */
250     async_signal_handler *last_handler;
251   }
252 sighandler_list;
253
254 /* All the async_event_handlers gdb is interested in are kept onto
255    this list. */
256 static struct
257   {
258     /* Pointer to first in handler list. */
259     async_event_handler *first_handler;
260
261     /* Pointer to last in handler list. */
262     async_event_handler *last_handler;
263   }
264 async_event_handler_list;
265
266 static int invoke_async_signal_handlers (void);
267 static void create_file_handler (int fd, int mask, handler_func *proc,
268                                  gdb_client_data client_data);
269 static void handle_file_event (event_data data);
270 static void check_async_event_handlers (void);
271 static int gdb_wait_for_event (int);
272 static void poll_timers (void);
273 \f
274
275 /* Insert an event object into the gdb event queue at 
276    the specified position.
277    POSITION can be head or tail, with values TAIL, HEAD.
278    EVENT_PTR points to the event to be inserted into the queue.
279    The caller must allocate memory for the event. It is freed
280    after the event has ben handled.
281    Events in the queue will be processed head to tail, therefore,
282    events inserted at the head of the queue will be processed
283    as last in first out. Event appended at the tail of the queue
284    will be processed first in first out. */
285 static void
286 async_queue_event (gdb_event * event_ptr, queue_position position)
287 {
288   if (position == TAIL)
289     {
290       /* The event will become the new last_event. */
291
292       event_ptr->next_event = NULL;
293       if (event_queue.first_event == NULL)
294         event_queue.first_event = event_ptr;
295       else
296         event_queue.last_event->next_event = event_ptr;
297       event_queue.last_event = event_ptr;
298     }
299   else if (position == HEAD)
300     {
301       /* The event becomes the new first_event. */
302
303       event_ptr->next_event = event_queue.first_event;
304       if (event_queue.first_event == NULL)
305         event_queue.last_event = event_ptr;
306       event_queue.first_event = event_ptr;
307     }
308 }
309
310 /* Create a generic event, to be enqueued in the event queue for
311    processing.  PROC is the procedure associated to the event.  DATA
312    is passed to PROC upon PROC invocation.  */
313
314 static gdb_event *
315 create_event (event_handler_func proc, event_data data)
316 {
317   gdb_event *event;
318
319   event = xmalloc (sizeof (*event));
320   event->proc = proc;
321   event->data = data;
322
323   return event;
324 }
325
326 /* Create a file event, to be enqueued in the event queue for
327    processing. The procedure associated to this event is always
328    handle_file_event, which will in turn invoke the one that was
329    associated to FD when it was registered with the event loop. */
330 static gdb_event *
331 create_file_event (int fd)
332 {
333   event_data data;
334
335   data.integer = fd;
336   return create_event (handle_file_event, data);
337 }
338
339 /* Process one event.
340    The event can be the next one to be serviced in the event queue,
341    or an asynchronous event handler can be invoked in response to
342    the reception of a signal.
343    If an event was processed (either way), 1 is returned otherwise
344    0 is returned.
345    Scan the queue from head to tail, processing therefore the high
346    priority events first, by invoking the associated event handler
347    procedure. */
348 static int
349 process_event (void)
350 {
351   gdb_event *event_ptr, *prev_ptr;
352   event_handler_func *proc;
353   event_data data;
354
355   /* First let's see if there are any asynchronous event handlers that
356      are ready. These would be the result of invoking any of the
357      signal handlers. */
358
359   if (invoke_async_signal_handlers ())
360     return 1;
361
362   /* Look in the event queue to find an event that is ready
363      to be processed. */
364
365   for (event_ptr = event_queue.first_event; event_ptr != NULL;
366        event_ptr = event_ptr->next_event)
367     {
368       /* Call the handler for the event. */
369
370       proc = event_ptr->proc;
371       data = event_ptr->data;
372
373       /* Let's get rid of the event from the event queue.  We need to
374          do this now because while processing the event, the proc
375          function could end up calling 'error' and therefore jump out
376          to the caller of this function, gdb_do_one_event. In that
377          case, we would have on the event queue an event wich has been
378          processed, but not deleted. */
379
380       if (event_queue.first_event == event_ptr)
381         {
382           event_queue.first_event = event_ptr->next_event;
383           if (event_ptr->next_event == NULL)
384             event_queue.last_event = NULL;
385         }
386       else
387         {
388           prev_ptr = event_queue.first_event;
389           while (prev_ptr->next_event != event_ptr)
390             prev_ptr = prev_ptr->next_event;
391
392           prev_ptr->next_event = event_ptr->next_event;
393           if (event_ptr->next_event == NULL)
394             event_queue.last_event = prev_ptr;
395         }
396       xfree (event_ptr);
397
398       /* Now call the procedure associated with the event. */
399       (*proc) (data);
400       return 1;
401     }
402
403   /* this is the case if there are no event on the event queue. */
404   return 0;
405 }
406
407 /* Process one high level event.  If nothing is ready at this time,
408    wait for something to happen (via gdb_wait_for_event), then process
409    it.  Returns >0 if something was done otherwise returns <0 (this
410    can happen if there are no event sources to wait for).  If an error
411    occurs catch_errors() which calls this function returns zero. */
412
413 int
414 gdb_do_one_event (void *data)
415 {
416   static int event_source_head = 0;
417   const int number_of_sources = 3;
418   int current = 0;
419
420   /* Any events already waiting in the queue?  */
421   if (process_event ())
422     return 1;
423
424   /* To level the fairness across event sources, we poll them in a
425      round-robin fashion.  */
426   for (current = 0; current < number_of_sources; current++)
427     {
428       switch (event_source_head)
429         {
430         case 0:
431           /* Are any timers that are ready? If so, put an event on the
432              queue. */
433           poll_timers ();
434           break;
435         case 1:
436           /* Are there events already waiting to be collected on the
437              monitored file descriptors?  */
438           gdb_wait_for_event (0);
439           break;
440         case 2:
441           /* Are there any asynchronous event handlers ready?  */
442           check_async_event_handlers ();
443           break;
444         }
445
446       event_source_head++;
447       if (event_source_head == number_of_sources)
448         event_source_head = 0;
449     }
450
451   /* Handle any new events collected.  */
452   if (process_event ())
453     return 1;
454
455   /* Block waiting for a new event.  If gdb_wait_for_event returns -1,
456      we should get out because this means that there are no event
457      sources left.  This will make the event loop stop, and the
458      application exit.  */
459
460   if (gdb_wait_for_event (1) < 0)
461     return -1;
462
463   /* Handle any new events occurred while waiting.  */
464   if (process_event ())
465     return 1;
466
467   /* If gdb_wait_for_event has returned 1, it means that one event has
468      been handled.  We break out of the loop.  */
469   return 1;
470 }
471
472 /* Start up the event loop. This is the entry point to the event loop
473    from the command loop. */
474
475 void
476 start_event_loop (void)
477 {
478   /* Loop until there is nothing to do. This is the entry point to the
479      event loop engine. gdb_do_one_event, called via catch_errors()
480      will process one event for each invocation.  It blocks waits for
481      an event and then processes it.  >0 when an event is processed, 0
482      when catch_errors() caught an error and <0 when there are no
483      longer any event sources registered. */
484   while (1)
485     {
486       int gdb_result;
487
488       gdb_result = catch_errors (gdb_do_one_event, 0, "", RETURN_MASK_ALL);
489       if (gdb_result < 0)
490         break;
491
492       /* If we long-jumped out of do_one_event, we probably
493          didn't get around to resetting the prompt, which leaves
494          readline in a messed-up state.  Reset it here. */
495
496       if (gdb_result == 0)
497         {
498           /* If any exception escaped to here, we better enable
499              stdin.  Otherwise, any command that calls async_disable_stdin,
500              and then throws, will leave stdin inoperable.  */
501           async_enable_stdin ();
502           /* FIXME: this should really be a call to a hook that is
503              interface specific, because interfaces can display the
504              prompt in their own way. */
505           display_gdb_prompt (0);
506           /* This call looks bizarre, but it is required.  If the user
507              entered a command that caused an error,
508              after_char_processing_hook won't be called from
509              rl_callback_read_char_wrapper.  Using a cleanup there
510              won't work, since we want this function to be called
511              after a new prompt is printed.  */
512           if (after_char_processing_hook)
513             (*after_char_processing_hook) ();
514           /* Maybe better to set a flag to be checked somewhere as to
515              whether display the prompt or not. */
516         }
517     }
518
519   /* We are done with the event loop. There are no more event sources
520      to listen to.  So we exit GDB. */
521   return;
522 }
523 \f
524
525 /* Wrapper function for create_file_handler, so that the caller
526    doesn't have to know implementation details about the use of poll
527    vs. select. */
528 void
529 add_file_handler (int fd, handler_func * proc, gdb_client_data client_data)
530 {
531 #ifdef HAVE_POLL
532   struct pollfd fds;
533 #endif
534
535   if (use_poll)
536     {
537 #ifdef HAVE_POLL
538       /* Check to see if poll () is usable. If not, we'll switch to
539          use select. This can happen on systems like
540          m68k-motorola-sys, `poll' cannot be used to wait for `stdin'.
541          On m68k-motorola-sysv, tty's are not stream-based and not
542          `poll'able. */
543       fds.fd = fd;
544       fds.events = POLLIN;
545       if (poll (&fds, 1, 0) == 1 && (fds.revents & POLLNVAL))
546         use_poll = 0;
547 #else
548       internal_error (__FILE__, __LINE__,
549                       _("use_poll without HAVE_POLL"));
550 #endif /* HAVE_POLL */
551     }
552   if (use_poll)
553     {
554 #ifdef HAVE_POLL
555       create_file_handler (fd, POLLIN, proc, client_data);
556 #else
557       internal_error (__FILE__, __LINE__,
558                       _("use_poll without HAVE_POLL"));
559 #endif
560     }
561   else
562     create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION, proc, client_data);
563 }
564
565 /* Add a file handler/descriptor to the list of descriptors we are
566    interested in.  
567    FD is the file descriptor for the file/stream to be listened to.  
568    For the poll case, MASK is a combination (OR) of
569    POLLIN, POLLRDNORM, POLLRDBAND, POLLPRI, POLLOUT, POLLWRNORM,
570    POLLWRBAND: these are the events we are interested in. If any of them 
571    occurs, proc should be called.
572    For the select case, MASK is a combination of READABLE, WRITABLE, EXCEPTION.
573    PROC is the procedure that will be called when an event occurs for
574    FD.  CLIENT_DATA is the argument to pass to PROC. */
575 static void
576 create_file_handler (int fd, int mask, handler_func * proc, gdb_client_data client_data)
577 {
578   file_handler *file_ptr;
579
580   /* Do we already have a file handler for this file? (We may be
581      changing its associated procedure). */
582   for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
583        file_ptr = file_ptr->next_file)
584     {
585       if (file_ptr->fd == fd)
586         break;
587     }
588
589   /* It is a new file descriptor. Add it to the list. Otherwise, just
590      change the data associated with it. */
591   if (file_ptr == NULL)
592     {
593       file_ptr = (file_handler *) xmalloc (sizeof (file_handler));
594       file_ptr->fd = fd;
595       file_ptr->ready_mask = 0;
596       file_ptr->next_file = gdb_notifier.first_file_handler;
597       gdb_notifier.first_file_handler = file_ptr;
598
599       if (use_poll)
600         {
601 #ifdef HAVE_POLL
602           gdb_notifier.num_fds++;
603           if (gdb_notifier.poll_fds)
604             gdb_notifier.poll_fds =
605               (struct pollfd *) xrealloc (gdb_notifier.poll_fds,
606                                           (gdb_notifier.num_fds
607                                            * sizeof (struct pollfd)));
608           else
609             gdb_notifier.poll_fds =
610               (struct pollfd *) xmalloc (sizeof (struct pollfd));
611           (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->fd = fd;
612           (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->events = mask;
613           (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->revents = 0;
614 #else
615           internal_error (__FILE__, __LINE__,
616                           _("use_poll without HAVE_POLL"));
617 #endif /* HAVE_POLL */
618         }
619       else
620         {
621           if (mask & GDB_READABLE)
622             FD_SET (fd, &gdb_notifier.check_masks[0]);
623           else
624             FD_CLR (fd, &gdb_notifier.check_masks[0]);
625
626           if (mask & GDB_WRITABLE)
627             FD_SET (fd, &gdb_notifier.check_masks[1]);
628           else
629             FD_CLR (fd, &gdb_notifier.check_masks[1]);
630
631           if (mask & GDB_EXCEPTION)
632             FD_SET (fd, &gdb_notifier.check_masks[2]);
633           else
634             FD_CLR (fd, &gdb_notifier.check_masks[2]);
635
636           if (gdb_notifier.num_fds <= fd)
637             gdb_notifier.num_fds = fd + 1;
638         }
639     }
640
641   file_ptr->proc = proc;
642   file_ptr->client_data = client_data;
643   file_ptr->mask = mask;
644 }
645
646 /* Remove the file descriptor FD from the list of monitored fd's: 
647    i.e. we don't care anymore about events on the FD. */
648 void
649 delete_file_handler (int fd)
650 {
651   file_handler *file_ptr, *prev_ptr = NULL;
652   int i;
653 #ifdef HAVE_POLL
654   int j;
655   struct pollfd *new_poll_fds;
656 #endif
657
658   /* Find the entry for the given file. */
659
660   for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
661        file_ptr = file_ptr->next_file)
662     {
663       if (file_ptr->fd == fd)
664         break;
665     }
666
667   if (file_ptr == NULL)
668     return;
669
670   if (use_poll)
671     {
672 #ifdef HAVE_POLL
673       /* Create a new poll_fds array by copying every fd's information but the
674          one we want to get rid of. */
675
676       new_poll_fds =
677         (struct pollfd *) xmalloc ((gdb_notifier.num_fds - 1) * sizeof (struct pollfd));
678
679       for (i = 0, j = 0; i < gdb_notifier.num_fds; i++)
680         {
681           if ((gdb_notifier.poll_fds + i)->fd != fd)
682             {
683               (new_poll_fds + j)->fd = (gdb_notifier.poll_fds + i)->fd;
684               (new_poll_fds + j)->events = (gdb_notifier.poll_fds + i)->events;
685               (new_poll_fds + j)->revents = (gdb_notifier.poll_fds + i)->revents;
686               j++;
687             }
688         }
689       xfree (gdb_notifier.poll_fds);
690       gdb_notifier.poll_fds = new_poll_fds;
691       gdb_notifier.num_fds--;
692 #else
693       internal_error (__FILE__, __LINE__,
694                       _("use_poll without HAVE_POLL"));
695 #endif /* HAVE_POLL */
696     }
697   else
698     {
699       if (file_ptr->mask & GDB_READABLE)
700         FD_CLR (fd, &gdb_notifier.check_masks[0]);
701       if (file_ptr->mask & GDB_WRITABLE)
702         FD_CLR (fd, &gdb_notifier.check_masks[1]);
703       if (file_ptr->mask & GDB_EXCEPTION)
704         FD_CLR (fd, &gdb_notifier.check_masks[2]);
705
706       /* Find current max fd. */
707
708       if ((fd + 1) == gdb_notifier.num_fds)
709         {
710           gdb_notifier.num_fds--;
711           for (i = gdb_notifier.num_fds; i; i--)
712             {
713               if (FD_ISSET (i - 1, &gdb_notifier.check_masks[0])
714                   || FD_ISSET (i - 1, &gdb_notifier.check_masks[1])
715                   || FD_ISSET (i - 1, &gdb_notifier.check_masks[2]))
716                 break;
717             }
718           gdb_notifier.num_fds = i;
719         }
720     }
721
722   /* Deactivate the file descriptor, by clearing its mask, 
723      so that it will not fire again. */
724
725   file_ptr->mask = 0;
726
727   /* Get rid of the file handler in the file handler list. */
728   if (file_ptr == gdb_notifier.first_file_handler)
729     gdb_notifier.first_file_handler = file_ptr->next_file;
730   else
731     {
732       for (prev_ptr = gdb_notifier.first_file_handler;
733            prev_ptr->next_file != file_ptr;
734            prev_ptr = prev_ptr->next_file)
735         ;
736       prev_ptr->next_file = file_ptr->next_file;
737     }
738   xfree (file_ptr);
739 }
740
741 /* Handle the given event by calling the procedure associated to the
742    corresponding file handler.  Called by process_event indirectly,
743    through event_ptr->proc.  EVENT_FILE_DESC is file descriptor of the
744    event in the front of the event queue. */
745 static void
746 handle_file_event (event_data data)
747 {
748   file_handler *file_ptr;
749   int mask;
750 #ifdef HAVE_POLL
751   int error_mask;
752   int error_mask_returned;
753 #endif
754   int event_file_desc = data.integer;
755
756   /* Search the file handler list to find one that matches the fd in
757      the event. */
758   for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
759        file_ptr = file_ptr->next_file)
760     {
761       if (file_ptr->fd == event_file_desc)
762         {
763           /* With poll, the ready_mask could have any of three events
764              set to 1: POLLHUP, POLLERR, POLLNVAL. These events cannot
765              be used in the requested event mask (events), but they
766              can be returned in the return mask (revents). We need to
767              check for those event too, and add them to the mask which
768              will be passed to the handler. */
769
770           /* See if the desired events (mask) match the received
771              events (ready_mask). */
772
773           if (use_poll)
774             {
775 #ifdef HAVE_POLL
776               error_mask = POLLHUP | POLLERR | POLLNVAL;
777               mask = (file_ptr->ready_mask & file_ptr->mask) |
778                 (file_ptr->ready_mask & error_mask);
779               error_mask_returned = mask & error_mask;
780
781               if (error_mask_returned != 0)
782                 {
783                   /* Work in progress. We may need to tell somebody what
784                      kind of error we had. */
785                   if (error_mask_returned & POLLHUP)
786                     printf_unfiltered (_("Hangup detected on fd %d\n"), file_ptr->fd);
787                   if (error_mask_returned & POLLERR)
788                     printf_unfiltered (_("Error detected on fd %d\n"), file_ptr->fd);
789                   if (error_mask_returned & POLLNVAL)
790                     printf_unfiltered (_("Invalid or non-`poll'able fd %d\n"), file_ptr->fd);
791                   file_ptr->error = 1;
792                 }
793               else
794                 file_ptr->error = 0;
795 #else
796               internal_error (__FILE__, __LINE__,
797                               _("use_poll without HAVE_POLL"));
798 #endif /* HAVE_POLL */
799             }
800           else
801             {
802               if (file_ptr->ready_mask & GDB_EXCEPTION)
803                 {
804                   printf_unfiltered (_("Exception condition detected on fd %d\n"), file_ptr->fd);
805                   file_ptr->error = 1;
806                 }
807               else
808                 file_ptr->error = 0;
809               mask = file_ptr->ready_mask & file_ptr->mask;
810             }
811
812           /* Clear the received events for next time around. */
813           file_ptr->ready_mask = 0;
814
815           /* If there was a match, then call the handler. */
816           if (mask != 0)
817             (*file_ptr->proc) (file_ptr->error, file_ptr->client_data);
818           break;
819         }
820     }
821 }
822
823 /* Called by gdb_do_one_event to wait for new events on the monitored
824    file descriptors.  Queue file events as they are detected by the
825    poll.  If BLOCK and if there are no events, this function will
826    block in the call to poll.  Return -1 if there are no files
827    descriptors to monitor, otherwise return 0. */
828 static int
829 gdb_wait_for_event (int block)
830 {
831   file_handler *file_ptr;
832   gdb_event *file_event_ptr;
833   int num_found = 0;
834   int i;
835
836   /* Make sure all output is done before getting another event. */
837   gdb_flush (gdb_stdout);
838   gdb_flush (gdb_stderr);
839
840   if (gdb_notifier.num_fds == 0)
841     return -1;
842
843   if (use_poll)
844     {
845 #ifdef HAVE_POLL
846       int timeout;
847
848       if (block)
849         timeout = gdb_notifier.timeout_valid ? gdb_notifier.poll_timeout : -1;
850       else
851         timeout = 0;
852
853       num_found = poll (gdb_notifier.poll_fds,
854                         (unsigned long) gdb_notifier.num_fds, timeout);
855
856       /* Don't print anything if we get out of poll because of a
857          signal.  */
858       if (num_found == -1 && errno != EINTR)
859         perror_with_name (("poll"));
860 #else
861       internal_error (__FILE__, __LINE__,
862                       _("use_poll without HAVE_POLL"));
863 #endif /* HAVE_POLL */
864     }
865   else
866     {
867       struct timeval select_timeout;
868       struct timeval *timeout_p;
869
870       if (block)
871         timeout_p = gdb_notifier.timeout_valid
872           ? &gdb_notifier.select_timeout : NULL;
873       else
874         {
875           memset (&select_timeout, 0, sizeof (select_timeout));
876           timeout_p = &select_timeout;
877         }
878
879       gdb_notifier.ready_masks[0] = gdb_notifier.check_masks[0];
880       gdb_notifier.ready_masks[1] = gdb_notifier.check_masks[1];
881       gdb_notifier.ready_masks[2] = gdb_notifier.check_masks[2];
882       num_found = gdb_select (gdb_notifier.num_fds,
883                               &gdb_notifier.ready_masks[0],
884                               &gdb_notifier.ready_masks[1],
885                               &gdb_notifier.ready_masks[2],
886                               timeout_p);
887
888       /* Clear the masks after an error from select. */
889       if (num_found == -1)
890         {
891           FD_ZERO (&gdb_notifier.ready_masks[0]);
892           FD_ZERO (&gdb_notifier.ready_masks[1]);
893           FD_ZERO (&gdb_notifier.ready_masks[2]);
894
895           /* Dont print anything if we got a signal, let gdb handle
896              it.  */
897           if (errno != EINTR)
898             perror_with_name (("select"));
899         }
900     }
901
902   /* Enqueue all detected file events. */
903
904   if (use_poll)
905     {
906 #ifdef HAVE_POLL
907       for (i = 0; (i < gdb_notifier.num_fds) && (num_found > 0); i++)
908         {
909           if ((gdb_notifier.poll_fds + i)->revents)
910             num_found--;
911           else
912             continue;
913
914           for (file_ptr = gdb_notifier.first_file_handler;
915                file_ptr != NULL;
916                file_ptr = file_ptr->next_file)
917             {
918               if (file_ptr->fd == (gdb_notifier.poll_fds + i)->fd)
919                 break;
920             }
921
922           if (file_ptr)
923             {
924               /* Enqueue an event only if this is still a new event for
925                  this fd. */
926               if (file_ptr->ready_mask == 0)
927                 {
928                   file_event_ptr = create_file_event (file_ptr->fd);
929                   async_queue_event (file_event_ptr, TAIL);
930                 }
931               file_ptr->ready_mask = (gdb_notifier.poll_fds + i)->revents;
932             }
933         }
934 #else
935       internal_error (__FILE__, __LINE__,
936                       _("use_poll without HAVE_POLL"));
937 #endif /* HAVE_POLL */
938     }
939   else
940     {
941       for (file_ptr = gdb_notifier.first_file_handler;
942            (file_ptr != NULL) && (num_found > 0);
943            file_ptr = file_ptr->next_file)
944         {
945           int mask = 0;
946
947           if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[0]))
948             mask |= GDB_READABLE;
949           if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[1]))
950             mask |= GDB_WRITABLE;
951           if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[2]))
952             mask |= GDB_EXCEPTION;
953
954           if (!mask)
955             continue;
956           else
957             num_found--;
958
959           /* Enqueue an event only if this is still a new event for
960              this fd. */
961
962           if (file_ptr->ready_mask == 0)
963             {
964               file_event_ptr = create_file_event (file_ptr->fd);
965               async_queue_event (file_event_ptr, TAIL);
966             }
967           file_ptr->ready_mask = mask;
968         }
969     }
970   return 0;
971 }
972 \f
973
974 /* Create an asynchronous handler, allocating memory for it. 
975    Return a pointer to the newly created handler.
976    This pointer will be used to invoke the handler by 
977    invoke_async_signal_handler.
978    PROC is the function to call with CLIENT_DATA argument 
979    whenever the handler is invoked. */
980 async_signal_handler *
981 create_async_signal_handler (sig_handler_func * proc, gdb_client_data client_data)
982 {
983   async_signal_handler *async_handler_ptr;
984
985   async_handler_ptr =
986     (async_signal_handler *) xmalloc (sizeof (async_signal_handler));
987   async_handler_ptr->ready = 0;
988   async_handler_ptr->next_handler = NULL;
989   async_handler_ptr->proc = proc;
990   async_handler_ptr->client_data = client_data;
991   if (sighandler_list.first_handler == NULL)
992     sighandler_list.first_handler = async_handler_ptr;
993   else
994     sighandler_list.last_handler->next_handler = async_handler_ptr;
995   sighandler_list.last_handler = async_handler_ptr;
996   return async_handler_ptr;
997 }
998
999 /* Call the handler from HANDLER immediately.  This function runs
1000    signal handlers when returning to the event loop would be too
1001    slow.  */
1002 void
1003 call_async_signal_handler (struct async_signal_handler *handler)
1004 {
1005   (*handler->proc) (handler->client_data);
1006 }
1007
1008 /* Mark the handler (ASYNC_HANDLER_PTR) as ready. This information will
1009    be used when the handlers are invoked, after we have waited for
1010    some event.  The caller of this function is the interrupt handler
1011    associated with a signal. */
1012 void
1013 mark_async_signal_handler (async_signal_handler * async_handler_ptr)
1014 {
1015   async_handler_ptr->ready = 1;
1016 }
1017
1018 /* Call all the handlers that are ready.  Returns true if any was
1019    indeed ready.  */
1020 static int
1021 invoke_async_signal_handlers (void)
1022 {
1023   async_signal_handler *async_handler_ptr;
1024   int any_ready = 0;
1025
1026   /* Invoke ready handlers.  */
1027
1028   while (1)
1029     {
1030       for (async_handler_ptr = sighandler_list.first_handler;
1031            async_handler_ptr != NULL;
1032            async_handler_ptr = async_handler_ptr->next_handler)
1033         {
1034           if (async_handler_ptr->ready)
1035             break;
1036         }
1037       if (async_handler_ptr == NULL)
1038         break;
1039       any_ready = 1;
1040       async_handler_ptr->ready = 0;
1041       (*async_handler_ptr->proc) (async_handler_ptr->client_data);
1042     }
1043
1044   return any_ready;
1045 }
1046
1047 /* Delete an asynchronous handler (ASYNC_HANDLER_PTR). 
1048    Free the space allocated for it.  */
1049 void
1050 delete_async_signal_handler (async_signal_handler ** async_handler_ptr)
1051 {
1052   async_signal_handler *prev_ptr;
1053
1054   if (sighandler_list.first_handler == (*async_handler_ptr))
1055     {
1056       sighandler_list.first_handler = (*async_handler_ptr)->next_handler;
1057       if (sighandler_list.first_handler == NULL)
1058         sighandler_list.last_handler = NULL;
1059     }
1060   else
1061     {
1062       prev_ptr = sighandler_list.first_handler;
1063       while (prev_ptr && prev_ptr->next_handler != (*async_handler_ptr))
1064         prev_ptr = prev_ptr->next_handler;
1065       prev_ptr->next_handler = (*async_handler_ptr)->next_handler;
1066       if (sighandler_list.last_handler == (*async_handler_ptr))
1067         sighandler_list.last_handler = prev_ptr;
1068     }
1069   xfree ((*async_handler_ptr));
1070   (*async_handler_ptr) = NULL;
1071 }
1072
1073 /* Create an asynchronous event handler, allocating memory for it.
1074    Return a pointer to the newly created handler.  PROC is the
1075    function to call with CLIENT_DATA argument whenever the handler is
1076    invoked.  */
1077 async_event_handler *
1078 create_async_event_handler (async_event_handler_func *proc,
1079                             gdb_client_data client_data)
1080 {
1081   async_event_handler *h;
1082
1083   h = xmalloc (sizeof (*h));
1084   h->ready = 0;
1085   h->next_handler = NULL;
1086   h->proc = proc;
1087   h->client_data = client_data;
1088   if (async_event_handler_list.first_handler == NULL)
1089     async_event_handler_list.first_handler = h;
1090   else
1091     async_event_handler_list.last_handler->next_handler = h;
1092   async_event_handler_list.last_handler = h;
1093   return h;
1094 }
1095
1096 /* Mark the handler (ASYNC_HANDLER_PTR) as ready.  This information
1097    will be used by gdb_do_one_event.  The caller will be whoever
1098    created the event source, and wants to signal that the event is
1099    ready to be handled.  */
1100 void
1101 mark_async_event_handler (async_event_handler *async_handler_ptr)
1102 {
1103   async_handler_ptr->ready = 1;
1104 }
1105
1106 struct async_event_handler_data
1107 {
1108   async_event_handler_func* proc;
1109   gdb_client_data client_data;
1110 };
1111
1112 static void
1113 invoke_async_event_handler (event_data data)
1114 {
1115   struct async_event_handler_data *hdata = data.ptr;
1116   async_event_handler_func* proc = hdata->proc;
1117   gdb_client_data client_data = hdata->client_data;
1118
1119   xfree (hdata);
1120   (*proc) (client_data);
1121 }
1122
1123 /* Check if any asynchronous event handlers are ready, and queue
1124    events in the ready queue for any that are.  */
1125 static void
1126 check_async_event_handlers (void)
1127 {
1128   async_event_handler *async_handler_ptr;
1129   struct async_event_handler_data *hdata;
1130   struct gdb_event *event_ptr;
1131   event_data data;
1132
1133   for (async_handler_ptr = async_event_handler_list.first_handler;
1134        async_handler_ptr != NULL;
1135        async_handler_ptr = async_handler_ptr->next_handler)
1136     {
1137       if (async_handler_ptr->ready)
1138         {
1139           async_handler_ptr->ready = 0;
1140
1141           hdata = xmalloc (sizeof (*hdata));
1142
1143           hdata->proc = async_handler_ptr->proc;
1144           hdata->client_data = async_handler_ptr->client_data;
1145
1146           data.ptr = hdata;
1147
1148           event_ptr = create_event (invoke_async_event_handler, data);
1149           async_queue_event (event_ptr, TAIL);
1150         }
1151     }
1152 }
1153
1154 /* Delete an asynchronous handler (ASYNC_HANDLER_PTR).
1155    Free the space allocated for it.  */
1156 void
1157 delete_async_event_handler (async_event_handler **async_handler_ptr)
1158 {
1159   async_event_handler *prev_ptr;
1160
1161   if (async_event_handler_list.first_handler == *async_handler_ptr)
1162     {
1163       async_event_handler_list.first_handler = (*async_handler_ptr)->next_handler;
1164       if (async_event_handler_list.first_handler == NULL)
1165         async_event_handler_list.last_handler = NULL;
1166     }
1167   else
1168     {
1169       prev_ptr = async_event_handler_list.first_handler;
1170       while (prev_ptr && prev_ptr->next_handler != *async_handler_ptr)
1171         prev_ptr = prev_ptr->next_handler;
1172       prev_ptr->next_handler = (*async_handler_ptr)->next_handler;
1173       if (async_event_handler_list.last_handler == (*async_handler_ptr))
1174         async_event_handler_list.last_handler = prev_ptr;
1175     }
1176   xfree (*async_handler_ptr);
1177   *async_handler_ptr = NULL;
1178 }
1179
1180 /* Create a timer that will expire in MILLISECONDS from now. When the
1181    timer is ready, PROC will be executed. At creation, the timer is
1182    aded to the timers queue.  This queue is kept sorted in order of
1183    increasing timers. Return a handle to the timer struct. */
1184 int
1185 create_timer (int milliseconds, timer_handler_func * proc, gdb_client_data client_data)
1186 {
1187   struct gdb_timer *timer_ptr, *timer_index, *prev_timer;
1188   struct timeval time_now, delta;
1189
1190   /* compute seconds */
1191   delta.tv_sec = milliseconds / 1000;
1192   /* compute microseconds */
1193   delta.tv_usec = (milliseconds % 1000) * 1000;
1194
1195   gettimeofday (&time_now, NULL);
1196
1197   timer_ptr = (struct gdb_timer *) xmalloc (sizeof (*timer_ptr));
1198   timer_ptr->when.tv_sec = time_now.tv_sec + delta.tv_sec;
1199   timer_ptr->when.tv_usec = time_now.tv_usec + delta.tv_usec;
1200   /* carry? */
1201   if (timer_ptr->when.tv_usec >= 1000000)
1202     {
1203       timer_ptr->when.tv_sec += 1;
1204       timer_ptr->when.tv_usec -= 1000000;
1205     }
1206   timer_ptr->proc = proc;
1207   timer_ptr->client_data = client_data;
1208   timer_list.num_timers++;
1209   timer_ptr->timer_id = timer_list.num_timers;
1210
1211   /* Now add the timer to the timer queue, making sure it is sorted in
1212      increasing order of expiration. */
1213
1214   for (timer_index = timer_list.first_timer;
1215        timer_index != NULL;
1216        timer_index = timer_index->next)
1217     {
1218       /* If the seconds field is greater or if it is the same, but the
1219          microsecond field is greater. */
1220       if ((timer_index->when.tv_sec > timer_ptr->when.tv_sec)
1221           || ((timer_index->when.tv_sec == timer_ptr->when.tv_sec)
1222               && (timer_index->when.tv_usec > timer_ptr->when.tv_usec)))
1223         break;
1224     }
1225
1226   if (timer_index == timer_list.first_timer)
1227     {
1228       timer_ptr->next = timer_list.first_timer;
1229       timer_list.first_timer = timer_ptr;
1230
1231     }
1232   else
1233     {
1234       for (prev_timer = timer_list.first_timer;
1235            prev_timer->next != timer_index;
1236            prev_timer = prev_timer->next)
1237         ;
1238
1239       prev_timer->next = timer_ptr;
1240       timer_ptr->next = timer_index;
1241     }
1242
1243   gdb_notifier.timeout_valid = 0;
1244   return timer_ptr->timer_id;
1245 }
1246
1247 /* There is a chance that the creator of the timer wants to get rid of
1248    it before it expires. */
1249 void
1250 delete_timer (int id)
1251 {
1252   struct gdb_timer *timer_ptr, *prev_timer = NULL;
1253
1254   /* Find the entry for the given timer. */
1255
1256   for (timer_ptr = timer_list.first_timer; timer_ptr != NULL;
1257        timer_ptr = timer_ptr->next)
1258     {
1259       if (timer_ptr->timer_id == id)
1260         break;
1261     }
1262
1263   if (timer_ptr == NULL)
1264     return;
1265   /* Get rid of the timer in the timer list. */
1266   if (timer_ptr == timer_list.first_timer)
1267     timer_list.first_timer = timer_ptr->next;
1268   else
1269     {
1270       for (prev_timer = timer_list.first_timer;
1271            prev_timer->next != timer_ptr;
1272            prev_timer = prev_timer->next)
1273         ;
1274       prev_timer->next = timer_ptr->next;
1275     }
1276   xfree (timer_ptr);
1277
1278   gdb_notifier.timeout_valid = 0;
1279 }
1280
1281 /* When a timer event is put on the event queue, it will be handled by
1282    this function.  Just call the associated procedure and delete the
1283    timer event from the event queue.  Repeat this for each timer that
1284    has expired.  */
1285 static void
1286 handle_timer_event (event_data dummy)
1287 {
1288   struct timeval time_now;
1289   struct gdb_timer *timer_ptr, *saved_timer;
1290
1291   gettimeofday (&time_now, NULL);
1292   timer_ptr = timer_list.first_timer;
1293
1294   while (timer_ptr != NULL)
1295     {
1296       if ((timer_ptr->when.tv_sec > time_now.tv_sec)
1297           || ((timer_ptr->when.tv_sec == time_now.tv_sec)
1298               && (timer_ptr->when.tv_usec > time_now.tv_usec)))
1299         break;
1300
1301       /* Get rid of the timer from the beginning of the list. */
1302       timer_list.first_timer = timer_ptr->next;
1303       saved_timer = timer_ptr;
1304       timer_ptr = timer_ptr->next;
1305       /* Call the procedure associated with that timer. */
1306       (*saved_timer->proc) (saved_timer->client_data);
1307       xfree (saved_timer);
1308     }
1309
1310   gdb_notifier.timeout_valid = 0;
1311 }
1312
1313 /* Check whether any timers in the timers queue are ready. If at least
1314    one timer is ready, stick an event onto the event queue.  Even in
1315    case more than one timer is ready, one event is enough, because the
1316    handle_timer_event() will go through the timers list and call the
1317    procedures associated with all that have expired. Update the
1318    timeout for the select() or poll() as well. */
1319 static void
1320 poll_timers (void)
1321 {
1322   struct timeval time_now, delta;
1323   gdb_event *event_ptr;
1324
1325   if (timer_list.first_timer != NULL)
1326     {
1327       gettimeofday (&time_now, NULL);
1328       delta.tv_sec = timer_list.first_timer->when.tv_sec - time_now.tv_sec;
1329       delta.tv_usec = timer_list.first_timer->when.tv_usec - time_now.tv_usec;
1330       /* borrow? */
1331       if (delta.tv_usec < 0)
1332         {
1333           delta.tv_sec -= 1;
1334           delta.tv_usec += 1000000;
1335         }
1336
1337       /* Oops it expired already. Tell select / poll to return
1338          immediately. (Cannot simply test if delta.tv_sec is negative
1339          because time_t might be unsigned.)  */
1340       if (timer_list.first_timer->when.tv_sec < time_now.tv_sec
1341           || (timer_list.first_timer->when.tv_sec == time_now.tv_sec
1342               && timer_list.first_timer->when.tv_usec < time_now.tv_usec))
1343         {
1344           delta.tv_sec = 0;
1345           delta.tv_usec = 0;
1346         }
1347
1348       if (delta.tv_sec == 0 && delta.tv_usec == 0)
1349         {
1350           event_ptr = (gdb_event *) xmalloc (sizeof (gdb_event));
1351           event_ptr->proc = handle_timer_event;
1352           event_ptr->data.integer = timer_list.first_timer->timer_id;
1353           async_queue_event (event_ptr, TAIL);
1354         }
1355
1356       /* Now we need to update the timeout for select/ poll, because we
1357          don't want to sit there while this timer is expiring. */
1358       if (use_poll)
1359         {
1360 #ifdef HAVE_POLL
1361           gdb_notifier.poll_timeout = delta.tv_sec * 1000;
1362 #else
1363           internal_error (__FILE__, __LINE__,
1364                           _("use_poll without HAVE_POLL"));
1365 #endif /* HAVE_POLL */
1366         }
1367       else
1368         {
1369           gdb_notifier.select_timeout.tv_sec = delta.tv_sec;
1370           gdb_notifier.select_timeout.tv_usec = delta.tv_usec;
1371         }
1372       gdb_notifier.timeout_valid = 1;
1373     }
1374   else
1375     gdb_notifier.timeout_valid = 0;
1376 }