From owner-svn-src-all@FreeBSD.ORG Tue Oct 11 13:54:21 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3E21E1065679; Tue, 11 Oct 2011 13:54:21 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 139AF8FC12; Tue, 11 Oct 2011 13:54:21 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p9BDsKQG018111; Tue, 11 Oct 2011 13:54:20 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p9BDsKAP018108; Tue, 11 Oct 2011 13:54:20 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201110111354.p9BDsKAP018108@svn.freebsd.org> From: Konstantin Belousov Date: Tue, 11 Oct 2011 13:54:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r226256 - stable/8/sys/kern X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Oct 2011 13:54:21 -0000 Author: kib Date: Tue Oct 11 13:54:20 2011 New Revision: 226256 URL: http://svn.freebsd.org/changeset/base/226256 Log: MFC r225791: Do not deliver SIGTRAP on exec as the normal signal, use ptracestop() on syscall exit path. Otherwise, if SIGTRAP is ignored, that tdsendsignal() do not want to deliver the signal, and debugger never get a notification of exec. Modified: stable/8/sys/kern/kern_exec.c stable/8/sys/kern/subr_syscall.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) Modified: stable/8/sys/kern/kern_exec.c ============================================================================== --- stable/8/sys/kern/kern_exec.c Tue Oct 11 13:45:04 2011 (r226255) +++ stable/8/sys/kern/kern_exec.c Tue Oct 11 13:54:20 2011 (r226256) @@ -743,17 +743,6 @@ interpret: KNOTE_LOCKED(&p->p_klist, NOTE_EXEC); p->p_flag &= ~P_INEXEC; - /* - * If tracing the process, trap to debugger so breakpoints - * can be set before the program executes. - * Use tdsignal to deliver signal to current thread, use - * psignal may cause the signal to be delivered to wrong thread - * because that thread will exit, remember we are going to enter - * single thread mode. - */ - if (p->p_flag & P_TRACED) - tdsignal(p, td, SIGTRAP, NULL); - /* clear "fork but no exec" flag, as we _are_ execing */ p->p_acflag &= ~AFORK; Modified: stable/8/sys/kern/subr_syscall.c ============================================================================== --- stable/8/sys/kern/subr_syscall.c Tue Oct 11 13:45:04 2011 (r226255) +++ stable/8/sys/kern/subr_syscall.c Tue Oct 11 13:54:20 2011 (r226256) @@ -186,9 +186,17 @@ syscallret(struct thread *td, int error, * is not the case, this code will need to be revisited. */ STOPEVENT(p, S_SCX, sa->code); - PTRACESTOP_SC(p, td, S_PT_SCX); if (traced || (td->td_dbgflags & (TDB_EXEC | TDB_FORK)) != 0) { PROC_LOCK(p); + /* + * If tracing the execed process, trap to the debugger + * so that breakpoints can be set before the program + * executes. If debugger requested tracing of syscall + * returns, do it now too. + */ + if (traced && ((td->td_dbgflags & TDB_EXEC) != 0 || + (p->p_stops & S_PT_SCX) != 0)) + ptracestop(td, SIGTRAP); td->td_dbgflags &= ~(TDB_SCX | TDB_EXEC | TDB_FORK); PROC_UNLOCK(p); }