NetBSD Problem Report #40468
From he@malus.urc.uninett.no Sat Jan 24 22:39:58 2009
Return-Path: <he@malus.urc.uninett.no>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
by narn.NetBSD.org (Postfix) with ESMTP id 1704863BAB8
for <gnats-bugs@gnats.NetBSD.org>; Sat, 24 Jan 2009 22:39:58 +0000 (UTC)
Message-Id: <20090124223954.EBC37B0DFA@malus.urc.uninett.no>
Date: Sat, 24 Jan 2009 23:39:54 +0100 (CET)
From: he@NetBSD.org
Reply-To: he@NetBSD.org
To: gnats-bugs@gnats.NetBSD.org
Subject: Optimizer bug suspected -- porting devel/libffi to NetBSD/powerpc
X-Send-Pr-Version: 3.95
>Number: 40468
>Category: toolchain
>Synopsis: Optimizer bug suspected -- porting devel/libffi to NetBSD/powerpc
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: toolchain-manager
>State: closed
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sat Jan 24 22:40:00 +0000 2009
>Closed-Date: Fri Sep 30 08:44:06 +0000 2016
>Last-Modified: Fri Sep 30 08:44:06 +0000 2016
>Originator: Havard Eidnes
>Release: NetBSD 4.0
>Organization:
I Try, Inc.
>Environment:
System: NetBSD malus.urc.uninett.no 4.0 NetBSD 4.0 (GENERIC) #0: Sun Dec 16 00:27:58 PST 2007 builds@wb30:/home/builds/ab/netbsd-4-0-RELEASE/macppc/200712160005Z-obj/home/builds/ab/netbsd-4-0-RELEASE/src/sys/arch/macppc/compile/GENERIC macppc
Compiler: gcc version 4.1.2 20061021 prerelease (NetBSD nb3 20061125)
Architecture: powerpc
Machine: macppc
>Description:
While trying to update and port devel/libffi to NetBSD/macppc 4.0,
I found out that even after doing basic porting, some of the
self-tests fail.
Closer inspection reveals that there is one particular self-test
which involves a function which takes two by-value arguments
consisting of an (ideally) 6-byte struct, and which returns
such a struct as a return value.
When the self-test is compiled -O0 or -O1, the test prints
the expected values. When it's compiled either of
-O2, -O3, -Os, or -O2 -fomit-frame-pointer
the output does not match what is expected.
This can be verified on NetBSD/macppc by first doing
"make" in devel/libffi after applying the attached patch, decending
into work/libffi-3.0.8/testsuite/libffi.call and doing e.g.
cc -O1 -o /tmp/cls_6byte -I../.. -I../../include cls_6byte.c \
../../.libs/libffi.a ../../.libs/libffi_convenience.a
and executing the result. With the above, it prints
127 120 1 128 12 128 9 127: 139 248 10 255
res: 139 248 10 255
127 120 1 128 12 128 9 127: 139 248 10 255
res: 139 248 10 255
with the failing optimization flags, it prints
127 120 1 128 12 128 9 127: 139 248 10 255
res: 139 248 10 255
0 120 1 128 12 128 9 127: 12 248 10 255
res: 12 248 10 255
>How-To-Repeat:
Apply this patch to upgrade / adapt devel/libffi, and
make sure to have dejagnu installed. Watch
"make test" print 4 unexpected failures.
Inspection of work/libffi-3.0.8/testsuite/libffi.log
will reveal the offending test and the expected and actual
output from the test (and it's reproducability as above).
Index: Makefile
===================================================================
RCS file: /cvsroot/pkgsrc/devel/libffi/Makefile,v
retrieving revision 1.8
diff -u -p -r1.8 Makefile
--- Makefile 11 Oct 2008 22:33:56 -0000 1.8
+++ Makefile 24 Jan 2009 22:02:56 -0000
@@ -1,7 +1,7 @@
# $NetBSD: Makefile,v 1.8 2008/10/11 22:33:56 dholland Exp $
#
-DISTNAME= libffi-3.0.6
+DISTNAME= libffi-3.0.8
CATEGORIES= devel
MASTER_SITES= ftp://sourceware.org/pub/libffi/
@@ -18,6 +18,8 @@ USE_TOOLS+= pkg-config
USE_LANGUAGES= c c++
INFO_FILES= # PLIST
+TEST_TARGET= check
+
PKGCONFIG_OVERRIDE+= libffi.pc.in
.include "../../mk/bsd.pkg.mk"
Index: distinfo
===================================================================
RCS file: /cvsroot/pkgsrc/devel/libffi/distinfo,v
retrieving revision 1.9
diff -u -p -r1.9 distinfo
--- distinfo 11 Oct 2008 22:33:56 -0000 1.9
+++ distinfo 24 Jan 2009 22:02:56 -0000
@@ -1,7 +1,10 @@
$NetBSD: distinfo,v 1.9 2008/10/11 22:33:56 dholland Exp $
-SHA1 (libffi-3.0.6.tar.gz) = 04a5f38c76dfe3e078767645ca89f2ff71721104
-RMD160 (libffi-3.0.6.tar.gz) = da8f547209e6b13dc7be86ea29ad5fa5e85844e5
-Size (libffi-3.0.6.tar.gz) = 717171 bytes
+SHA1 (libffi-3.0.8.tar.gz) = ce44d10c39d9a37479c8777e206cac0f36c48712
+RMD160 (libffi-3.0.8.tar.gz) = 4144f64e79ebf95161a6afd58ceaeef8372b5e57
+Size (libffi-3.0.8.tar.gz) = 722834 bytes
SHA1 (patch-ac) = 307c08e8e3df5f079c0b2f63da58bb59fc089d30
SHA1 (patch-ad) = 8901a00abe25422e3e35f321a5fb89311185fc0b
+SHA1 (patch-ae) = bf16fd422f2d705324bd8a113f5681252f6c6bdc
+SHA1 (patch-af) = cb6cdffa127f34b1e6f299f76de08bff20ab83dd
+SHA1 (patch-ag) = 1d0f5dbfafeff21db44d305daa96573f827b222a
--- /dev/null 2009-01-24 04:35:54.000000000 +0100
+++ patches/patch-ae 2009-01-18 15:47:54.000000000 +0100
@@ -0,0 +1,13 @@
+$NetBSD$
+
+--- configure.ac.orig 2008-12-19 17:12:30.000000000 +0100
++++ configure.ac
+@@ -118,7 +118,7 @@ case "$host" in
+ powerpc-*-aix* | rs6000-*-aix*)
+ TARGET=POWERPC_AIX; TARGETDIR=powerpc
+ ;;
+- powerpc-*-freebsd*)
++ powerpc-*-freebsd* | powerpc-*-netbsd*)
+ TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
+ ;;
+ powerpc*-*-rtems*)
--- /dev/null 2009-01-24 04:35:54.000000000 +0100
+++ patches/patch-af 2009-01-18 15:48:54.000000000 +0100
@@ -0,0 +1,13 @@
+$NetBSD$
+
+--- configure.orig 2009-01-18 15:46:33.000000000 +0100
++++ configure
+@@ -21033,7 +21033,7 @@ case "$host" in
+ powerpc-*-aix* | rs6000-*-aix*)
+ TARGET=POWERPC_AIX; TARGETDIR=powerpc
+ ;;
+- powerpc-*-freebsd*)
++ powerpc-*-freebsd* | powerpc-*-netbsd*)
+ TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
+ ;;
+ powerpc*-*-rtems*)
--- /dev/null 2009-01-24 04:35:54.000000000 +0100
+++ patches/patch-ag 2009-01-23 18:05:01.000000000 +0100
@@ -0,0 +1,13 @@
+$NetBSD$
+
+--- testsuite/libffi.call/float2.c.orig 2008-01-29 16:15:20.000000000 +0100
++++ testsuite/libffi.call/float2.c
+@@ -44,7 +44,7 @@ int main (void)
+ /* This is ifdef'd out for now. long double support under SunOS/gcc
+ is pretty much non-existent. You'll get the odd bus error in library
+ routines like printf(). */
+- printf ("%Lf, %Lf, %Lf, %Lf\n", ld, ldblit(f), ld - ldblit(f), LDBL_EPSILON);
++ printf ("%Lf, %Lf, %Lf, %f\n", ld, ldblit(f), ld - ldblit(f), LDBL_EPSILON);
+ #endif
+
+ /* These are not always the same!! Check for a reasonable delta */
>Fix:
Sorry, don't know, so none provided.
>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->feedback
State-Changed-By: dholland@NetBSD.org
State-Changed-When: Sat, 31 Dec 2011 19:36:58 +0000
State-Changed-Why:
Do you know if this affects gcc 4.5 in current?
State-Changed-From-To: feedback->closed
State-Changed-By: dholland@NetBSD.org
State-Changed-When: Fri, 30 Sep 2016 08:44:06 +0000
State-Changed-Why:
Feedback timeout since 2011.
Assume not relevant to gcc 5.
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.