/* True if preparing a displaced step ever failed. If so, we won't
try displaced stepping for this inferior again. */
bool failed_before;
+
+ bool unavailable = false;
};
/* Per-thread displaced stepping state. */
target_pid_to_str (tp->ptid).c_str ());
global_thread_step_over_chain_enqueue (tp);
+ tp->inf->displaced_step_state.unavailable = true;
return DISPLACED_STEP_PREPARE_STATUS_UNAVAILABLE;
}
"infrun: stealing list of %d threads to step from global queue\n",
thread_step_over_chain_length (threads_to_step));
+ for (inferior *inf : all_inferiors ())
+ inf->displaced_step_state.unavailable = false;
+
for (tp = threads_to_step; tp != NULL; tp = next)
{
struct execution_control_state ecss;
if (!target_is_non_stop_p () && !step_what)
continue;
+ if (tp->inf->displaced_step_state.unavailable)
+ {
+ global_thread_step_over_chain_enqueue (tp);
+ continue;
+ }
+
switch_to_thread (tp);
reset_ecs (ecs, tp);
keep_going_pass_signal (ecs);