X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fprocess-stratum-target.c;h=9eff5ab56eaafe8c3963c914c83f67939e997421;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=e2e8d6c4ff73a44ae6cd2007c5391dce8339d6a5;hpb=42a4f53d2bf8938c2aeda9f52be7a20534b214a9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/process-stratum-target.c b/gdb/process-stratum-target.c index e2e8d6c4ff..9eff5ab56e 100644 --- a/gdb/process-stratum-target.c +++ b/gdb/process-stratum-target.c @@ -1,6 +1,6 @@ /* Abstract base class inherited by all process_stratum targets - Copyright (C) 2018-2019 Free Software Foundation, Inc. + Copyright (C) 2018-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -29,13 +29,13 @@ struct address_space * process_stratum_target::thread_address_space (ptid_t ptid) { /* Fall-back to the "main" address space of the inferior. */ - inferior *inf = find_inferior_ptid (ptid); + inferior *inf = find_inferior_ptid (this, ptid); if (inf == NULL || inf->aspace == NULL) internal_error (__FILE__, __LINE__, _("Can't determine the current " "address space of thread %s\n"), - target_pid_to_str (ptid)); + target_pid_to_str (ptid).c_str ()); return inf->aspace; } @@ -43,7 +43,7 @@ process_stratum_target::thread_address_space (ptid_t ptid) struct gdbarch * process_stratum_target::thread_architecture (ptid_t ptid) { - inferior *inf = find_inferior_ptid (ptid); + inferior *inf = find_inferior_ptid (this, ptid); gdb_assert (inf != NULL); return inf->gdbarch; } @@ -77,9 +77,34 @@ process_stratum_target::has_registers () } bool -process_stratum_target::has_execution (ptid_t the_ptid) +process_stratum_target::has_execution (inferior *inf) { - /* If there's no thread selected, then we can't make it run through - hoops. */ - return the_ptid != null_ptid; + /* If there's a process running already, we can't make it run + through hoops. */ + return inf->pid != 0; +} + +/* See process-stratum-target.h. */ + +std::set +all_non_exited_process_targets () +{ + /* Inferiors may share targets. To eliminate duplicates, use a set. */ + std::set 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; + } }