aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2020-01-10 20:05:44 +0000
committerPedro Alves <palves@redhat.com>2020-01-10 20:05:44 +0000
commit5018ce90c1205d79f29adf954b0fd5e613d08430 (patch)
treedb2d71399b20052fd76eb3a4ca9bba47485d3eae /gdb
parent74375d182e992778ef8701278c02a742db6be77e (diff)
downloadgdb-5018ce90c1205d79f29adf954b0fd5e613d08430.zip
gdb-5018ce90c1205d79f29adf954b0fd5e613d08430.tar.gz
gdb-5018ce90c1205d79f29adf954b0fd5e613d08430.tar.bz2
Make target_ops::has_execution take an 'inferior *' instead of a ptid_t
With the multi-target work, each inferior will have its own target stack, so to call a target method, we'll need to make sure that the inferior in question is the current one, otherwise target->beneath() calls will find the target beneath in the wrong inferior. In some places, it's much more convenient to be able to check whether an inferior has execution without having to switch to it in order to call target_has_execution on the right inferior/target stack, to avoid side effects with switching inferior/thread/program space. The current target_ops::has_execution method takes a ptid_t as parameter, which, in a multi-target world, isn't sufficient to identify the target. This patch prepares to address that, by changing the parameter to an inferior pointer instead. From the inferior, we'll be able to query its target stack to tell which target is beneath. Also adds a new inferior::has_execution() method to make callers a bit more natural to read. gdb/ChangeLog: 2020-01-10 Pedro Alves <palves@redhat.com> * corelow.c (core_target::has_execution): Change parameter type to inferior pointer. * inferior.c (number_of_live_inferiors): Use inferior::has_execution instead of target_has_execution_1. * inferior.h (inferior::has_execution): New. * linux-thread-db.c (thread_db_target::update_thread_list): Use inferior::has_execution instead of target_has_execution_1. * process-stratum-target.c (process_stratum_target::has_execution): Change parameter type to inferior pointer. Check the inferior's PID instead of inferior_ptid. * process-stratum-target.h (process_stratum_target::has_execution): Change parameter type to inferior pointer. * record-full.c (record_full_core_target::has_execution): Change parameter type to inferior pointer. * target.c (target_has_execution_1): Change parameter type to inferior pointer. (target_has_execution_current): Adjust. * target.h (target_ops::has_execution): Change parameter type to inferior pointer. (target_has_execution_1): Change parameter type to inferior pointer. Change return type to bool. * tracefile.h (tracefile_target::has_execution): Change parameter type to inferior pointer.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog28
-rw-r--r--gdb/corelow.c2
-rw-r--r--gdb/inferior.c2
-rw-r--r--gdb/inferior.h3
-rw-r--r--gdb/linux-thread-db.c2
-rw-r--r--gdb/process-stratum-target.c8
-rw-r--r--gdb/process-stratum-target.h2
-rw-r--r--gdb/record-full.c4
-rw-r--r--gdb/target.c12
-rw-r--r--gdb/target.h7
-rw-r--r--gdb/tracefile.h2
11 files changed, 52 insertions, 20 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1100e42..6e97bd4 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,33 @@
2020-01-10 Pedro Alves <palves@redhat.com>
+ * corelow.c (core_target::has_execution): Change parameter type to
+ inferior pointer.
+ * inferior.c (number_of_live_inferiors): Use
+ inferior::has_execution instead of target_has_execution_1.
+ * inferior.h (inferior::has_execution): New.
+ * linux-thread-db.c (thread_db_target::update_thread_list): Use
+ inferior::has_execution instead of target_has_execution_1.
+ * process-stratum-target.c
+ (process_stratum_target::has_execution): Change parameter type to
+ inferior pointer. Check the inferior's PID instead of
+ inferior_ptid.
+ * process-stratum-target.h
+ (process_stratum_target::has_execution): Change parameter type to
+ inferior pointer.
+ * record-full.c (record_full_core_target::has_execution): Change
+ parameter type to inferior pointer.
+ * target.c (target_has_execution_1): Change parameter type to
+ inferior pointer.
+ (target_has_execution_current): Adjust.
+ * target.h (target_ops::has_execution): Change parameter type to
+ inferior pointer.
+ (target_has_execution_1): Change parameter type to inferior
+ pointer. Change return type to bool.
+ * tracefile.h (tracefile_target::has_execution): Change parameter
+ type to inferior pointer.
+
+2020-01-10 Pedro Alves <palves@redhat.com>
+
* exceptions.c (print_flush): Remove current_top_target() check.
2020-01-10 Pedro Alves <palves@redhat.com>
diff --git a/gdb/corelow.c b/gdb/corelow.c
index 0ec70c2..74f6608 100644
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -94,7 +94,7 @@ public:
bool has_memory () override;
bool has_stack () override;
bool has_registers () override;
- bool has_execution (ptid_t) override { return false; }
+ bool has_execution (inferior *inf) override { return false; }
bool info_proc (const char *, enum info_proc_what) override;
diff --git a/gdb/inferior.c b/gdb/inferior.c
index 9882925..3969ace 100644
--- a/gdb/inferior.c
+++ b/gdb/inferior.c
@@ -345,7 +345,7 @@ number_of_live_inferiors (void)
int num_inf = 0;
for (inferior *inf : all_non_exited_inferiors ())
- if (target_has_execution_1 (ptid_t (inf->pid)))
+ if (inf->has_execution ())
for (thread_info *tp ATTRIBUTE_UNUSED : inf->non_exited_threads ())
{
/* Found a live thread in this inferior, go to the next
diff --git a/gdb/inferior.h b/gdb/inferior.h
index 3baac6e..fe94a01 100644
--- a/gdb/inferior.h
+++ b/gdb/inferior.h
@@ -339,6 +339,9 @@ public:
/* Returns true if we can delete this inferior. */
bool deletable () const { return refcount () == 0; }
+ bool has_execution ()
+ { return target_has_execution_1 (this); }
+
/* Pointer to next inferior in singly-linked list of inferiors. */
struct inferior *next = NULL;
diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c
index 54d96e9..6290889 100644
--- a/gdb/linux-thread-db.c
+++ b/gdb/linux-thread-db.c
@@ -1622,7 +1622,7 @@ thread_db_target::update_thread_list ()
stop. That uses thread_db entry points that do not walk
libpthread's thread list, so should be safe, as well as more
efficient. */
- if (target_has_execution_1 (thread->ptid))
+ if (thread->inf->has_execution ())
continue;
thread_db_find_new_threads_1 (thread);
diff --git a/gdb/process-stratum-target.c b/gdb/process-stratum-target.c
index d6bc6ab..658229f 100644
--- a/gdb/process-stratum-target.c
+++ b/gdb/process-stratum-target.c
@@ -77,9 +77,9 @@ 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;
}
diff --git a/gdb/process-stratum-target.h b/gdb/process-stratum-target.h
index 9cd2cf2..741e67b 100644
--- a/gdb/process-stratum-target.h
+++ b/gdb/process-stratum-target.h
@@ -50,7 +50,7 @@ public:
bool has_memory () override;
bool has_stack () override;
bool has_registers () override;
- bool has_execution (ptid_t the_ptid) override;
+ bool has_execution (inferior *inf) override;
};
#endif /* !defined (PROCESS_STRATUM_TARGET_H) */
diff --git a/gdb/record-full.c b/gdb/record-full.c
index c5ef590..1fd72d5 100644
--- a/gdb/record-full.c
+++ b/gdb/record-full.c
@@ -319,7 +319,7 @@ public:
struct bp_target_info *,
enum remove_bp_reason) override;
- bool has_execution (ptid_t) override;
+ bool has_execution (inferior *inf) override;
};
static record_full_target record_full_ops;
@@ -2244,7 +2244,7 @@ record_full_core_target::remove_breakpoint (struct gdbarch *gdbarch,
/* "has_execution" method for prec over corefile. */
bool
-record_full_core_target::has_execution (ptid_t the_ptid)
+record_full_core_target::has_execution (inferior *inf)
{
return true;
}
diff --git a/gdb/target.c b/gdb/target.c
index e3e30af..7e7e875 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -223,20 +223,20 @@ target_has_registers_1 (void)
return 0;
}
-int
-target_has_execution_1 (ptid_t the_ptid)
+bool
+target_has_execution_1 (inferior *inf)
{
for (target_ops *t = current_top_target (); t != NULL; t = t->beneath ())
- if (t->has_execution (the_ptid))
- return 1;
+ if (t->has_execution (inf))
+ return true;
- return 0;
+ return false;
}
int
target_has_execution_current (void)
{
- return target_has_execution_1 (inferior_ptid);
+ return target_has_execution_1 (current_inferior ());
}
/* This is used to implement the various target commands. */
diff --git a/gdb/target.h b/gdb/target.h
index 1ec7b90..b05a971 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -686,7 +686,7 @@ struct target_ops
virtual bool has_memory () { return false; }
virtual bool has_stack () { return false; }
virtual bool has_registers () { return false; }
- virtual bool has_execution (ptid_t) { return false; }
+ virtual bool has_execution (inferior *inf) { return false; }
/* Control thread execution. */
virtual thread_control_capabilities get_thread_control_capabilities ()
@@ -1790,9 +1790,10 @@ extern int target_has_registers_1 (void);
case this will become true after to_create_inferior or
to_attach. */
-extern int target_has_execution_1 (ptid_t);
+extern bool target_has_execution_1 (inferior *inf);
-/* Like target_has_execution_1, but always passes inferior_ptid. */
+/* Like target_has_execution_1, but always passes
+ current_inferior(). */
extern int target_has_execution_current (void);
diff --git a/gdb/tracefile.h b/gdb/tracefile.h
index 8f9dc0e..9c7fdea 100644
--- a/gdb/tracefile.h
+++ b/gdb/tracefile.h
@@ -127,7 +127,7 @@ public:
bool has_memory () override;
bool has_stack () override;
bool has_registers () override;
- bool has_execution (ptid_t) override { return false; }
+ bool has_execution (inferior *inf) override { return false; }
bool thread_alive (ptid_t ptid) override;
};