aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2017-12-02 20:36:40 -0500
committerSimon Marchi <simon.marchi@polymtl.ca>2017-12-02 20:36:40 -0500
commit39a64da5fc9ce6decd7e5ba0bacfeb2144d2bd63 (patch)
tree76c206e278d433286c9260f25b93c228454b4aa5 /gdb
parenta1385b7b881d2b129f8c26fac8ad20bc406a1a6d (diff)
downloadgdb-39a64da5fc9ce6decd7e5ba0bacfeb2144d2bd63.zip
gdb-39a64da5fc9ce6decd7e5ba0bacfeb2144d2bd63.tar.gz
gdb-39a64da5fc9ce6decd7e5ba0bacfeb2144d2bd63.tar.bz2
Remove usages of find_inferior in select_event_lwp
Replace with find_thread/for_each_thread. I inlined the callbacks, because they are relatively simple. gdb/gdbserver/ChangeLog: * linux-low.c (select_singlestep_lwp_callback): Remove. (count_events_callback): Remove. (select_event_lwp_callback): Remove. (select_event_lwp): Use find_thread/for_each_thread.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/gdbserver/ChangeLog7
-rw-r--r--gdb/gdbserver/linux-low.c93
2 files changed, 38 insertions, 62 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 068c0fd..7c59c46 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,5 +1,12 @@
2017-12-02 Simon Marchi <simon.marchi@polymtl.ca>
+ * linux-low.c (select_singlestep_lwp_callback): Remove.
+ (count_events_callback): Remove.
+ (select_event_lwp_callback): Remove.
+ (select_event_lwp): Use find_thread/for_each_thread.
+
+2017-12-02 Simon Marchi <simon.marchi@polymtl.ca>
+
* linux-low.c (not_stopped_callback): Return bool, take filter
argument directly.
(linux_wait_for_event_filtered): Use find_thread.
diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
index 05cdd33..7b176ec 100644
--- a/gdb/gdbserver/linux-low.c
+++ b/gdb/gdbserver/linux-low.c
@@ -2818,64 +2818,11 @@ linux_wait_for_event (ptid_t ptid, int *wstatp, int options)
return linux_wait_for_event_filtered (ptid, ptid, wstatp, options);
}
-/* Count the LWP's that have had events. */
-
-static int
-count_events_callback (thread_info *thread, void *data)
-{
- struct lwp_info *lp = get_thread_lwp (thread);
- int *count = (int *) data;
-
- gdb_assert (count != NULL);
-
- /* Count only resumed LWPs that have an event pending. */
- if (thread->last_status.kind == TARGET_WAITKIND_IGNORE
- && lp->status_pending_p)
- (*count)++;
-
- return 0;
-}
-
-/* Select the LWP (if any) that is currently being single-stepped. */
-
-static int
-select_singlestep_lwp_callback (thread_info *thread, void *data)
-{
- struct lwp_info *lp = get_thread_lwp (thread);
-
- if (thread->last_status.kind == TARGET_WAITKIND_IGNORE
- && thread->last_resume_kind == resume_step
- && lp->status_pending_p)
- return 1;
- else
- return 0;
-}
-
-/* Select the Nth LWP that has had an event. */
-
-static int
-select_event_lwp_callback (thread_info *thread, void *data)
-{
- struct lwp_info *lp = get_thread_lwp (thread);
- int *selector = (int *) data;
-
- gdb_assert (selector != NULL);
-
- /* Select only resumed LWPs that have an event pending. */
- if (thread->last_status.kind == TARGET_WAITKIND_IGNORE
- && lp->status_pending_p)
- if ((*selector)-- == 0)
- return 1;
-
- return 0;
-}
-
/* Select one LWP out of those that have events pending. */
static void
select_event_lwp (struct lwp_info **orig_lp)
{
- int num_events = 0;
int random_selector;
struct thread_info *event_thread = NULL;
@@ -2889,10 +2836,15 @@ select_event_lwp (struct lwp_info **orig_lp)
would report it to the user as a random signal. */
if (!non_stop)
{
- event_thread
- = (struct thread_info *) find_inferior (&all_threads,
- select_singlestep_lwp_callback,
- NULL);
+ event_thread = find_thread ([] (thread_info *thread)
+ {
+ lwp_info *lp = get_thread_lwp (thread);
+
+ return (thread->last_status.kind == TARGET_WAITKIND_IGNORE
+ && thread->last_resume_kind == resume_step
+ && lp->status_pending_p);
+ });
+
if (event_thread != NULL)
{
if (debug_threads)
@@ -2906,7 +2858,16 @@ select_event_lwp (struct lwp_info **orig_lp)
which have had events. */
/* First see how many events we have. */
- find_inferior (&all_threads, count_events_callback, &num_events);
+ int num_events = 0;
+ for_each_thread ([&] (thread_info *thread)
+ {
+ lwp_info *lp = get_thread_lwp (thread);
+
+ /* Count only resumed LWPs that have an event pending. */
+ if (thread->last_status.kind == TARGET_WAITKIND_IGNORE
+ && lp->status_pending_p)
+ num_events++;
+ });
gdb_assert (num_events > 0);
/* Now randomly pick a LWP out of those that have had
@@ -2918,10 +2879,18 @@ select_event_lwp (struct lwp_info **orig_lp)
debug_printf ("SEL: Found %d SIGTRAP events, selecting #%d\n",
num_events, random_selector);
- event_thread
- = (struct thread_info *) find_inferior (&all_threads,
- select_event_lwp_callback,
- &random_selector);
+ event_thread = find_thread ([&] (thread_info *thread)
+ {
+ lwp_info *lp = get_thread_lwp (thread);
+
+ /* Select only resumed LWPs that have an event pending. */
+ if (thread->last_status.kind == TARGET_WAITKIND_IGNORE
+ && lp->status_pending_p)
+ if (random_selector-- == 0)
+ return true;
+
+ return false;
+ });
}
if (event_thread != NULL)