+++ /dev/null
-Index: gdb-7.2.50.20101116/gdb/linux-nat.c
-===================================================================
---- gdb-7.2.50.20101116.orig/gdb/linux-nat.c 2010-11-16 07:58:15.000000000 +0100
-+++ gdb-7.2.50.20101116/gdb/linux-nat.c 2010-11-16 07:59:06.000000000 +0100
-@@ -1863,16 +1863,18 @@ resume_set_callback (struct lwp_info *lp
-
- static void
- linux_nat_resume (struct target_ops *ops,
-- ptid_t ptid, int step, enum target_signal signo)
-+ ptid_t ptid, int step_int, enum target_signal signo)
- {
- sigset_t prev_mask;
- struct lwp_info *lp;
- int resume_many;
-+ enum resume_step step = step_int;
-
- if (debug_linux_nat)
- fprintf_unfiltered (gdb_stdlog,
- "LLR: Preparing to %s %s, %s, inferior_ptid %s\n",
-- step ? "step" : "resume",
-+ (step == RESUME_STEP_NEEDED
-+ ? "needed" : (step ? "step" : "resume")),
- target_pid_to_str (ptid),
- (signo != TARGET_SIGNAL_0
- ? strsignal (target_signal_to_host (signo)) : "0"),
-@@ -3171,10 +3173,34 @@ linux_nat_filter_event (int lwpid, int s
-
- if (num_lwps (GET_PID (lp->ptid)) > 1)
- {
-+ enum resume_step step = lp->step;
-+ pid_t pid = GET_PID (lp->ptid);
-+
- /* If there is at least one more LWP, then the exit signal
- was not the end of the debugged application and should be
- ignored. */
- exit_lwp (lp);
-+
-+ if (step == RESUME_STEP_USER)
-+ {
-+ /* Now stop the closest LWP's ... */
-+ lp = find_lwp_pid (pid_to_ptid (pid));
-+ if (!lp)
-+ lp = lwp_list;
-+ gdb_assert (lp != NULL);
-+ errno = 0;
-+ ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0,
-+ (void *) (unsigned long) SIGSTOP);
-+ if (debug_linux_nat)
-+ fprintf_unfiltered (gdb_stdlog,
-+ "PTRACE_CONT %s, 0, 0 (%s)\n",
-+ target_pid_to_str (lp->ptid),
-+ errno ? safe_strerror (errno)
-+ : "OK");
-+ /* Avoid the silent `delayed SIGSTOP' handling. */
-+ lp->signalled = 0;
-+ }
-+
- return NULL;
- }
- }