diff options
author | Simon Marchi <simon.marchi@ericsson.com> | 2018-11-19 11:05:13 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@ericsson.com> | 2018-11-19 11:57:38 -0500 |
commit | 39a36629f68e9796d950d9204012fe8272e2d0ef (patch) | |
tree | 1776d62d17f8a9e53e8dc185fe6d9609ac246c2b | |
parent | 32641fa9259dbe2e576add1992434f404d1d6881 (diff) | |
download | gdb-39a36629f68e9796d950d9204012fe8272e2d0ef.zip gdb-39a36629f68e9796d950d9204012fe8272e2d0ef.tar.gz gdb-39a36629f68e9796d950d9204012fe8272e2d0ef.tar.bz2 |
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.
-rw-r--r-- | gdb/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/infrun.c | 80 |
2 files changed, 44 insertions, 45 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4fa0b42..436446c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2018-11-19 Simon Marchi <simon.marchi@ericsson.com> + + * 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 <tom@tromey.com> PR build/23814: diff --git a/gdb/infrun.c b/gdb/infrun.c index 9473d1f..1c48740 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_state *> + 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 |