svn commit: r226248 - stable/9/sys/kern

Konstantin Belousov kib at FreeBSD.org
Tue Oct 11 13:18:44 UTC 2011


Author: kib
Date: Tue Oct 11 13:18:44 2011
New Revision: 226248
URL: http://svn.freebsd.org/changeset/base/226248

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.
  
  Approved by:	re (bz)

Modified:
  stable/9/sys/kern/kern_exec.c
  stable/9/sys/kern/subr_syscall.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/amd64/include/xen/   (props changed)
  stable/9/sys/boot/   (props changed)
  stable/9/sys/boot/i386/efi/   (props changed)
  stable/9/sys/boot/ia64/efi/   (props changed)
  stable/9/sys/boot/ia64/ski/   (props changed)
  stable/9/sys/boot/powerpc/boot1.chrp/   (props changed)
  stable/9/sys/boot/powerpc/ofw/   (props changed)
  stable/9/sys/cddl/contrib/opensolaris/   (props changed)
  stable/9/sys/conf/   (props changed)
  stable/9/sys/contrib/dev/acpica/   (props changed)
  stable/9/sys/contrib/octeon-sdk/   (props changed)
  stable/9/sys/contrib/pf/   (props changed)
  stable/9/sys/contrib/x86emu/   (props changed)

Modified: stable/9/sys/kern/kern_exec.c
==============================================================================
--- stable/9/sys/kern/kern_exec.c	Tue Oct 11 10:32:23 2011	(r226247)
+++ stable/9/sys/kern/kern_exec.c	Tue Oct 11 13:18:44 2011	(r226248)
@@ -777,16 +777,6 @@ interpret:
 	KNOTE_LOCKED(&p->p_klist, NOTE_EXEC);
 	p->p_flag &= ~P_INEXEC;
 
-	/*
-	 * If tracing the process, trap to the debugger so that
-	 * breakpoints can be set before the program executes.  We
-	 * have to use tdsignal() to deliver the signal to the current
-	 * thread since any other threads in this process will exit if
-	 * execve() succeeds.
-	 */
-	if (p->p_flag & P_TRACED)
-		tdsignal(td, SIGTRAP);
-
 	/* clear "fork but no exec" flag, as we _are_ execing */
 	p->p_acflag &= ~AFORK;
 

Modified: stable/9/sys/kern/subr_syscall.c
==============================================================================
--- stable/9/sys/kern/subr_syscall.c	Tue Oct 11 10:32:23 2011	(r226247)
+++ stable/9/sys/kern/subr_syscall.c	Tue Oct 11 13:18:44 2011	(r226248)
@@ -204,9 +204,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);
 	}


More information about the svn-src-stable-9 mailing list