From Jim.Pirzyk@disney.com  Sat Jul 14 10:34:17 2001
Return-Path: <Jim.Pirzyk@disney.com>
Received: from mail.disney.com (mail.disney.com [204.128.192.15])
	by hub.freebsd.org (Postfix) with ESMTP id 3768837B401
	for <FreeBSD-gnats-submit@freebsd.org>; Sat, 14 Jul 2001 10:34:17 -0700 (PDT)
	(envelope-from Jim.Pirzyk@disney.com)
Received: from pain10.corp.disney.com (root@pain10.corp.disney.com [153.7.110.100])
	by mail.disney.com (Switch-2.0.1/Switch-2.0.1) with SMTP id f6EHXPI07951
	for <FreeBSD-gnats-submit@freebsd.org>; Sat, 14 Jul 2001 10:33:25 -0700 (PDT)
Received: from [172.30.50.1] by pain.corp.disney.com with ESMTP for FreeBSD-gnats-submit@freebsd.org; Sat, 14 Jul 2001 10:35:05 -0700
Received: from plio.fan.fa.disney.com (plio.fan.fa.disney.com [153.7.118.2])
	by pecos.fa.disney.com (8.11.3/8.11.3) with ESMTP id f6EHYAs10808
	for <FreeBSD-gnats-submit@freebsd.org>; Sat, 14 Jul 2001 10:34:10 -0700 (PDT)
Received: from snoopy.fan.fa.disney.com (snoopy.fan.fa.disney.com [153.7.117.170])
	by plio.fan.fa.disney.com (8.9.2/8.9.2) with ESMTP id KAA13285
	for <FreeBSD-gnats-submit@freebsd.org>; Sat, 14 Jul 2001 10:34:09 -0700 (PDT)
	(envelope-from Jim.Pirzyk@mailhost)
Received: (from Jim.Pirzyk@localhost)
	by snoopy.fan.fa.disney.com (8.11.3/8.11.3) id f6EHY9i99584;
	Sat, 14 Jul 2001 10:34:09 -0700 (PDT)
	(envelope-from Jim.Pirzyk)
Message-Id: <200107141734.f6EHY9i99584@snoopy.fan.fa.disney.com>
Date: Sat, 14 Jul 2001 10:34:09 -0700 (PDT)
From: Jim.Pirzyk@disney.com
Reply-To: Jim.Pirzyk@disney.com
To: FreeBSD-gnats-submit@freebsd.org
Subject: math libraries in linux emulation do not return same results
X-Send-Pr-Version: 3.113

>Number:         28966
>Category:       kern
>Synopsis:       [patch] math libraries in linux emulation do not return same results
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    das
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Jul 14 10:40:16 PDT 2001
>Closed-Date:    Tue Mar 01 04:51:24 GMT 2005
>Last-Modified:  Tue Mar 01 04:51:24 GMT 2005
>Originator:     Jim Pirzyk
>Release:        FreeBSD 4.3-RELEASE i386
>Organization:
>Environment:
System: FreeBSD snoopy 4.3-RELEASE FreeBSD 4.3-RELEASE #9: Thu Jul 12 12:17:21 PDT 2001 root@snoopy:/auto/roy/dist/pub/FreeBSD/4.3-RELEASE/sys/compile/UP_WORKSTATION i386


>Description:
	Math libraries under linux emulation do not return the same results
	as under native FreeBSD nor under native Linux.  This is independant
	of shared libaries (they are the same under Linux emulation as under
	native linux).

>How-To-Repeat:
	Compile this program on a linux system and run there and on
	the FreeBSD system.  Compare results.

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main (int argc, char **argv) {
        double res, x = 53.278500;

        if ( argc == 2 )
                x = atof(argv[1]);

        res = exp(x);

        printf ("x = %lf\n", x);
        printf ("exp(x) = %lf\n", res);

        exit (0);
}

>Fix:

	I have yet to find a fix.  It may have to due with the NPX code word
	in linux emulation, but I am not sure.
>Release-Note:
>Audit-Trail:

From: David Malone <dwmalone@maths.tcd.ie>
To: Jim.Pirzyk@disney.com
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: Re: kern/28966: math libraries in linux emulation do not return same results
Date: Sat, 14 Jul 2001 23:18:30 +0100

 On Sat, Jul 14, 2001 at 10:34:09AM -0700, Jim.Pirzyk@disney.com wrote:
 > >Description:
 > 	Math libraries under linux emulation do not return the same results
 > 	as under native FreeBSD nor under native Linux.  This is independant
 > 	of shared libaries (they are the same under Linux emulation as under
 > 	native linux).
 
 Did you try playing with fpgetround/fpsetround or any of the related
 functions on the same man page? I'd suspect you could find out what's
 going on with them.
 
 	David.

From: Jim Pirzyk <Jim.Pirzyk@disney.com>
To: David Malone <dwmalone@maths.tcd.ie>, Jim.Pirzyk@disney.com
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: Re: kern/28966: math libraries in linux emulation do not return same results
Date: Sat, 14 Jul 2001 16:01:13 -0700

 On Saturday 14 July 2001 03:18 pm, David Malone wrote:
 > On Sat, Jul 14, 2001 at 10:34:09AM -0700, Jim.Pirzyk@disney.com wrote:
 > > >Description:
 > >
 > > 	Math libraries under linux emulation do not return the same results
 > > 	as under native FreeBSD nor under native Linux.  This is independant
 > > 	of shared libaries (they are the same under Linux emulation as under
 > > 	native linux).
 >
 > Did you try playing with fpgetround/fpsetround or any of the related
 > functions on the same man page? I'd suspect you could find out what's
 > going on with them.
 
 I just tried them and I see the FreeBSD box is set to 53 bit precision,
 but the problem is that these functions do not exist on Linux.  This
 means I cannot compile the program to test what the precision is
 under linux emulation.  The problem I have is that the linux binaries
 running under freebsd gives a different result that the freebsd binary
 or the linux binary under linux.
 
 - JimP
 
 -- 
 --- @(#) $Id: dot.signature,v 1.10 2001/05/17 23:38:49 Jim.Pirzyk Exp $
     __o   Jim.Pirzyk@disney.com ------------- pirzyk@freebsd.org
  _'\<,_   Senior Systems Engineer, Walt Disney Feature Animation 
 (*)/ (*)  

From: Jim Pirzyk <Jim.Pirzyk@disney.com>
To: FreeBSD-gnats-submit@FreeBSD.ORG
Cc:  
Subject: Re: kern/28966: math libraries in linux emulation do not return same results
Date: Sat, 14 Jul 2001 16:21:05 -0700

 > >Description:
 >
 > 	Math libraries under linux emulation do not return the same results
 > 	as under native FreeBSD nor under native Linux.  This is independant
 > 	of shared libaries (they are the same under Linux emulation as under
 > 	native linux).
 >
 
 What I am finding is that the -OX (where X is not 0) optimizes the
 exp() call out of the binary, so it does not call exp() in libm.so.6
 This does not happen under FreeBSD's gcc compiler.
 
 -- 
 --- @(#) $Id: dot.signature,v 1.10 2001/05/17 23:38:49 Jim.Pirzyk Exp $
     __o   Jim.Pirzyk@disney.com ------------- pirzyk@freebsd.org
  _'\<,_   Senior Systems Engineer, Walt Disney Feature Animation 
 (*)/ (*)  

From: Jim Pirzyk <Jim.Pirzyk@disney.com>
To: FreeBSD-gnats-submit@FreeBSD.ORG
Cc:  
Subject: Re: kern/28966: math libraries in linux emulation do not return same results
Date: Sat, 14 Jul 2001 17:47:34 -0700

 On Saturday 14 July 2001 04:30 pm, Jim Pirzyk wrote:
 > The following reply was made to PR kern/28966; it has been noted by GNATS.
 >
 > From: Jim Pirzyk <Jim.Pirzyk@disney.com>
 > To: FreeBSD-gnats-submit@FreeBSD.ORG
 > Cc:
 > Subject: Re: kern/28966: math libraries in linux emulation do not return
 > same results Date: Sat, 14 Jul 2001 16:21:05 -0700
 >
 >  > >Description:
 >  >
 >  > 	Math libraries under linux emulation do not return the same results
 >  > 	as under native FreeBSD nor under native Linux.  This is independant
 >  > 	of shared libaries (they are the same under Linux emulation as under
 >  > 	native linux).
 >
 >  What I am finding is that the -OX (where X is not 0) optimizes the
 >  exp() call out of the binary, so it does not call exp() in libm.so.6
 >  This does not happen under FreeBSD's gcc compiler.
 
 This is only when I include the exp call in a seperate .o file, not
 when I use the one in libm.so.6
 
 So the problem stands that using exp() on a linux box works different
 than it does under linux emulation.
 
 - JimP
 
 -- 
 --- @(#) $Id: dot.signature,v 1.10 2001/05/17 23:38:49 Jim.Pirzyk Exp $
     __o   Jim.Pirzyk@disney.com ------------- pirzyk@freebsd.org
  _'\<,_   Senior Systems Engineer, Walt Disney Feature Animation 
 (*)/ (*)  

From: Jim Pirzyk <Jim.Pirzyk@disney.com>
To: FreeBSD-gnats-submit@FreeBSD.ORG
Cc:  
Subject: Re: kern/28966: math libraries in linux emulation do not return same results
Date: Sat, 14 Jul 2001 21:03:13 -0700

 So the solution to my problem was to set the __INITIAL_NPXCW__ to
 0x37F.  What I can think of is that the freebsd binary sets
 the Control Word to this before running but the linux binary 
 does not (because it is assumed to already be set by the kernel
 at boot time).  So I would think the linux kernel module would need
 to set it also.
 
 - JimP
 
 -- 
 --- @(#) $Id: dot.signature,v 1.10 2001/05/17 23:38:49 Jim.Pirzyk Exp $
     __o   Jim.Pirzyk@disney.com ------------- pirzyk@freebsd.org
  _'\<,_   Senior Systems Engineer, Walt Disney Feature Animation 
 (*)/ (*)  

From: Bruce Evans <bde@zeta.org.au>
To: Jim Pirzyk <Jim.Pirzyk@disney.com>
Cc: freebsd-gnats-submit@FreeBSD.ORG
Subject: Re: kern/28966: math libraries in linux emulation do not return same
 results
Date: Sun, 15 Jul 2001 21:06:32 +1000 (EST)

 On Sat, 14 Jul 2001, Jim Pirzyk wrote:
 
 >  So the solution to my problem was to set the __INITIAL_NPXCW__ to
 >  0x37F.  What I can think of is that the freebsd binary sets
 >  the Control Word to this before running but the linux binary 
 >  does not (because it is assumed to already be set by the kernel
 >  at boot time).
 
 It's sort of the opposite.  The FreeBSD kernel sets the control
 word to __INITIAL_NPXCW__.  Most FreeBSD binaries have never set it.
 They depend on the kernel setting it.  Linux C binaries used to set
 it to 0x37F in the C startup code (except very old Linux C binaries
 set it to 0x272 IIRC, and there at least used to be a linking option
 to unmask exceptions (control word 0x372?).  Linux C binaries stopped
 setting it a few years ago.
 
 >  So I would think the linux kernel module would need
 >  to set it also.
 
 Yes, all emulators have this bug.
 
 Bruce
 

From: Bruce Evans <bde@zeta.org.au>
To: Jim Pirzyk <Jim.Pirzyk@disney.com>
Cc: freebsd-gnats-submit@FreeBSD.ORG
Subject: Re: kern/28966: math libraries in linux emulation do not return same
 results
Date: Sun, 15 Jul 2001 21:19:42 +1000 (EST)

 On Sat, 14 Jul 2001, Jim Pirzyk wrote:
 
 >  On Saturday 14 July 2001 03:18 pm, David Malone wrote:
 >  > Did you try playing with fpgetround/fpsetround or any of the related
 >  > functions on the same man page? I'd suspect you could find out what's
 >  > going on with them.
 >  
 >  I just tried them and I see the FreeBSD box is set to 53 bit precision,
 >  but the problem is that these functions do not exist on Linux.  This
 
 Some form of them should exist.  They are spelled fegetround/fesetround
 in C99.
 
 >  means I cannot compile the program to test what the precision is
 >  under linux emulation.  The problem I have is that the linux binaries
 >  running under freebsd gives a different result that the freebsd binary
 >  or the linux binary under linux.
 
 It is probably a bug for changing the rounding mode via a standard
 interface to have any effect on the result of a math function, but in
 practice I think you can rely on f[ep]setround() fixing them if it is
 used to "restore" the correct default.
 
 Bruce
 

From: Jim Pirzyk <Jim.Pirzyk@disney.com>
To: freebsd-gnats-submit@FreeBSD.ORG
Cc:  
Subject: Re: kern/28966: math libraries in linux emulation do not return sameresults
Date: Tue, 17 Jul 2001 14:02:10 -0700

 On Sunday 15 July 2001 04:06 am, you wrote:
 > On Sat, 14 Jul 2001, Jim Pirzyk wrote:
 > >  So the solution to my problem was to set the __INITIAL_NPXCW__ to
 > >  0x37F.  What I can think of is that the freebsd binary sets
 > >  the Control Word to this before running but the linux binary
 > >  does not (because it is assumed to already be set by the kernel
 > >  at boot time).
 >
 > It's sort of the opposite.  The FreeBSD kernel sets the control
 > word to __INITIAL_NPXCW__.  Most FreeBSD binaries have never set it.
 > They depend on the kernel setting it.  Linux C binaries used to set
 > it to 0x37F in the C startup code (except very old Linux C binaries
 > set it to 0x272 IIRC, and there at least used to be a linking option
 > to unmask exceptions (control word 0x372?).  Linux C binaries stopped
 > setting it a few years ago.
 
 Not sure if this patch is technically correct in that it does not
 save off the existing value of cw, but just sets to to the
 default.
 
 *** ./sys/i386/linux/linux.h.orig	Tue Jul 17 13:59:10 2001
 --- ./sys/i386/linux/linux.h	Tue Jul 17 13:27:26 2001
 ***************
 *** 167,172 ****
 --- 167,175 ----
   #define LINUX_SS_DISABLE	2
   
   
 + /* sigvec */ 
 + #define	__INITAL_LINUX_NPXCW__	0x37F
 + 
   int linux_to_bsd_sigaltstack(int lsa);
   int bsd_to_linux_sigaltstack(int bsa);
   
 *** ./sys/i386/linux/linux_sysvec.c.orig	Sat Jul 14 22:32:48 2001
 --- ./sys/i386/linux/linux_sysvec.c	Tue Jul 17 13:30:59 2001
 ***************
 *** 429,434 ****
 --- 429,441 ----
   
   	bzero(&frame.sf_fpstate, sizeof(struct linux_fpstate));
   
 + 	/* 
 + 	 * Need to set the NXP Code Word to match what linux uses.  This used
 + 	 * to be in each linux binary, but more receintly, it was moved to
 + 	 * the kernel and so we need to emulate that here.
 + 	 */
 + 	frame.sf_fpstate.cw = __INITAL_LINUX_NPXCW__;
 + 
   	for (i = 0; i < (LINUX_NSIG_WORDS-1); i++)
   		frame.sf_extramask[i] = lmask.__bits[i+1];
   	
 - JimP
 
 -- 
 --- @(#) $Id: dot.signature,v 1.10 2001/05/17 23:38:49 Jim.Pirzyk Exp $
     __o   Jim.Pirzyk@disney.com ------------- pirzyk@freebsd.org
  _'\<,_   Senior Systems Engineer, Walt Disney Feature Animation 
 (*)/ (*)  
Responsible-Changed-From-To: freebsd-bugs->pirzyk 
Responsible-Changed-By: pirzyk 
Responsible-Changed-When: Wed Jul 18 16:24:20 PDT 2001 
Responsible-Changed-Why:  
Picked up another of my calls 

http://www.FreeBSD.org/cgi/query-pr.cgi?pr=28966 

From: Bruce Evans <bde@zeta.org.au>
To: Jim Pirzyk <Jim.Pirzyk@disney.com>
Cc: freebsd-gnats-submit@FreeBSD.ORG
Subject: Re: kern/28966: math libraries in linux emulation do not return
 sameresults
Date: Thu, 19 Jul 2001 18:51:11 +1000 (EST)

 On Tue, 17 Jul 2001, Jim Pirzyk wrote:
 
 >  Not sure if this patch is technically correct in that it does not
 >  save off the existing value of cw, but just sets to to the
 >  default.
 
 >  *** ./sys/i386/linux/linux_sysvec.c.orig	Sat Jul 14 22:32:48 2001
 >  --- ./sys/i386/linux/linux_sysvec.c	Tue Jul 17 13:30:59 2001
 >  ***************
 >  *** 429,434 ****
 >  --- 429,441 ----
 >    
 >    	bzero(&frame.sf_fpstate, sizeof(struct linux_fpstate));
 >    
 >  + 	/* 
 >  + 	 * Need to set the NXP Code Word to match what linux uses.  This used
 >  + 	 * to be in each linux binary, but more receintly, it was moved to
 >  + 	 * the kernel and so we need to emulate that here.
 >  + 	 */
 >  + 	frame.sf_fpstate.cw = __INITAL_LINUX_NPXCW__;
 >  + 
 >    	for (i = 0; i < (LINUX_NSIG_WORDS-1); i++)
 >    		frame.sf_extramask[i] = lmask.__bits[i+1];
 >    	
 
 Er, this only sets it (strictly: schedules setting of it) in linux_sendsig().
 I think it only works if the application catches a signal and returns fairly
 normally form the signal handler.  Then sigreturn() sets it.
 
 You need to set it setregs() in an emulator-specific way.  NetBSD sets it in
 sysent-specific setregs() named sv_setregs.
 
 Bruce
 

From: Colin Percival <colin.percival@wadham.ox.ac.uk>
To: freebsd-gnats-submit@FreeBSD.org, Jim.Pirzyk@disney.com
Cc:  
Subject: Re: kern/28966: math libraries in linux emulation do not
  return same results
Date: Sun, 14 Apr 2002 13:41:15 +0100

    Maybe I'm missing something, but I fail to see why this is considered a 
 problem.  Library functions should never be expected to produce identical 
 results across platforms; the only requirement is that arithmetic functions 
 (with the same precision and rounding modes) are consistent across IEEE 754 
 implementations.
 
 Colin Percival
 

From: "Pirzyk, Jim" <Jim.Pirzyk@disney.com>
To: Colin Percival <colin.percival@wadham.ox.ac.uk>,
	freebsd-gnats-submit@FreeBSD.org,
	"Pirzyk, Jim" <Jim.Pirzyk@disney.com>
Cc:  
Subject: Re: kern/28966: math libraries in linux emulation do not return same results
Date: Mon, 15 Apr 2002 09:18:19 -0700

 On Sunday 14 April 2002 05:41 am, Colin Percival wrote:
 >    Maybe I'm missing something, but I fail to see why this is considered a
 > problem.  Library functions should never be expected to produce identical
 > results across platforms; the only requirement is that arithmetic functions
 > (with the same precision and rounding modes) are consistent across IEEE 754
 > implementations.
 >
 > Colin Percival
 
 But they are NOT across platforms.  It SHOULD be consistant between
 native Linux and the Linuxator (since it to imitate Linux).
 
 - JimP
 
 
 -- 
 --- @(#) $Id: dot.signature,v 1.11 2002/02/15 23:47:51 pirzyk Exp $
     __o   Jim.Pirzyk@disney.com --------------------------------
  _'\<,_   Senior Systems Engineer, Walt Disney Feature Animation 
 (*)/ (*)  

From: "KAREN THODE" <thode12@msn.com>
To: <freebsd-gnats-submit@FreeBSD.org>, <Jim.Pirzyk@disney.com>
Cc:  
Subject: Re: kern/28966: math libraries in linux emulation do not return same results
Date: Thu, 3 Jul 2003 14:44:04 -0500

 ------=_NextPart_001_0004_01C34171.8CF25EF0
 Content-Type: text/plain; charset="iso-8859-1"
 
 Replace the old patch with this one:
 void floadcw(unsigned short);  /*at the beginning of linux_sysvec.c*/
 
 floadcw(__INITAL_LINUX_NPXCW__);
 
 and compile this asm source file into the linux emulator.
 
 ;floadcw.s
 ;Lucas Thode
 .text
 floadcw:
    push bp
    mov sp,bp
    fldcw [bp+4]
    pop bp
    ret
 ------=_NextPart_001_0004_01C34171.8CF25EF0
 Content-Type: text/html; charset="iso-8859-1"
 Content-Transfer-Encoding: quoted-printable
 
 <HTML><BODY STYLE=3D"font:10pt verdana; border:none;"><DIV>Replace the ol=
 d patch with this one:</DIV> <DIV>void floadcw(unsigned short);&nbsp; /*a=
 t the beginning of linux_sysvec.c*/<BR><BR>floadcw(__INITAL_LINUX_NPXCW__=
 );</DIV> <DIV>&nbsp;</DIV> <DIV>and compile this asm source file into the=
  linux emulator.</DIV> <DIV>&nbsp;</DIV> <DIV>;floadcw.s</DIV> <DIV>;Luca=
 s Thode</DIV> <DIV>.text</DIV> <DIV>floadcw:</DIV> <DIV>&nbsp;&nbsp; push=
  bp</DIV> <DIV>&nbsp;&nbsp; mov sp,bp</DIV> <DIV>&nbsp;&nbsp; fldcw [bp+4=
 ]</DIV> <DIV>&nbsp;&nbsp; pop bp</DIV> <DIV>&nbsp;&nbsp; ret</DIV> <DIV>&=
 nbsp;</DIV></BODY></HTML>
 
 ------=_NextPart_001_0004_01C34171.8CF25EF0--

From: "KAREN THODE" <thode12@msn.com>
To: <freebsd-gnats-submit@FreeBSD.org>, <Jim.Pirzyk@disney.com>
Cc:  
Subject: Re: kern/28966: math libraries in linux emulation do not return same results
Date: Wed, 16 Jul 2003 11:29:42 -0500

 ------=_NextPart_001_0000_01C34B8D.8CCAF8D0
 Content-Type: text/plain; charset="iso-8859-1"
 
 Has anybody committed my patch yet?
 
 Lucas
 ------=_NextPart_001_0000_01C34B8D.8CCAF8D0
 Content-Type: text/html; charset="iso-8859-1"
 Content-Transfer-Encoding: quoted-printable
 
 <HTML><BODY STYLE=3D"font:10pt verdana; border:none;"><DIV>Has anybody co=
 mmitted my patch yet?</DIV> <DIV>&nbsp;</DIV> <DIV>Lucas<BR><BR></DIV></B=
 ODY></HTML>
 
 ------=_NextPart_001_0000_01C34B8D.8CCAF8D0--
Responsible-Changed-From-To: pirzyk->freebsd-bugs 
Responsible-Changed-By: arved 
Responsible-Changed-When: Fri Apr 23 07:17:09 PDT 2004 
Responsible-Changed-Why:  
Jim Pirzyk returned his commit bit one year ago 

http://www.freebsd.org/cgi/query-pr.cgi?pr=28966 
Responsible-Changed-From-To: freebsd-bugs->freebsd-emulation 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Wed Sep 1 06:19:02 GMT 2004 
Responsible-Changed-Why:  
Over to emulation mailing list -- this appears to be a bug in the Linux 
emulation code. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=28966 
Responsible-Changed-From-To: freebsd-emulation->emulation 
Responsible-Changed-By: gerald 
Responsible-Changed-When: Sun Oct 31 15:20:46 GMT 2004 
Responsible-Changed-Why:  

http://www.freebsd.org/cgi/query-pr.cgi?pr=28966 
Responsible-Changed-From-To: emulation->das 
Responsible-Changed-By: das 
Responsible-Changed-When: Mon Jan 24 14:55:59 GMT 2005 
Responsible-Changed-Why:  
Over to me. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=28966 
State-Changed-From-To: open->patched 
State-Changed-By: das 
State-Changed-When: Sun Feb 6 17:29:43 GMT 2005 
State-Changed-Why:  
Fixed in -CURRENT, awaiting MFC. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=28966 
State-Changed-From-To: patched->closed 
State-Changed-By: das 
State-Changed-When: Tue Mar 1 04:51:10 GMT 2005 
State-Changed-Why:  
MFC'd. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=28966 
>Unformatted:
