aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@ericsson.com>2018-11-19 11:05:13 -0500
committerSimon Marchi <simon.marchi@ericsson.com>2018-11-19 11:57:38 -0500
commit39a36629f68e9796d950d9204012fe8272e2d0ef (patch)
tree1776d62d17f8a9e53e8dc185fe6d9609ac246c2b
parent32641fa9259dbe2e576add1992434f404d1d6881 (diff)
downloadgdb-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/ChangeLog9
-rw-r--r--gdb/infrun.c80
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