static int have_threads (ptid_t ptid) { int pid = ptid_get_pid (ptid); return iterate_over_threads (have_threads_callback, &pid) != NULL; }
static enum target_signal find_stop_signal (void) { struct thread_info *info = iterate_over_threads (find_signalled_thread, NULL); if (info) return info->stop_signal; else return TARGET_SIGNAL_0; }
static enum gdb_signal find_stop_signal (void) { struct thread_info *info = iterate_over_threads (find_signalled_thread, NULL); if (info) return info->suspend.stop_signal; else return GDB_SIGNAL_0; }
static void fbsd_resume (struct target_ops *ops, ptid_t ptid, int step, enum gdb_signal signo) { if (debug_fbsd_lwp) fprintf_unfiltered (gdb_stdlog, "FLWP: fbsd_resume for ptid (%d, %ld, %ld)\n", ptid_get_pid (ptid), ptid_get_lwp (ptid), ptid_get_tid (ptid)); if (ptid_lwp_p (ptid)) { /* If ptid is a specific LWP, suspend all other LWPs in the process. */ iterate_over_threads (resume_one_thread_cb, &ptid); } else { /* If ptid is a wildcard, resume all matching threads (they won't run until the process is continued however). */ iterate_over_threads (resume_all_threads_cb, &ptid); ptid = inferior_ptid; } super_resume (ops, ptid, step, signo); }
static void mi_on_resume (ptid_t ptid) { struct thread_info *tp = NULL; if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid)) tp = inferior_thread (); else tp = find_thread_ptid (ptid); /* Suppress output while calling an inferior function. */ if (tp->control.in_infcall) return; /* To cater for older frontends, emit ^running, but do it only once per each command. We do it here, since at this point we know that the target was successfully resumed, and in non-async mode, we won't return back to MI interpreter code until the target is done running, so delaying the output of "^running" until then will make it impossible for frontend to know what's going on. In future (MI3), we'll be outputting "^done" here. */ if (!running_result_record_printed && mi_proceeded) { fprintf_unfiltered (raw_stdout, "%s^running\n", current_token ? current_token : ""); } if (ptid_get_pid (ptid) == -1) fprintf_unfiltered (raw_stdout, "*running,thread-id=\"all\"\n"); else if (ptid_is_pid (ptid)) { int count = 0; /* Backwards compatibility. If there's only one inferior, output "all", otherwise, output each resumed thread individually. */ iterate_over_inferiors (mi_inferior_count, &count); if (count == 1) fprintf_unfiltered (raw_stdout, "*running,thread-id=\"all\"\n"); else iterate_over_threads (mi_output_running_pid, &ptid); } else { struct thread_info *ti = find_thread_ptid (ptid); gdb_assert (ti); fprintf_unfiltered (raw_stdout, "*running,thread-id=\"%d\"\n", ti->num); } if (!running_result_record_printed && mi_proceeded) { running_result_record_printed = 1; /* This is what gdb used to do historically -- printing prompt even if it cannot actually accept any input. This will be surely removed for MI3, and may be removed even earlier. SYNC_EXECUTION is checked here because we only need to emit a prompt if a synchronous command was issued when the target is async. */ if (!target_is_async_p () || sync_execution) fputs_unfiltered ("(gdb) \n", raw_stdout); } gdb_flush (raw_stdout); }