X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fprocess-stratum-target.h;h=7e7905bf75028c4c392262366415983a89cf9427;hb=de54374205650be71237ce51ef7981d30ddd78dc;hp=0a799f7a28ef8b049d2e8a1869ab9a8abf136cf1;hpb=3b3dac9b3fd916d73726c7e5508f057574f74d19;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/process-stratum-target.h b/gdb/process-stratum-target.h index 0a799f7a28..7e7905bf75 100644 --- a/gdb/process-stratum-target.h +++ b/gdb/process-stratum-target.h @@ -1,6 +1,6 @@ /* Abstract base class inherited by all process_stratum targets - Copyright (C) 2018 Free Software Foundation, Inc. + Copyright (C) 2018-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -21,19 +21,27 @@ #define PROCESS_STRATUM_TARGET_H #include "target.h" +#include /* Abstract base class inherited by all process_stratum targets. */ class process_stratum_target : public target_ops { public: - process_stratum_target () - { - to_stratum = process_stratum; - } - ~process_stratum_target () override = 0; + strata stratum () const final override { return process_stratum; } + + /* Return a string representation of this target's open connection. + This string is used to distinguish different instances of a given + target type. For example, when remote debugging, the target is + called "remote", but since we may have more than one remote + target open, connection_string() returns the connection serial + connection name, e.g., "localhost:10001", "192.168.0.1:20000", + etc. This string is shown in several places, e.g., in "info + connections" and "info inferiors". */ + virtual const char *connection_string () { return nullptr; } + /* We must default these because they must be implemented by any target that can run. */ bool can_async_p () override { return false; } @@ -46,6 +54,42 @@ public: /* This default implementation always returns target_gdbarch (). */ struct gdbarch *thread_architecture (ptid_t ptid) override; + + /* Default implementations for process_stratum targets. Return true + if there's a selected inferior, false otherwise. */ + bool has_all_memory () override; + bool has_memory () override; + bool has_stack () override; + bool has_registers () override; + bool has_execution (inferior *inf) override; + + /* True if any thread is, or may be executing. We need to track + this separately because until we fully sync the thread list, we + won't know whether the target is fully stopped, even if we see + stop events for all known threads, because any of those threads + may have spawned new threads we haven't heard of yet. */ + bool threads_executing = false; + + /* The connection number. Visible in "info connections". */ + int connection_number = 0; }; +/* Downcast TARGET to process_stratum_target. */ + +static inline process_stratum_target * +as_process_stratum_target (target_ops *target) +{ + gdb_assert (target->stratum () == process_stratum); + return static_cast (target); +} + +/* Return a collection of targets that have non-exited inferiors. */ + +extern std::set 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) */