From dceb3cd436e0240857ff914d3f11872a78d0c63c Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Thu, 7 Nov 2024 16:16:59 +0000 Subject: gdbserver: add thread -> process backlink In a few spots, we need to get to a process from a thread. Having a backlink from thread to process is cheap and makes the operation trivial, add it. Change-Id: I8a94b2919494b1dcaf954de2246386794308aa82 Reviewed-By: Tankut Baris Aktemur --- gdbserver/gdbthread.h | 11 +++++++++-- gdbserver/inferiors.cc | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'gdbserver') diff --git a/gdbserver/gdbthread.h b/gdbserver/gdbthread.h index ab59d66..94333c4 100644 --- a/gdbserver/gdbthread.h +++ b/gdbserver/gdbthread.h @@ -27,8 +27,8 @@ struct regcache; struct thread_info : public intrusive_list_node { - thread_info (ptid_t id, void *target_data) - : id (id), target_data (target_data) + thread_info (ptid_t id, process_info *process, void *target_data) + : id (id), target_data (target_data), m_process (process) {} ~thread_info () @@ -36,6 +36,10 @@ struct thread_info : public intrusive_list_node free_register_cache (this->regcache_data); } + /* Return the process owning this thread. */ + process_info *process () const + { return m_process; } + /* The id of this thread. */ ptid_t id; @@ -81,6 +85,9 @@ struct thread_info : public intrusive_list_node /* Thread options GDB requested with QThreadOptions. */ gdb_thread_options thread_options = 0; + +private: + process_info *m_process; }; void remove_thread (struct thread_info *thread); diff --git a/gdbserver/inferiors.cc b/gdbserver/inferiors.cc index 93555ec..d447808 100644 --- a/gdbserver/inferiors.cc +++ b/gdbserver/inferiors.cc @@ -44,8 +44,8 @@ add_thread (ptid_t thread_id, void *target_data) process_info *process = find_process_pid (thread_id.pid ()); gdb_assert (process != nullptr); - auto &new_thread = process->thread_list ().emplace_back (thread_id, - target_data); + auto &new_thread + = process->thread_list ().emplace_back (thread_id, process, target_data); bool inserted = process->thread_map ().insert ({thread_id, &new_thread}).second; -- cgit v1.1