1 /* Handling of inferior events for the event loop for GDB, the GNU debugger. 2 Copyright (C) 1999-2017 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 "inferior.h" 22 #include "infrun.h" 23 #include "event-loop.h" 24 #include "event-top.h" 25 #include "inf-loop.h" 26 #include "remote.h" 27 #include "language.h" 28 #include "gdbthread.h" 29 #include "continuations.h" 30 #include "interps.h" 31 #include "top.h" 32 #include "observer.h" 33 34 /* General function to handle events in the inferior. */ 35 36 void 37 inferior_event_handler (enum inferior_event_type event_type, 38 gdb_client_data client_data) 39 { 40 switch (event_type) 41 { 42 case INF_REG_EVENT: 43 fetch_inferior_event (client_data); 44 break; 45 46 case INF_EXEC_COMPLETE: 47 if (!non_stop) 48 { 49 /* Unregister the inferior from the event loop. This is done 50 so that when the inferior is not running we don't get 51 distracted by spurious inferior output. */ 52 if (target_has_execution && target_can_async_p ()) 53 target_async (0); 54 } 55 56 /* Do all continuations associated with the whole inferior (not 57 a particular thread). */ 58 if (!ptid_equal (inferior_ptid, null_ptid)) 59 do_all_inferior_continuations (0); 60 61 /* When running a command list (from a user command, say), these 62 are only run when the command list is all done. */ 63 if (current_ui->async) 64 { 65 check_frame_language_change (); 66 67 /* Don't propagate breakpoint commands errors. Either we're 68 stopping or some command resumes the inferior. The user will 69 be informed. */ 70 TRY 71 { 72 bpstat_do_actions (); 73 } 74 CATCH (e, RETURN_MASK_ALL) 75 { 76 exception_print (gdb_stderr, e); 77 } 78 END_CATCH 79 } 80 break; 81 82 default: 83 printf_unfiltered (_("Event type not recognized.\n")); 84 break; 85 } 86 } 87