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