From 39a36629f68e9796d950d9204012fe8272e2d0ef Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Mon, 19 Nov 2018 11:05:13 -0500 Subject: [PATCH] Use std::forward_list for displaced_step_inferior_states Use std::forward_list instead of manually implemented list. This simplifies a bit the code, especially around removal. Regtested on the buildbot. There are some failures as always, but I think they are unrelated. gdb/ChangeLog: * infrun.c (displaced_step_inferior_states): Change type to std::forward_list. (get_displaced_stepping_state): Adjust. (displaced_step_in_progress_any_inferior): Adjust. (add_displaced_stepping_state): Adjust. (remove_displaced_stepping_state): Adjust. --- gdb/ChangeLog | 9 ++++++ gdb/infrun.c | 80 ++++++++++++++++++++++----------------------------- 2 files changed, 44 insertions(+), 45 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4fa0b42657..436446c9f0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2018-11-19 Simon Marchi + + * infrun.c (displaced_step_inferior_states): Change type to + std::forward_list. + (get_displaced_stepping_state): Adjust. + (displaced_step_in_progress_any_inferior): Adjust. + (add_displaced_stepping_state): Adjust. + (remove_displaced_stepping_state): Adjust. + 2018-11-18 Tom Tromey PR build/23814: diff --git a/gdb/infrun.c b/gdb/infrun.c index 9473d1f20f..1c48740404 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1516,39 +1516,36 @@ struct displaced_step_inferior_state /* The list of states of processes involved in displaced stepping presently. */ -static struct displaced_step_inferior_state *displaced_step_inferior_states; +static std::forward_list + displaced_step_inferior_states; /* Get the displaced stepping state of process PID. */ -static struct displaced_step_inferior_state * +static displaced_step_inferior_state * get_displaced_stepping_state (inferior *inf) { - struct displaced_step_inferior_state *state; - - for (state = displaced_step_inferior_states; - state != NULL; - state = state->next) - if (state->inf == inf) - return state; + for (auto *state : displaced_step_inferior_states) + { + if (state->inf == inf) + return state; + } - return NULL; + return nullptr; } /* Returns true if any inferior has a thread doing a displaced step. */ -static int -displaced_step_in_progress_any_inferior (void) +static bool +displaced_step_in_progress_any_inferior () { - struct displaced_step_inferior_state *state; - - for (state = displaced_step_inferior_states; - state != NULL; - state = state->next) - if (state->step_thread != nullptr) - return 1; + for (auto *state : displaced_step_inferior_states) + { + if (state->step_thread != nullptr) + return true; + } - return 0; + return false; } /* Return true if thread represented by PTID is doing a displaced @@ -1584,21 +1581,19 @@ displaced_step_in_progress (inferior *inf) stepping state list, or return a pointer to an already existing entry, if it already exists. Never returns NULL. */ -static struct displaced_step_inferior_state * +static displaced_step_inferior_state * add_displaced_stepping_state (inferior *inf) { - struct displaced_step_inferior_state *state; + displaced_step_inferior_state *state + = get_displaced_stepping_state (inf); - for (state = displaced_step_inferior_states; - state != NULL; - state = state->next) - if (state->inf == inf) - return state; + if (state != nullptr) + return state; state = XCNEW (struct displaced_step_inferior_state); state->inf = inf; - state->next = displaced_step_inferior_states; - displaced_step_inferior_states = state; + + displaced_step_inferior_states.push_front (state); return state; } @@ -1627,24 +1622,19 @@ get_displaced_step_closure_by_addr (CORE_ADDR addr) static void remove_displaced_stepping_state (inferior *inf) { - struct displaced_step_inferior_state *it, **prev_next_p; - gdb_assert (inf != nullptr); - it = displaced_step_inferior_states; - prev_next_p = &displaced_step_inferior_states; - while (it) - { - if (it->inf == inf) - { - *prev_next_p = it->next; - xfree (it); - return; - } - - prev_next_p = &it->next; - it = *prev_next_p; - } + displaced_step_inferior_states.remove_if + ([inf] (displaced_step_inferior_state *state) + { + if (state->inf == inf) + { + xfree (state); + return true; + } + else + return false; + }); } static void -- 2.34.1