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