X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Finfrun.c;fp=gdb%2Finfrun.c;h=ec06e5703bea7f6ea5d295320bebbb17e8e8b5e5;hb=d6864985e9af77d15e7310b1066543eb8bdc5bba;hp=17c342be50971433ad82a36e84be7dad2f8a97f2;hpb=e088209c13199ead5a05f7c07be029b2e329cf8e;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/infrun.c b/gdb/infrun.c index 17c342be50..ec06e5703b 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1748,6 +1748,7 @@ displaced_step_prepare_throw (thread_info *tp) 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; } @@ -1937,6 +1938,9 @@ start_step_over (void) "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; @@ -1986,6 +1990,12 @@ start_step_over (void) 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);