svn commit: r236567 - in head/sys/cddl/dev/dtrace: amd64 i386

Pedro Giffuni pfg at FreeBSD.org
Mon Jun 4 16:25:48 UTC 2012


On 06/04/12 11:15, George V. Neville-Neil wrote:
> Author: gnn
> Date: Mon Jun  4 16:15:40 2012
> New Revision: 236567
> URL: http://svn.freebsd.org/changeset/base/236567
>
> Log:
>    Integrate a fix for a very odd signal delivery problem found
>    by Bryan Cantril and others in the Solaris/Illumos version of DTrace.
>
>    Obtained from: https://www.illumos.org/issues/789
>    MFC after:	2 weeks

And it looks like kern/164724 :)

cheers,

Pedro.

> Modified:
>    head/sys/cddl/dev/dtrace/amd64/dtrace_subr.c
>    head/sys/cddl/dev/dtrace/i386/dtrace_subr.c
>
> Modified: head/sys/cddl/dev/dtrace/amd64/dtrace_subr.c
> ==============================================================================
> --- head/sys/cddl/dev/dtrace/amd64/dtrace_subr.c	Mon Jun  4 16:04:01 2012	(r236566)
> +++ head/sys/cddl/dev/dtrace/amd64/dtrace_subr.c	Mon Jun  4 16:15:40 2012	(r236567)
> @@ -27,6 +27,10 @@
>    * Use is subject to license terms.
>    */
>
> +/*
> + * Copyright (c) 2011, Joyent, Inc. All rights reserved.
> + */
> +
>   #include<sys/param.h>
>   #include<sys/systm.h>
>   #include<sys/types.h>
> @@ -297,14 +301,15 @@ dtrace_safe_defer_signal(void)
>   	}
>
>   	/*
> -	 * If we've executed the original instruction, but haven't performed
> -	 * the jmp back to t->t_dtrace_npc or the clean up of any registers
> -	 * used to emulate %rip-relative instructions in 64-bit mode, do that
> -	 * here and take the signal right away. We detect this condition by
> -	 * seeing if the program counter is the range [scrpc + isz, astpc).
> +	 * If we have executed the original instruction, but we have performed
> +	 * neither the jmp back to t->t_dtrace_npc nor the clean up of any
> +	 * registers used to emulate %rip-relative instructions in 64-bit mode,
> +	 * we'll save ourselves some effort by doing that here and taking the
> +	 * signal right away.  We detect this condition by seeing if the program
> +	 * counter is the range [scrpc + isz, astpc).
>   	 */
> -	if (t->t_dtrace_astpc - rp->r_pc<
> -	    t->t_dtrace_astpc - t->t_dtrace_scrpc - isz) {
> +	if (rp->r_pc>= t->t_dtrace_scrpc + isz&&
> +	    rp->r_pc<  t->t_dtrace_astpc) {
>   #ifdef __amd64
>   		/*
>   		 * If there is a scratch register and we're on the
>
> Modified: head/sys/cddl/dev/dtrace/i386/dtrace_subr.c
> ==============================================================================
> --- head/sys/cddl/dev/dtrace/i386/dtrace_subr.c	Mon Jun  4 16:04:01 2012	(r236566)
> +++ head/sys/cddl/dev/dtrace/i386/dtrace_subr.c	Mon Jun  4 16:15:40 2012	(r236567)
> @@ -27,6 +27,10 @@
>    * Use is subject to license terms.
>    */
>
> +/*
> + * Copyright (c) 2011, Joyent, Inc. All rights reserved.
> + */
> +
>   #include<sys/param.h>
>   #include<sys/systm.h>
>   #include<sys/types.h>
> @@ -298,14 +302,15 @@ dtrace_safe_defer_signal(void)
>   	}
>
>   	/*
> -	 * If we've executed the original instruction, but haven't performed
> -	 * the jmp back to t->t_dtrace_npc or the clean up of any registers
> -	 * used to emulate %rip-relative instructions in 64-bit mode, do that
> -	 * here and take the signal right away. We detect this condition by
> -	 * seeing if the program counter is the range [scrpc + isz, astpc).
> +	 * If we have executed the original instruction, but we have performed
> +	 * neither the jmp back to t->t_dtrace_npc nor the clean up of any
> +	 * registers used to emulate %rip-relative instructions in 64-bit mode,
> +	 * we'll save ourselves some effort by doing that here and taking the
> +	 * signal right away.  We detect this condition by seeing if the program
> +	 * counter is the range [scrpc + isz, astpc).
>   	 */
> -	if (t->t_dtrace_astpc - rp->r_pc<
> -	    t->t_dtrace_astpc - t->t_dtrace_scrpc - isz) {
> +	if (rp->r_pc>= t->t_dtrace_scrpc + isz&&
> +	    rp->r_pc<  t->t_dtrace_astpc) {
>   #ifdef __amd64
>   		/*
>   		 * If there is a scratch register and we're on the



More information about the svn-src-all mailing list