aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTankut Baris Aktemur <tankut.baris.aktemur@intel.com>2020-05-14 13:59:54 +0200
committerTankut Baris Aktemur <tankut.baris.aktemur@intel.com>2020-05-14 13:59:54 +0200
commitd890404b63b8a0b6c28212388f21421d029f6ad2 (patch)
treec9190f12e69c9911b1225f279e918288f2fb352f
parent293b3ebcba93960b4e39b27eeddaa4a01f024d0c (diff)
downloadfsf-binutils-gdb-d890404b63b8a0b6c28212388f21421d029f6ad2.zip
fsf-binutils-gdb-d890404b63b8a0b6c28212388f21421d029f6ad2.tar.gz
fsf-binutils-gdb-d890404b63b8a0b6c28212388f21421d029f6ad2.tar.bz2
gdb: introduce 'all_non_exited_process_targets' and 'switch_to_target_no_thread'
Introduce two new convenience functions: 1. all_non_exited_process_targets: returns a collection of all process stratum targets that have non-exited inferiors on them. Useful for iterating targets. 2. switch_to_target_no_thread: switch the context to the first inferior of the given target, and to no selected thread. gdb/ChangeLog: 2020-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * process-stratum-target.h: Include <set>. (all_non_exited_process_targets, switch_to_target_no_thread): New function declarations. * process-stratum-target.c (all_non_exited_process_targets) (switch_to_target_no_thread): New function implementations.
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/process-stratum-target.c25
-rw-r--r--gdb/process-stratum-target.h10
3 files changed, 43 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c27876b..9f93948 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
2020-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+ * process-stratum-target.h: Include <set>.
+ (all_non_exited_process_targets, switch_to_target_no_thread): New
+ function declarations.
+ * process-stratum-target.c (all_non_exited_process_targets)
+ (switch_to_target_no_thread): New function implementations.
+
+2020-05-14 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
* infrun.c (handle_inferior_event): Extract out a piece of code
into...
(mark_non_executing_threads): ...this new function.
diff --git a/gdb/process-stratum-target.c b/gdb/process-stratum-target.c
index f3fd9ee..9eff5ab 100644
--- a/gdb/process-stratum-target.c
+++ b/gdb/process-stratum-target.c
@@ -83,3 +83,28 @@ process_stratum_target::has_execution (inferior *inf)
through hoops. */
return inf->pid != 0;
}
+
+/* See process-stratum-target.h. */
+
+std::set<process_stratum_target *>
+all_non_exited_process_targets ()
+{
+ /* Inferiors may share targets. To eliminate duplicates, use a set. */
+ std::set<process_stratum_target *> targets;
+ for (inferior *inf : all_non_exited_inferiors ())
+ targets.insert (inf->process_target ());
+
+ return targets;
+}
+
+/* See process-stratum-target.h. */
+
+void
+switch_to_target_no_thread (process_stratum_target *target)
+{
+ for (inferior *inf : all_inferiors (target))
+ {
+ switch_to_inferior_no_thread (inf);
+ break;
+ }
+}
diff --git a/gdb/process-stratum-target.h b/gdb/process-stratum-target.h
index 1be0210..7e7905b 100644
--- a/gdb/process-stratum-target.h
+++ b/gdb/process-stratum-target.h
@@ -21,6 +21,7 @@
#define PROCESS_STRATUM_TARGET_H
#include "target.h"
+#include <set>
/* Abstract base class inherited by all process_stratum targets. */
@@ -82,4 +83,13 @@ as_process_stratum_target (target_ops *target)
return static_cast<process_stratum_target *> (target);
}
+/* Return a collection of targets that have non-exited inferiors. */
+
+extern std::set<process_stratum_target *> all_non_exited_process_targets ();
+
+/* Switch to the first inferior (and program space) of TARGET, and
+ switch to no thread selected. */
+
+extern void switch_to_target_no_thread (process_stratum_target *target);
+
#endif /* !defined (PROCESS_STRATUM_TARGET_H) */