[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: gcc compilation error with abs() affects sarge, etch, lenny, sid



On Thursday 22 November 2007, Lucas Nussbaum wrote:
> On 21/11/07 at 18:03 +0100, Martin Michlmayr wrote:
> > * Frans Pop <elendil@planet.nl> [2007-11-21 17:47]:
> > > The most effective/efficient way to do this may be an archive rebuild
> > > with a modified gcc that emits a warning if this case is hit and then
> > > check build logs for the warning.
> > >
> > > Something like the patch below (stolen from the thread on
> > > linux-kernel).
> >
> > Sounds like something Lucas (CCed) could do.
>
> I'm currently in VAC. I could start a rebuild on monday if someone
> provides patched gcc packages for i386 for me.

I have tried but get an error I don't understand when building gcc-4.2:
[...]
ranlib .libs/libgfortran.a
creating libgfortran.la
(cd .libs && rm -f libgfortran.la && ln -s ../libgfortran.la libgfortran.la)
make[8]: Leaving directory `/tmp/buildd/gcc-4.2-4.2.2/build/i486-linux-gnu/64/libgfortran'
make[7]: Leaving directory `/tmp/buildd/gcc-4.2-4.2.2/build/i486-linux-gnu/64/libgfortran'
make[6]: Leaving directory `/tmp/buildd/gcc-4.2-4.2.2/build/i486-linux-gnu/libgfortran'
make[5]: Leaving directory `/tmp/buildd/gcc-4.2-4.2.2/build/i486-linux-gnu/libgfortran'
make[4]: Leaving directory `/tmp/buildd/gcc-4.2-4.2.2/build/i486-linux-gnu/libgfortran'
make[3]: Leaving directory `/tmp/buildd/gcc-4.2-4.2.2/build'
make[2]: *** [bootstrap-lean] Error 2
make[2]: Leaving directory `/tmp/buildd/gcc-4.2-4.2.2/build'
s=`cat status`; rm -f status; test $s -eq 0
make[1]: *** [stamps/05-build-stamp] Error 1
make[1]: Leaving directory `/tmp/buildd/gcc-4.2-4.2.2'
make: *** [stamps/05-build-stamp] Error 2
dpkg-buildpackage: failure: debian/rules build gave error exit status 2

Attached the patch I used. I don't see how the patch could be related to the
build failure. Tried the build both in a chroot and using pbuilder.

Cheers,
FJP

diff -u gcc-4.2-4.2.2/debian/rules.patch gcc-4.2-4.2.2/debian/rules.patch
--- gcc-4.2-4.2.2/debian/rules.patch
+++ gcc-4.2-4.2.2/debian/rules.patch
@@ -78,6 +78,7 @@
 	m68k-symbolic-operand \
 	m68k-bitfield-offset \
 	mips-libspec \
+	abs-miscompile-detect \
 
 #	svn-updates \
 #	classmap-path \
diff -u gcc-4.2-4.2.2/debian/changelog gcc-4.2-4.2.2/debian/changelog
--- gcc-4.2-4.2.2/debian/changelog
+++ gcc-4.2-4.2.2/debian/changelog
@@ -1,3 +1,9 @@
+gcc-4.2 (4.2.2-4~abs) UNRELEASED; urgency=low
+
+  * Detect miscompiled abs() functions.
+
+ -- Frans Pop <fjp@debian.org>  Mon, 26 Nov 2007 02:56:26 +0100
+
 gcc-4.2 (4.2.2-3) unstable; urgency=low
 
   * Update to SVN 20071014 from the ubuntu/gcc-4_2-branch.
only in patch2:
unchanged:
--- gcc-4.2-4.2.2.orig/debian/patches/abs-miscompile-detect.dpatch
+++ gcc-4.2-4.2.2/debian/patches/abs-miscompile-detect.dpatch
@@ -0,0 +1,37 @@
+#! /bin/sh -e
+
+# DP: enable biarch for 31 bit compiler
+
+dir=
+if [ $# -eq 3 -a "$2" = '-d' ]; then
+    pdir="-d $3"
+    dir="$3/"
+elif [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+case "$1" in
+    -patch)
+        patch $pdir -f --no-backup-if-mismatch -p0 < $0
+        ;;
+    -unpatch)
+        patch $pdir -f --no-backup-if-mismatch -R -p0 < $0
+        ;;
+    *)
+        echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+        exit 1
+esac
+exit 0
+
+--- gcc/fold-const.c      2007/11/17 13:46:53     130257
++++ gcc/fold-const.c      2007/11/17 14:22:42     130258
+@@ -5660,6 +5660,9 @@
+             }
+           break;
+         }
++     /* If the constant is negative, we cannot simplify this.  */
++     if (tree_int_cst_sgn (c) == -1)
++       { warning(0, "Miscompiled abs() function detected!"); break; }
+       /* FALLTHROUGH */
+     case NEGATE_EXPR:
+       if ((t1 = extract_muldiv (op0, c, code, wide_type, strict_overflow_p))

Attachment: signature.asc
Description: This is a digitally signed message part.


Reply to: