Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Oct 2014 20:33:57 +0200
From:      Dimitry Andric <dim@FreeBSD.org>
To:        d@delphij.net
Cc:        freebsd-hackers@freebsd.org, Navdeep Parhar <np@freebsd.org>
Subject:   Re: panic in ivy_rng_store() when compiled with -O0
Message-ID:  <7A5C3D84-1B1F-4BA3-818D-37231BF424FE@FreeBSD.org>
In-Reply-To: <54415E13.4000203@delphij.net>
References:  <54384ABD.5080806@FreeBSD.org> <2533199.DHZybpy49d@ralph.baldwin.cx> <54415E13.4000203@delphij.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On 17 Oct 2014, at 20:21, Xin Li <delphij@delphij.net> wrote:
> On 10/17/14 08:53, John Baldwin wrote:
>> On Friday, October 10, 2014 02:08:13 PM Navdeep Parhar wrote:
...
> movq %rdi,(%rdi) is obviously wrong (%rdi holds the result from
> rdrand), which I believed to be a compiler bug in register allocation.
> 
> Navdeep have committed a change to mark 'tmp' input+output, which does
> fix the output but I'm not 100% sure if that's right, as 'tmp' is not
> considered an input of the inline assembler block, and this may break
> compile on other compilers, but for now it's better than previous
> situation.
> 
> Speaking for the compiler issue, Dimitry have reported this upstream at:
> 
> 	http://llvm.org/bugs/show_bug.cgi?id=21273
> 
> There is a suggestion in the reply, that change 'tmp' to early clobber
> would workaround the issue, like:
> 
> Index: ivy.c
> ===================================================================
> - --- ivy.c	(revision 273195)
> +++ ivy.c	(working copy)
> @@ -79,7 +79,7 @@
> 	    "2:\n\t"
> 	    "mov	%2,%1\n\t" /* *buf = tmp */
> 	    "3:"
> - -	    : "+q" (retry), "=m" (*buf), "+q" (tmp) : : "cc");
> +	    : "+q" (retry), "=m" (*buf), "=&q" (tmp) : : "cc");

Yes, this generates the correct code for all cases I tried, e.g. with
gcc 4.2 from base, gcc 4.7 through 5.0 from ports, clang 3.4, clang 3.5
and clang trunk, all at -O0 through -O3, and -Os.

So at the moment this fix is the best option, I think.

-Dimitry




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?7A5C3D84-1B1F-4BA3-818D-37231BF424FE>