aboutsummaryrefslogtreecommitdiff
path: root/gdb/record-btrace.c
diff options
context:
space:
mode:
authorMarkus Metzger <markus.t.metzger@intel.com>2020-03-13 08:52:49 +0100
committerMarkus Metzger <markus.t.metzger@intel.com>2020-04-21 15:56:23 +0200
commitd89edf9b811ac3c5643b8a866c238a93f35a5e6c (patch)
tree0941899b8eb3ed9cc108c7d55a786cbf58164424 /gdb/record-btrace.c
parent5897fd4994effd21cbe951e6d2c417097adea162 (diff)
downloadfsf-binutils-gdb-d89edf9b811ac3c5643b8a866c238a93f35a5e6c.zip
fsf-binutils-gdb-d89edf9b811ac3c5643b8a866c238a93f35a5e6c.tar.gz
fsf-binutils-gdb-d89edf9b811ac3c5643b8a866c238a93f35a5e6c.tar.bz2
gdb, btrace: make record-btrace per-inferior
When there is more than one inferior, the "record btrace" command should only apply to the current inferior. gdb/ChangeLog: 2020-03-19 Markus Metzger <markus.t.metzger@intel.com> * record-btrace.c (record_btrace_enable_warn): Ignore thread if its inferior is not recorded by us. (record_btrace_target_open): Replace call to all_non_exited_threads () with call to current_inferior ()->non_exited_threads (). (record_btrace_target::stop_recording): Likewise. (record_btrace_target::close): Likewise. (record_btrace_target::wait): Likewise. (record_btrace_target::record_stop_replaying): Likewise. gdb/testsuite/ChangeLog: 2020-03-19 Markus Metzger <markus.t.metzger@intel.com> * gdb.btrace/multi-inferior.c: New test. * gdb.btrace/multi-inferior.exp: New file.
Diffstat (limited to 'gdb/record-btrace.c')
-rw-r--r--gdb/record-btrace.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/gdb/record-btrace.c b/gdb/record-btrace.c
index 9b04d06..226d56d 100644
--- a/gdb/record-btrace.c
+++ b/gdb/record-btrace.c
@@ -284,6 +284,11 @@ require_btrace (void)
static void
record_btrace_enable_warn (struct thread_info *tp)
{
+ /* Ignore this thread if its inferior is not recorded by us. */
+ target_ops *rec = tp->inf->target_at (record_stratum);
+ if (rec != &record_btrace_ops)
+ return;
+
try
{
btrace_enable (tp, &record_btrace_conf);
@@ -387,7 +392,7 @@ record_btrace_target_open (const char *args, int from_tty)
if (!target_has_execution)
error (_("The program is not being run."));
- for (thread_info *tp : all_non_exited_threads ())
+ for (thread_info *tp : current_inferior ()->non_exited_threads ())
if (args == NULL || *args == 0 || number_is_in_list (args, tp->global_num))
{
btrace_enable (tp, &record_btrace_conf);
@@ -409,7 +414,7 @@ record_btrace_target::stop_recording ()
record_btrace_auto_disable ();
- for (thread_info *tp : all_non_exited_threads ())
+ for (thread_info *tp : current_inferior ()->non_exited_threads ())
if (tp->btrace.target != NULL)
btrace_disable (tp);
}
@@ -443,7 +448,7 @@ record_btrace_target::close ()
/* We should have already stopped recording.
Tear down btrace in case we have not. */
- for (thread_info *tp : all_non_exited_threads ())
+ for (thread_info *tp : current_inferior ()->non_exited_threads ())
btrace_teardown (tp);
}
@@ -2630,7 +2635,7 @@ record_btrace_target::wait (ptid_t ptid, struct target_waitstatus *status,
/* Stop all other threads. */
if (!target_is_non_stop_p ())
{
- for (thread_info *tp : all_non_exited_threads ())
+ for (thread_info *tp : current_inferior ()->non_exited_threads ())
record_btrace_cancel_resume (tp);
}
@@ -2867,7 +2872,7 @@ record_btrace_target::goto_record (ULONGEST insn)
void
record_btrace_target::record_stop_replaying ()
{
- for (thread_info *tp : all_non_exited_threads ())
+ for (thread_info *tp : current_inferior ()->non_exited_threads ())
record_btrace_stop_replaying (tp);
}