[binutils, ARM, 12/16] Scalar Low Overhead loop instructions for Armv8.1-M Mainline
[binutils-gdb.git] / gdb / event-loop.c
blobec776f59e8cd054c1962b4384c3c3a66dc995e05
1 /* Event loop machinery for GDB, the GNU debugger.
2 Copyright (C) 1999-2019 Free Software Foundation, Inc.
3 Written by Elena Zannoni <ezannoni@cygnus.com> of Cygnus Solutions.
5 This file is part of GDB.
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 3 of the License, or
10 (at your option) any later version.
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.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 #include "defs.h"
21 #include "event-loop.h"
22 #include "event-top.h"
23 #include "common/queue.h"
24 #include "ser-event.h"
26 #ifdef HAVE_POLL
27 #if defined (HAVE_POLL_H)
28 #include <poll.h>
29 #elif defined (HAVE_SYS_POLL_H)
30 #include <sys/poll.h>
31 #endif
32 #endif
34 #include <sys/types.h>
35 #include "common/gdb_sys_time.h"
36 #include "gdb_select.h"
37 #include "observable.h"
38 #include "top.h"
40 /* Tell create_file_handler what events we are interested in.
41 This is used by the select version of the event loop. */
43 #define GDB_READABLE (1<<1)
44 #define GDB_WRITABLE (1<<2)
45 #define GDB_EXCEPTION (1<<3)
47 /* Data point to pass to the event handler. */
48 typedef union event_data
50 void *ptr;
51 int integer;
52 } event_data;
54 typedef struct gdb_event gdb_event;
55 typedef void (event_handler_func) (event_data);
57 /* Event for the GDB event system. Events are queued by calling
58 async_queue_event and serviced later on by gdb_do_one_event. An
59 event can be, for instance, a file descriptor becoming ready to be
60 read. Servicing an event simply means that the procedure PROC will
61 be called. We have 2 queues, one for file handlers that we listen
62 to in the event loop, and one for the file handlers+events that are
63 ready. The procedure PROC associated with each event is dependant
64 of the event source. In the case of monitored file descriptors, it
65 is always the same (handle_file_event). Its duty is to invoke the
66 handler associated with the file descriptor whose state change
67 generated the event, plus doing other cleanups and such. In the
68 case of async signal handlers, it is
69 invoke_async_signal_handler. */
71 typedef struct gdb_event
73 /* Procedure to call to service this event. */
74 event_handler_func *proc;
76 /* Data to pass to the event handler. */
77 event_data data;
78 } *gdb_event_p;
80 /* Information about each file descriptor we register with the event
81 loop. */
83 typedef struct file_handler
85 int fd; /* File descriptor. */
86 int mask; /* Events we want to monitor: POLLIN, etc. */
87 int ready_mask; /* Events that have been seen since
88 the last time. */
89 handler_func *proc; /* Procedure to call when fd is ready. */
90 gdb_client_data client_data; /* Argument to pass to proc. */
91 int error; /* Was an error detected on this fd? */
92 struct file_handler *next_file; /* Next registered file descriptor. */
94 file_handler;
96 /* PROC is a function to be invoked when the READY flag is set. This
97 happens when there has been a signal and the corresponding signal
98 handler has 'triggered' this async_signal_handler for execution.
99 The actual work to be done in response to a signal will be carried
100 out by PROC at a later time, within process_event. This provides a
101 deferred execution of signal handlers.
103 Async_init_signals takes care of setting up such an
104 async_signal_handler for each interesting signal. */
106 typedef struct async_signal_handler
108 int ready; /* If ready, call this handler
109 from the main event loop, using
110 invoke_async_handler. */
111 struct async_signal_handler *next_handler; /* Ptr to next handler. */
112 sig_handler_func *proc; /* Function to call to do the work. */
113 gdb_client_data client_data; /* Argument to async_handler_func. */
115 async_signal_handler;
117 /* PROC is a function to be invoked when the READY flag is set. This
118 happens when the event has been marked with
119 MARK_ASYNC_EVENT_HANDLER. The actual work to be done in response
120 to an event will be carried out by PROC at a later time, within
121 process_event. This provides a deferred execution of event
122 handlers. */
123 typedef struct async_event_handler
125 /* If ready, call this handler from the main event loop, using
126 invoke_event_handler. */
127 int ready;
129 /* Point to next handler. */
130 struct async_event_handler *next_handler;
132 /* Function to call to do the work. */
133 async_event_handler_func *proc;
135 /* Argument to PROC. */
136 gdb_client_data client_data;
138 async_event_handler;
140 /* Gdb_notifier is just a list of file descriptors gdb is interested in.
141 These are the input file descriptor, and the target file
142 descriptor. We have two flavors of the notifier, one for platforms
143 that have the POLL function, the other for those that don't, and
144 only support SELECT. Each of the elements in the gdb_notifier list is
145 basically a description of what kind of events gdb is interested
146 in, for each fd. */
148 /* As of 1999-04-30 only the input file descriptor is registered with the
149 event loop. */
151 /* Do we use poll or select ? */
152 #ifdef HAVE_POLL
153 #define USE_POLL 1
154 #else
155 #define USE_POLL 0
156 #endif /* HAVE_POLL */
158 static unsigned char use_poll = USE_POLL;
160 #ifdef USE_WIN32API
161 #include <windows.h>
162 #include <io.h>
163 #endif
165 static struct
167 /* Ptr to head of file handler list. */
168 file_handler *first_file_handler;
170 /* Next file handler to handle, for the select variant. To level
171 the fairness across event sources, we serve file handlers in a
172 round-robin-like fashion. The number and order of the polled
173 file handlers may change between invocations, but this is good
174 enough. */
175 file_handler *next_file_handler;
177 #ifdef HAVE_POLL
178 /* Ptr to array of pollfd structures. */
179 struct pollfd *poll_fds;
181 /* Next file descriptor to handle, for the poll variant. To level
182 the fairness across event sources, we poll the file descriptors
183 in a round-robin-like fashion. The number and order of the
184 polled file descriptors may change between invocations, but
185 this is good enough. */
186 int next_poll_fds_index;
188 /* Timeout in milliseconds for calls to poll(). */
189 int poll_timeout;
190 #endif
192 /* Masks to be used in the next call to select.
193 Bits are set in response to calls to create_file_handler. */
194 fd_set check_masks[3];
196 /* What file descriptors were found ready by select. */
197 fd_set ready_masks[3];
199 /* Number of file descriptors to monitor (for poll). */
200 /* Number of valid bits (highest fd value + 1) (for select). */
201 int num_fds;
203 /* Time structure for calls to select(). */
204 struct timeval select_timeout;
206 /* Flag to tell whether the timeout should be used. */
207 int timeout_valid;
209 gdb_notifier;
211 /* Structure associated with a timer. PROC will be executed at the
212 first occasion after WHEN. */
213 struct gdb_timer
215 std::chrono::steady_clock::time_point when;
216 int timer_id;
217 struct gdb_timer *next;
218 timer_handler_func *proc; /* Function to call to do the work. */
219 gdb_client_data client_data; /* Argument to async_handler_func. */
222 /* List of currently active timers. It is sorted in order of
223 increasing timers. */
224 static struct
226 /* Pointer to first in timer list. */
227 struct gdb_timer *first_timer;
229 /* Id of the last timer created. */
230 int num_timers;
232 timer_list;
234 /* All the async_signal_handlers gdb is interested in are kept onto
235 this list. */
236 static struct
238 /* Pointer to first in handler list. */
239 async_signal_handler *first_handler;
241 /* Pointer to last in handler list. */
242 async_signal_handler *last_handler;
244 sighandler_list;
246 /* All the async_event_handlers gdb is interested in are kept onto
247 this list. */
248 static struct
250 /* Pointer to first in handler list. */
251 async_event_handler *first_handler;
253 /* Pointer to last in handler list. */
254 async_event_handler *last_handler;
256 async_event_handler_list;
258 static int invoke_async_signal_handlers (void);
259 static void create_file_handler (int fd, int mask, handler_func *proc,
260 gdb_client_data client_data);
261 static int check_async_event_handlers (void);
262 static int gdb_wait_for_event (int);
263 static int update_wait_timeout (void);
264 static int poll_timers (void);
267 /* This event is signalled whenever an asynchronous handler needs to
268 defer an action to the event loop. */
269 static struct serial_event *async_signal_handlers_serial_event;
271 /* Callback registered with ASYNC_SIGNAL_HANDLERS_SERIAL_EVENT. */
273 static void
274 async_signals_handler (int error, gdb_client_data client_data)
276 /* Do nothing. Handlers are run by invoke_async_signal_handlers
277 from instead. */
280 void
281 initialize_async_signal_handlers (void)
283 async_signal_handlers_serial_event = make_serial_event ();
285 add_file_handler (serial_event_fd (async_signal_handlers_serial_event),
286 async_signals_handler, NULL);
289 /* Process one high level event. If nothing is ready at this time,
290 wait for something to happen (via gdb_wait_for_event), then process
291 it. Returns >0 if something was done otherwise returns <0 (this
292 can happen if there are no event sources to wait for). */
295 gdb_do_one_event (void)
297 static int event_source_head = 0;
298 const int number_of_sources = 3;
299 int current = 0;
301 /* First let's see if there are any asynchronous signal handlers
302 that are ready. These would be the result of invoking any of the
303 signal handlers. */
304 if (invoke_async_signal_handlers ())
305 return 1;
307 /* To level the fairness across event sources, we poll them in a
308 round-robin fashion. */
309 for (current = 0; current < number_of_sources; current++)
311 int res;
313 switch (event_source_head)
315 case 0:
316 /* Are any timers that are ready? */
317 res = poll_timers ();
318 break;
319 case 1:
320 /* Are there events already waiting to be collected on the
321 monitored file descriptors? */
322 res = gdb_wait_for_event (0);
323 break;
324 case 2:
325 /* Are there any asynchronous event handlers ready? */
326 res = check_async_event_handlers ();
327 break;
328 default:
329 internal_error (__FILE__, __LINE__,
330 "unexpected event_source_head %d",
331 event_source_head);
334 event_source_head++;
335 if (event_source_head == number_of_sources)
336 event_source_head = 0;
338 if (res > 0)
339 return 1;
342 /* Block waiting for a new event. If gdb_wait_for_event returns -1,
343 we should get out because this means that there are no event
344 sources left. This will make the event loop stop, and the
345 application exit. */
347 if (gdb_wait_for_event (1) < 0)
348 return -1;
350 /* If gdb_wait_for_event has returned 1, it means that one event has
351 been handled. We break out of the loop. */
352 return 1;
355 /* Start up the event loop. This is the entry point to the event loop
356 from the command loop. */
358 void
359 start_event_loop (void)
361 /* Loop until there is nothing to do. This is the entry point to
362 the event loop engine. gdb_do_one_event will process one event
363 for each invocation. It blocks waiting for an event and then
364 processes it. */
365 while (1)
367 int result = 0;
371 result = gdb_do_one_event ();
373 catch (const gdb_exception &ex)
375 exception_print (gdb_stderr, ex);
377 /* If any exception escaped to here, we better enable
378 stdin. Otherwise, any command that calls async_disable_stdin,
379 and then throws, will leave stdin inoperable. */
380 async_enable_stdin ();
381 /* If we long-jumped out of do_one_event, we probably didn't
382 get around to resetting the prompt, which leaves readline
383 in a messed-up state. Reset it here. */
384 current_ui->prompt_state = PROMPT_NEEDED;
385 gdb::observers::command_error.notify ();
386 /* This call looks bizarre, but it is required. If the user
387 entered a command that caused an error,
388 after_char_processing_hook won't be called from
389 rl_callback_read_char_wrapper. Using a cleanup there
390 won't work, since we want this function to be called
391 after a new prompt is printed. */
392 if (after_char_processing_hook)
393 (*after_char_processing_hook) ();
394 /* Maybe better to set a flag to be checked somewhere as to
395 whether display the prompt or not. */
398 if (result < 0)
399 break;
402 /* We are done with the event loop. There are no more event sources
403 to listen to. So we exit GDB. */
404 return;
408 /* Wrapper function for create_file_handler, so that the caller
409 doesn't have to know implementation details about the use of poll
410 vs. select. */
411 void
412 add_file_handler (int fd, handler_func * proc, gdb_client_data client_data)
414 #ifdef HAVE_POLL
415 struct pollfd fds;
416 #endif
418 if (use_poll)
420 #ifdef HAVE_POLL
421 /* Check to see if poll () is usable. If not, we'll switch to
422 use select. This can happen on systems like
423 m68k-motorola-sys, `poll' cannot be used to wait for `stdin'.
424 On m68k-motorola-sysv, tty's are not stream-based and not
425 `poll'able. */
426 fds.fd = fd;
427 fds.events = POLLIN;
428 if (poll (&fds, 1, 0) == 1 && (fds.revents & POLLNVAL))
429 use_poll = 0;
430 #else
431 internal_error (__FILE__, __LINE__,
432 _("use_poll without HAVE_POLL"));
433 #endif /* HAVE_POLL */
435 if (use_poll)
437 #ifdef HAVE_POLL
438 create_file_handler (fd, POLLIN, proc, client_data);
439 #else
440 internal_error (__FILE__, __LINE__,
441 _("use_poll without HAVE_POLL"));
442 #endif
444 else
445 create_file_handler (fd, GDB_READABLE | GDB_EXCEPTION,
446 proc, client_data);
449 /* Add a file handler/descriptor to the list of descriptors we are
450 interested in.
452 FD is the file descriptor for the file/stream to be listened to.
454 For the poll case, MASK is a combination (OR) of POLLIN,
455 POLLRDNORM, POLLRDBAND, POLLPRI, POLLOUT, POLLWRNORM, POLLWRBAND:
456 these are the events we are interested in. If any of them occurs,
457 proc should be called.
459 For the select case, MASK is a combination of READABLE, WRITABLE,
460 EXCEPTION. PROC is the procedure that will be called when an event
461 occurs for FD. CLIENT_DATA is the argument to pass to PROC. */
463 static void
464 create_file_handler (int fd, int mask, handler_func * proc,
465 gdb_client_data client_data)
467 file_handler *file_ptr;
469 /* Do we already have a file handler for this file? (We may be
470 changing its associated procedure). */
471 for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
472 file_ptr = file_ptr->next_file)
474 if (file_ptr->fd == fd)
475 break;
478 /* It is a new file descriptor. Add it to the list. Otherwise, just
479 change the data associated with it. */
480 if (file_ptr == NULL)
482 file_ptr = XNEW (file_handler);
483 file_ptr->fd = fd;
484 file_ptr->ready_mask = 0;
485 file_ptr->next_file = gdb_notifier.first_file_handler;
486 gdb_notifier.first_file_handler = file_ptr;
488 if (use_poll)
490 #ifdef HAVE_POLL
491 gdb_notifier.num_fds++;
492 if (gdb_notifier.poll_fds)
493 gdb_notifier.poll_fds =
494 (struct pollfd *) xrealloc (gdb_notifier.poll_fds,
495 (gdb_notifier.num_fds
496 * sizeof (struct pollfd)));
497 else
498 gdb_notifier.poll_fds =
499 XNEW (struct pollfd);
500 (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->fd = fd;
501 (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->events = mask;
502 (gdb_notifier.poll_fds + gdb_notifier.num_fds - 1)->revents = 0;
503 #else
504 internal_error (__FILE__, __LINE__,
505 _("use_poll without HAVE_POLL"));
506 #endif /* HAVE_POLL */
508 else
510 if (mask & GDB_READABLE)
511 FD_SET (fd, &gdb_notifier.check_masks[0]);
512 else
513 FD_CLR (fd, &gdb_notifier.check_masks[0]);
515 if (mask & GDB_WRITABLE)
516 FD_SET (fd, &gdb_notifier.check_masks[1]);
517 else
518 FD_CLR (fd, &gdb_notifier.check_masks[1]);
520 if (mask & GDB_EXCEPTION)
521 FD_SET (fd, &gdb_notifier.check_masks[2]);
522 else
523 FD_CLR (fd, &gdb_notifier.check_masks[2]);
525 if (gdb_notifier.num_fds <= fd)
526 gdb_notifier.num_fds = fd + 1;
530 file_ptr->proc = proc;
531 file_ptr->client_data = client_data;
532 file_ptr->mask = mask;
535 /* Return the next file handler to handle, and advance to the next
536 file handler, wrapping around if the end of the list is
537 reached. */
539 static file_handler *
540 get_next_file_handler_to_handle_and_advance (void)
542 file_handler *curr_next;
544 /* The first time around, this is still NULL. */
545 if (gdb_notifier.next_file_handler == NULL)
546 gdb_notifier.next_file_handler = gdb_notifier.first_file_handler;
548 curr_next = gdb_notifier.next_file_handler;
549 gdb_assert (curr_next != NULL);
551 /* Advance. */
552 gdb_notifier.next_file_handler = curr_next->next_file;
553 /* Wrap around, if necessary. */
554 if (gdb_notifier.next_file_handler == NULL)
555 gdb_notifier.next_file_handler = gdb_notifier.first_file_handler;
557 return curr_next;
560 /* Remove the file descriptor FD from the list of monitored fd's:
561 i.e. we don't care anymore about events on the FD. */
562 void
563 delete_file_handler (int fd)
565 file_handler *file_ptr, *prev_ptr = NULL;
566 int i;
567 #ifdef HAVE_POLL
568 int j;
569 struct pollfd *new_poll_fds;
570 #endif
572 /* Find the entry for the given file. */
574 for (file_ptr = gdb_notifier.first_file_handler; file_ptr != NULL;
575 file_ptr = file_ptr->next_file)
577 if (file_ptr->fd == fd)
578 break;
581 if (file_ptr == NULL)
582 return;
584 if (use_poll)
586 #ifdef HAVE_POLL
587 /* Create a new poll_fds array by copying every fd's information
588 but the one we want to get rid of. */
590 new_poll_fds = (struct pollfd *)
591 xmalloc ((gdb_notifier.num_fds - 1) * sizeof (struct pollfd));
593 for (i = 0, j = 0; i < gdb_notifier.num_fds; i++)
595 if ((gdb_notifier.poll_fds + i)->fd != fd)
597 (new_poll_fds + j)->fd = (gdb_notifier.poll_fds + i)->fd;
598 (new_poll_fds + j)->events = (gdb_notifier.poll_fds + i)->events;
599 (new_poll_fds + j)->revents
600 = (gdb_notifier.poll_fds + i)->revents;
601 j++;
604 xfree (gdb_notifier.poll_fds);
605 gdb_notifier.poll_fds = new_poll_fds;
606 gdb_notifier.num_fds--;
607 #else
608 internal_error (__FILE__, __LINE__,
609 _("use_poll without HAVE_POLL"));
610 #endif /* HAVE_POLL */
612 else
614 if (file_ptr->mask & GDB_READABLE)
615 FD_CLR (fd, &gdb_notifier.check_masks[0]);
616 if (file_ptr->mask & GDB_WRITABLE)
617 FD_CLR (fd, &gdb_notifier.check_masks[1]);
618 if (file_ptr->mask & GDB_EXCEPTION)
619 FD_CLR (fd, &gdb_notifier.check_masks[2]);
621 /* Find current max fd. */
623 if ((fd + 1) == gdb_notifier.num_fds)
625 gdb_notifier.num_fds--;
626 for (i = gdb_notifier.num_fds; i; i--)
628 if (FD_ISSET (i - 1, &gdb_notifier.check_masks[0])
629 || FD_ISSET (i - 1, &gdb_notifier.check_masks[1])
630 || FD_ISSET (i - 1, &gdb_notifier.check_masks[2]))
631 break;
633 gdb_notifier.num_fds = i;
637 /* Deactivate the file descriptor, by clearing its mask,
638 so that it will not fire again. */
640 file_ptr->mask = 0;
642 /* If this file handler was going to be the next one to be handled,
643 advance to the next's next, if any. */
644 if (gdb_notifier.next_file_handler == file_ptr)
646 if (file_ptr->next_file == NULL
647 && file_ptr == gdb_notifier.first_file_handler)
648 gdb_notifier.next_file_handler = NULL;
649 else
650 get_next_file_handler_to_handle_and_advance ();
653 /* Get rid of the file handler in the file handler list. */
654 if (file_ptr == gdb_notifier.first_file_handler)
655 gdb_notifier.first_file_handler = file_ptr->next_file;
656 else
658 for (prev_ptr = gdb_notifier.first_file_handler;
659 prev_ptr->next_file != file_ptr;
660 prev_ptr = prev_ptr->next_file)
662 prev_ptr->next_file = file_ptr->next_file;
664 xfree (file_ptr);
667 /* Handle the given event by calling the procedure associated to the
668 corresponding file handler. */
670 static void
671 handle_file_event (file_handler *file_ptr, int ready_mask)
673 int mask;
674 #ifdef HAVE_POLL
675 int error_mask;
676 #endif
680 /* With poll, the ready_mask could have any of three events
681 set to 1: POLLHUP, POLLERR, POLLNVAL. These events
682 cannot be used in the requested event mask (events), but
683 they can be returned in the return mask (revents). We
684 need to check for those event too, and add them to the
685 mask which will be passed to the handler. */
687 /* See if the desired events (mask) match the received
688 events (ready_mask). */
690 if (use_poll)
692 #ifdef HAVE_POLL
693 /* POLLHUP means EOF, but can be combined with POLLIN to
694 signal more data to read. */
695 error_mask = POLLHUP | POLLERR | POLLNVAL;
696 mask = ready_mask & (file_ptr->mask | error_mask);
698 if ((mask & (POLLERR | POLLNVAL)) != 0)
700 /* Work in progress. We may need to tell somebody
701 what kind of error we had. */
702 if (mask & POLLERR)
703 printf_unfiltered (_("Error detected on fd %d\n"),
704 file_ptr->fd);
705 if (mask & POLLNVAL)
706 printf_unfiltered (_("Invalid or non-`poll'able fd %d\n"),
707 file_ptr->fd);
708 file_ptr->error = 1;
710 else
711 file_ptr->error = 0;
712 #else
713 internal_error (__FILE__, __LINE__,
714 _("use_poll without HAVE_POLL"));
715 #endif /* HAVE_POLL */
717 else
719 if (ready_mask & GDB_EXCEPTION)
721 printf_unfiltered (_("Exception condition detected "
722 "on fd %d\n"), file_ptr->fd);
723 file_ptr->error = 1;
725 else
726 file_ptr->error = 0;
727 mask = ready_mask & file_ptr->mask;
730 /* If there was a match, then call the handler. */
731 if (mask != 0)
732 (*file_ptr->proc) (file_ptr->error, file_ptr->client_data);
737 /* Wait for new events on the monitored file descriptors. Run the
738 event handler if the first descriptor that is detected by the poll.
739 If BLOCK and if there are no events, this function will block in
740 the call to poll. Return 1 if an event was handled. Return -1 if
741 there are no file descriptors to monitor. Return 1 if an event was
742 handled, otherwise returns 0. */
744 static int
745 gdb_wait_for_event (int block)
747 file_handler *file_ptr;
748 int num_found = 0;
750 /* Make sure all output is done before getting another event. */
751 gdb_flush (gdb_stdout);
752 gdb_flush (gdb_stderr);
754 if (gdb_notifier.num_fds == 0)
755 return -1;
757 if (block)
758 update_wait_timeout ();
760 if (use_poll)
762 #ifdef HAVE_POLL
763 int timeout;
765 if (block)
766 timeout = gdb_notifier.timeout_valid ? gdb_notifier.poll_timeout : -1;
767 else
768 timeout = 0;
770 num_found = poll (gdb_notifier.poll_fds,
771 (unsigned long) gdb_notifier.num_fds, timeout);
773 /* Don't print anything if we get out of poll because of a
774 signal. */
775 if (num_found == -1 && errno != EINTR)
776 perror_with_name (("poll"));
777 #else
778 internal_error (__FILE__, __LINE__,
779 _("use_poll without HAVE_POLL"));
780 #endif /* HAVE_POLL */
782 else
784 struct timeval select_timeout;
785 struct timeval *timeout_p;
787 if (block)
788 timeout_p = gdb_notifier.timeout_valid
789 ? &gdb_notifier.select_timeout : NULL;
790 else
792 memset (&select_timeout, 0, sizeof (select_timeout));
793 timeout_p = &select_timeout;
796 gdb_notifier.ready_masks[0] = gdb_notifier.check_masks[0];
797 gdb_notifier.ready_masks[1] = gdb_notifier.check_masks[1];
798 gdb_notifier.ready_masks[2] = gdb_notifier.check_masks[2];
799 num_found = gdb_select (gdb_notifier.num_fds,
800 &gdb_notifier.ready_masks[0],
801 &gdb_notifier.ready_masks[1],
802 &gdb_notifier.ready_masks[2],
803 timeout_p);
805 /* Clear the masks after an error from select. */
806 if (num_found == -1)
808 FD_ZERO (&gdb_notifier.ready_masks[0]);
809 FD_ZERO (&gdb_notifier.ready_masks[1]);
810 FD_ZERO (&gdb_notifier.ready_masks[2]);
812 /* Dont print anything if we got a signal, let gdb handle
813 it. */
814 if (errno != EINTR)
815 perror_with_name (("select"));
819 /* Avoid looking at poll_fds[i]->revents if no event fired. */
820 if (num_found <= 0)
821 return 0;
823 /* Run event handlers. We always run just one handler and go back
824 to polling, in case a handler changes the notifier list. Since
825 events for sources we haven't consumed yet wake poll/select
826 immediately, no event is lost. */
828 /* To level the fairness across event descriptors, we handle them in
829 a round-robin-like fashion. The number and order of descriptors
830 may change between invocations, but this is good enough. */
831 if (use_poll)
833 #ifdef HAVE_POLL
834 int i;
835 int mask;
837 while (1)
839 if (gdb_notifier.next_poll_fds_index >= gdb_notifier.num_fds)
840 gdb_notifier.next_poll_fds_index = 0;
841 i = gdb_notifier.next_poll_fds_index++;
843 gdb_assert (i < gdb_notifier.num_fds);
844 if ((gdb_notifier.poll_fds + i)->revents)
845 break;
848 for (file_ptr = gdb_notifier.first_file_handler;
849 file_ptr != NULL;
850 file_ptr = file_ptr->next_file)
852 if (file_ptr->fd == (gdb_notifier.poll_fds + i)->fd)
853 break;
855 gdb_assert (file_ptr != NULL);
857 mask = (gdb_notifier.poll_fds + i)->revents;
858 handle_file_event (file_ptr, mask);
859 return 1;
860 #else
861 internal_error (__FILE__, __LINE__,
862 _("use_poll without HAVE_POLL"));
863 #endif /* HAVE_POLL */
865 else
867 /* See comment about even source fairness above. */
868 int mask = 0;
872 file_ptr = get_next_file_handler_to_handle_and_advance ();
874 if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[0]))
875 mask |= GDB_READABLE;
876 if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[1]))
877 mask |= GDB_WRITABLE;
878 if (FD_ISSET (file_ptr->fd, &gdb_notifier.ready_masks[2]))
879 mask |= GDB_EXCEPTION;
881 while (mask == 0);
883 handle_file_event (file_ptr, mask);
884 return 1;
886 return 0;
890 /* Create an asynchronous handler, allocating memory for it.
891 Return a pointer to the newly created handler.
892 This pointer will be used to invoke the handler by
893 invoke_async_signal_handler.
894 PROC is the function to call with CLIENT_DATA argument
895 whenever the handler is invoked. */
896 async_signal_handler *
897 create_async_signal_handler (sig_handler_func * proc,
898 gdb_client_data client_data)
900 async_signal_handler *async_handler_ptr;
902 async_handler_ptr = XNEW (async_signal_handler);
903 async_handler_ptr->ready = 0;
904 async_handler_ptr->next_handler = NULL;
905 async_handler_ptr->proc = proc;
906 async_handler_ptr->client_data = client_data;
907 if (sighandler_list.first_handler == NULL)
908 sighandler_list.first_handler = async_handler_ptr;
909 else
910 sighandler_list.last_handler->next_handler = async_handler_ptr;
911 sighandler_list.last_handler = async_handler_ptr;
912 return async_handler_ptr;
915 /* Mark the handler (ASYNC_HANDLER_PTR) as ready. This information
916 will be used when the handlers are invoked, after we have waited
917 for some event. The caller of this function is the interrupt
918 handler associated with a signal. */
919 void
920 mark_async_signal_handler (async_signal_handler * async_handler_ptr)
922 async_handler_ptr->ready = 1;
923 serial_event_set (async_signal_handlers_serial_event);
926 /* See event-loop.h. */
928 void
929 clear_async_signal_handler (async_signal_handler *async_handler_ptr)
931 async_handler_ptr->ready = 0;
934 /* See event-loop.h. */
937 async_signal_handler_is_marked (async_signal_handler *async_handler_ptr)
939 return async_handler_ptr->ready;
942 /* Call all the handlers that are ready. Returns true if any was
943 indeed ready. */
945 static int
946 invoke_async_signal_handlers (void)
948 async_signal_handler *async_handler_ptr;
949 int any_ready = 0;
951 /* We're going to handle all pending signals, so no need to wake up
952 the event loop again the next time around. Note this must be
953 cleared _before_ calling the callbacks, to avoid races. */
954 serial_event_clear (async_signal_handlers_serial_event);
956 /* Invoke all ready handlers. */
958 while (1)
960 for (async_handler_ptr = sighandler_list.first_handler;
961 async_handler_ptr != NULL;
962 async_handler_ptr = async_handler_ptr->next_handler)
964 if (async_handler_ptr->ready)
965 break;
967 if (async_handler_ptr == NULL)
968 break;
969 any_ready = 1;
970 async_handler_ptr->ready = 0;
971 /* Async signal handlers have no connection to whichever was the
972 current UI, and thus always run on the main one. */
973 current_ui = main_ui;
974 (*async_handler_ptr->proc) (async_handler_ptr->client_data);
977 return any_ready;
980 /* Delete an asynchronous handler (ASYNC_HANDLER_PTR).
981 Free the space allocated for it. */
982 void
983 delete_async_signal_handler (async_signal_handler ** async_handler_ptr)
985 async_signal_handler *prev_ptr;
987 if (sighandler_list.first_handler == (*async_handler_ptr))
989 sighandler_list.first_handler = (*async_handler_ptr)->next_handler;
990 if (sighandler_list.first_handler == NULL)
991 sighandler_list.last_handler = NULL;
993 else
995 prev_ptr = sighandler_list.first_handler;
996 while (prev_ptr && prev_ptr->next_handler != (*async_handler_ptr))
997 prev_ptr = prev_ptr->next_handler;
998 gdb_assert (prev_ptr);
999 prev_ptr->next_handler = (*async_handler_ptr)->next_handler;
1000 if (sighandler_list.last_handler == (*async_handler_ptr))
1001 sighandler_list.last_handler = prev_ptr;
1003 xfree ((*async_handler_ptr));
1004 (*async_handler_ptr) = NULL;
1007 /* Create an asynchronous event handler, allocating memory for it.
1008 Return a pointer to the newly created handler. PROC is the
1009 function to call with CLIENT_DATA argument whenever the handler is
1010 invoked. */
1011 async_event_handler *
1012 create_async_event_handler (async_event_handler_func *proc,
1013 gdb_client_data client_data)
1015 async_event_handler *h;
1017 h = XNEW (struct async_event_handler);
1018 h->ready = 0;
1019 h->next_handler = NULL;
1020 h->proc = proc;
1021 h->client_data = client_data;
1022 if (async_event_handler_list.first_handler == NULL)
1023 async_event_handler_list.first_handler = h;
1024 else
1025 async_event_handler_list.last_handler->next_handler = h;
1026 async_event_handler_list.last_handler = h;
1027 return h;
1030 /* Mark the handler (ASYNC_HANDLER_PTR) as ready. This information
1031 will be used by gdb_do_one_event. The caller will be whoever
1032 created the event source, and wants to signal that the event is
1033 ready to be handled. */
1034 void
1035 mark_async_event_handler (async_event_handler *async_handler_ptr)
1037 async_handler_ptr->ready = 1;
1040 /* See event-loop.h. */
1042 void
1043 clear_async_event_handler (async_event_handler *async_handler_ptr)
1045 async_handler_ptr->ready = 0;
1048 /* Check if asynchronous event handlers are ready, and call the
1049 handler function for one that is. */
1051 static int
1052 check_async_event_handlers (void)
1054 async_event_handler *async_handler_ptr;
1056 for (async_handler_ptr = async_event_handler_list.first_handler;
1057 async_handler_ptr != NULL;
1058 async_handler_ptr = async_handler_ptr->next_handler)
1060 if (async_handler_ptr->ready)
1062 async_handler_ptr->ready = 0;
1063 (*async_handler_ptr->proc) (async_handler_ptr->client_data);
1064 return 1;
1068 return 0;
1071 /* Delete an asynchronous handler (ASYNC_HANDLER_PTR).
1072 Free the space allocated for it. */
1073 void
1074 delete_async_event_handler (async_event_handler **async_handler_ptr)
1076 async_event_handler *prev_ptr;
1078 if (async_event_handler_list.first_handler == *async_handler_ptr)
1080 async_event_handler_list.first_handler
1081 = (*async_handler_ptr)->next_handler;
1082 if (async_event_handler_list.first_handler == NULL)
1083 async_event_handler_list.last_handler = NULL;
1085 else
1087 prev_ptr = async_event_handler_list.first_handler;
1088 while (prev_ptr && prev_ptr->next_handler != *async_handler_ptr)
1089 prev_ptr = prev_ptr->next_handler;
1090 gdb_assert (prev_ptr);
1091 prev_ptr->next_handler = (*async_handler_ptr)->next_handler;
1092 if (async_event_handler_list.last_handler == (*async_handler_ptr))
1093 async_event_handler_list.last_handler = prev_ptr;
1095 xfree (*async_handler_ptr);
1096 *async_handler_ptr = NULL;
1099 /* Create a timer that will expire in MS milliseconds from now. When
1100 the timer is ready, PROC will be executed. At creation, the timer
1101 is added to the timers queue. This queue is kept sorted in order
1102 of increasing timers. Return a handle to the timer struct. */
1105 create_timer (int ms, timer_handler_func *proc,
1106 gdb_client_data client_data)
1108 using namespace std::chrono;
1109 struct gdb_timer *timer_ptr, *timer_index, *prev_timer;
1111 steady_clock::time_point time_now = steady_clock::now ();
1113 timer_ptr = new gdb_timer ();
1114 timer_ptr->when = time_now + milliseconds (ms);
1115 timer_ptr->proc = proc;
1116 timer_ptr->client_data = client_data;
1117 timer_list.num_timers++;
1118 timer_ptr->timer_id = timer_list.num_timers;
1120 /* Now add the timer to the timer queue, making sure it is sorted in
1121 increasing order of expiration. */
1123 for (timer_index = timer_list.first_timer;
1124 timer_index != NULL;
1125 timer_index = timer_index->next)
1127 if (timer_index->when > timer_ptr->when)
1128 break;
1131 if (timer_index == timer_list.first_timer)
1133 timer_ptr->next = timer_list.first_timer;
1134 timer_list.first_timer = timer_ptr;
1137 else
1139 for (prev_timer = timer_list.first_timer;
1140 prev_timer->next != timer_index;
1141 prev_timer = prev_timer->next)
1144 prev_timer->next = timer_ptr;
1145 timer_ptr->next = timer_index;
1148 gdb_notifier.timeout_valid = 0;
1149 return timer_ptr->timer_id;
1152 /* There is a chance that the creator of the timer wants to get rid of
1153 it before it expires. */
1154 void
1155 delete_timer (int id)
1157 struct gdb_timer *timer_ptr, *prev_timer = NULL;
1159 /* Find the entry for the given timer. */
1161 for (timer_ptr = timer_list.first_timer; timer_ptr != NULL;
1162 timer_ptr = timer_ptr->next)
1164 if (timer_ptr->timer_id == id)
1165 break;
1168 if (timer_ptr == NULL)
1169 return;
1170 /* Get rid of the timer in the timer list. */
1171 if (timer_ptr == timer_list.first_timer)
1172 timer_list.first_timer = timer_ptr->next;
1173 else
1175 for (prev_timer = timer_list.first_timer;
1176 prev_timer->next != timer_ptr;
1177 prev_timer = prev_timer->next)
1179 prev_timer->next = timer_ptr->next;
1181 delete timer_ptr;
1183 gdb_notifier.timeout_valid = 0;
1186 /* Convert a std::chrono duration to a struct timeval. */
1188 template<typename Duration>
1189 static struct timeval
1190 duration_cast_timeval (const Duration &d)
1192 using namespace std::chrono;
1193 seconds sec = duration_cast<seconds> (d);
1194 microseconds msec = duration_cast<microseconds> (d - sec);
1196 struct timeval tv;
1197 tv.tv_sec = sec.count ();
1198 tv.tv_usec = msec.count ();
1199 return tv;
1202 /* Update the timeout for the select() or poll(). Returns true if the
1203 timer has already expired, false otherwise. */
1205 static int
1206 update_wait_timeout (void)
1208 if (timer_list.first_timer != NULL)
1210 using namespace std::chrono;
1211 steady_clock::time_point time_now = steady_clock::now ();
1212 struct timeval timeout;
1214 if (timer_list.first_timer->when < time_now)
1216 /* It expired already. */
1217 timeout.tv_sec = 0;
1218 timeout.tv_usec = 0;
1220 else
1222 steady_clock::duration d = timer_list.first_timer->when - time_now;
1223 timeout = duration_cast_timeval (d);
1226 /* Update the timeout for select/ poll. */
1227 if (use_poll)
1229 #ifdef HAVE_POLL
1230 gdb_notifier.poll_timeout = timeout.tv_sec * 1000;
1231 #else
1232 internal_error (__FILE__, __LINE__,
1233 _("use_poll without HAVE_POLL"));
1234 #endif /* HAVE_POLL */
1236 else
1238 gdb_notifier.select_timeout.tv_sec = timeout.tv_sec;
1239 gdb_notifier.select_timeout.tv_usec = timeout.tv_usec;
1241 gdb_notifier.timeout_valid = 1;
1243 if (timer_list.first_timer->when < time_now)
1244 return 1;
1246 else
1247 gdb_notifier.timeout_valid = 0;
1249 return 0;
1252 /* Check whether a timer in the timers queue is ready. If a timer is
1253 ready, call its handler and return. Update the timeout for the
1254 select() or poll() as well. Return 1 if an event was handled,
1255 otherwise returns 0.*/
1257 static int
1258 poll_timers (void)
1260 if (update_wait_timeout ())
1262 struct gdb_timer *timer_ptr = timer_list.first_timer;
1263 timer_handler_func *proc = timer_ptr->proc;
1264 gdb_client_data client_data = timer_ptr->client_data;
1266 /* Get rid of the timer from the beginning of the list. */
1267 timer_list.first_timer = timer_ptr->next;
1269 /* Delete the timer before calling the callback, not after, in
1270 case the callback itself decides to try deleting the timer
1271 too. */
1272 delete timer_ptr;
1274 /* Call the procedure associated with that timer. */
1275 (proc) (client_data);
1277 return 1;
1280 return 0;