]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdbserver: add thread -> process backlink
authorSimon Marchi <simon.marchi@efficios.com>
Thu, 7 Nov 2024 16:16:59 +0000 (16:16 +0000)
committerSimon Marchi <simon.marchi@polymtl.ca>
Fri, 8 Nov 2024 14:16:23 +0000 (09:16 -0500)
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>
gdbserver/gdbthread.h
gdbserver/inferiors.cc

index ab59d660a6cbeb41e6bd8dfdbd8a2ad854480df6..94333c491a276978297a0e7dcb9d21b1edab2b3a 100644 (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);
index 93555ec64cee4577330cc5c663ab42d02d23414a..d447808be693cb546a5cd07462d1209f7f70a7d2 100644 (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;