aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2024-11-07 16:15:43 +0000
committerSimon Marchi <simon.marchi@polymtl.ca>2024-11-08 09:16:23 -0500
commit2500e7d7d2464e461cc6b6f9ab23ea12338832f9 (patch)
tree1b10d4891519a0289c76f2c986e91c2a087bcebe
parent9618dbfe52fa98e224e53e18626fbe08e9c892a7 (diff)
downloadgdb-2500e7d7d2464e461cc6b6f9ab23ea12338832f9.zip
gdb-2500e7d7d2464e461cc6b6f9ab23ea12338832f9.tar.gz
gdb-2500e7d7d2464e461cc6b6f9ab23ea12338832f9.tar.bz2
gdbserver: make remove_thread a method of process_info
Same idea as the previous patch, but for `remove_thread`. Change-Id: I7e227655be5fcf29a3256e8389eb32051f27882d Reviewed-By: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
-rw-r--r--gdbserver/gdbthread.h2
-rw-r--r--gdbserver/inferiors.cc9
-rw-r--r--gdbserver/inferiors.h5
-rw-r--r--gdbserver/linux-low.cc4
-rw-r--r--gdbserver/netbsd-low.cc2
-rw-r--r--gdbserver/win32-low.cc2
6 files changed, 13 insertions, 11 deletions
diff --git a/gdbserver/gdbthread.h b/gdbserver/gdbthread.h
index d00dc04..b45dc36 100644
--- a/gdbserver/gdbthread.h
+++ b/gdbserver/gdbthread.h
@@ -90,8 +90,6 @@ private:
process_info *m_process;
};
-void remove_thread (struct thread_info *thread);
-
/* Return a pointer to the first thread, or NULL if there isn't one. */
struct thread_info *get_first_thread (void);
diff --git a/gdbserver/inferiors.cc b/gdbserver/inferiors.cc
index 7d9152d..8ca6d64 100644
--- a/gdbserver/inferiors.cc
+++ b/gdbserver/inferiors.cc
@@ -100,23 +100,22 @@ find_any_thread_of_pid (int pid)
}
void
-remove_thread (struct thread_info *thread)
+process_info::remove_thread (thread_info *thread)
{
if (thread->btrace != NULL)
target_disable_btrace (thread->btrace);
discard_queued_stop_replies (ptid_of (thread));
- process_info *process = get_thread_process (thread);
- gdb_assert (process != nullptr);
if (current_thread == thread)
switch_to_thread (nullptr);
/* We should not try to remove a thread that was not added. */
- int num_erased = process->thread_map ().erase (thread->id);
+ gdb_assert (thread->process () == this);
+ int num_erased = m_ptid_thread_map.erase (thread->id);
gdb_assert (num_erased > 0);
- process->thread_list ().erase (process->thread_list ().iterator_to (*thread));
+ m_thread_list.erase (m_thread_list.iterator_to (*thread));
}
void *
diff --git a/gdbserver/inferiors.h b/gdbserver/inferiors.h
index fd3ee28..002dd2a 100644
--- a/gdbserver/inferiors.h
+++ b/gdbserver/inferiors.h
@@ -107,6 +107,11 @@ struct process_info : public intrusive_list_node<process_info>
/* Add a thread with id ID to this process. */
thread_info *add_thread (ptid_t id, void *target_data);
+ /* Remove thread THREAD.
+
+ THREAD must be part of this process' thread list. */
+ void remove_thread (thread_info *thread);
+
private:
/* This processes' thread list, sorted by creation order. */
owning_intrusive_list<thread_info> m_thread_list;
diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc
index a21d562..924536c 100644
--- a/gdbserver/linux-low.cc
+++ b/gdbserver/linux-low.cc
@@ -398,11 +398,11 @@ linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine)
void
linux_process_target::delete_lwp (lwp_info *lwp)
{
- struct thread_info *thr = get_lwp_thread (lwp);
+ thread_info *thr = get_lwp_thread (lwp);
threads_debug_printf ("deleting %ld", lwpid_of (thr));
- remove_thread (thr);
+ thr->process ()->remove_thread (thr);
low_delete_thread (lwp->arch_private);
diff --git a/gdbserver/netbsd-low.cc b/gdbserver/netbsd-low.cc
index 53cb6fa..332186f 100644
--- a/gdbserver/netbsd-low.cc
+++ b/gdbserver/netbsd-low.cc
@@ -303,7 +303,7 @@ netbsd_wait (ptid_t ptid, struct target_waitstatus *ourstatus,
/* NetBSD does not store an LWP exit status. */
ourstatus->set_thread_exited (0);
- remove_thread (thr);
+ thr->process ()->remove_thread (thr);
}
return wptid;
}
diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc
index 3236bb9..18bdc12 100644
--- a/gdbserver/win32-low.cc
+++ b/gdbserver/win32-low.cc
@@ -188,7 +188,7 @@ delete_thread_info (thread_info *thread)
{
windows_thread_info *th = (windows_thread_info *) thread_target_data (thread);
- remove_thread (thread);
+ thread->process ()->remove_thread (thread);
delete th;
}