From 03d469572472d5c59d8a35030bb1b8072c217dc7 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 22 Sep 2014 11:12:30 +0100 Subject: [PATCH] infrun.c:user_visible_resume_ptid: Don't check singlestep_breakpoints_inserted_p What matters for this function, is whether the user requested a "step", for "set scheduler-locking step", not whether GDB is doing an internal step for some reason. /* Return a ptid representing the set of threads that we will proceed, in the perspective of the user/frontend. */ extern ptid_t user_visible_resume_ptid (int step); Therefore, the check for singlestep_breakpoints_inserted_p is actually incorrect, and we end up applying schedlock more often on sss targets than on non-sss targets. Found by inspection while working on a patch that eliminates the singlestep_breakpoints_inserted_p global. Tested on x86_64 Fedora 20 on top of my 'software single-step on x86' series. gdb/ 2014-09-25 Pedro Alves * infrun.c (user_visible_resume_ptid): Don't check singlestep_breakpoints_inserted_p. --- gdb/ChangeLog | 5 +++++ gdb/infrun.c | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a191b62..dbd222d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2014-09-25 Pedro Alves + * infrun.c (user_visible_resume_ptid): Don't check + singlestep_breakpoints_inserted_p. + +2014-09-25 Pedro Alves + * breakpoint.c (should_be_inserted): Add debug output. 2014-09-25 Pedro Alves diff --git a/gdb/infrun.c b/gdb/infrun.c index dc696e9..5e123be 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1739,8 +1739,7 @@ user_visible_resume_ptid (int step) resume_ptid = inferior_ptid; } else if ((scheduler_mode == schedlock_on) - || (scheduler_mode == schedlock_step - && (step || singlestep_breakpoints_inserted_p))) + || (scheduler_mode == schedlock_step && step)) { /* User-settable 'scheduler' mode requires solo thread resume. */ resume_ptid = inferior_ptid; -- 2.7.4