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 <tankut.baris.aktemur@intel.com>
This commit is contained in:
Simon Marchi
2024-11-07 16:16:59 +00:00
committed by Simon Marchi
parent 3470a0e144
commit dceb3cd436
2 changed files with 11 additions and 4 deletions

View File

@@ -27,8 +27,8 @@ struct regcache;
struct thread_info : public intrusive_list_node<thread_info>
{
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<thread_info>
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_info>
/* Thread options GDB requested with QThreadOptions. */
gdb_thread_options thread_options = 0;
private:
process_info *m_process;
};
void remove_thread (struct thread_info *thread);

View File

@@ -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;