GNU bug report logs - #13030
factor: infinite loop on Linux/powerpc

Previous Next

Package: coreutils;

Reported by: Colin Watson <cjwatson <at> ubuntu.com>

Date: Thu, 29 Nov 2012 17:51:01 UTC

Severity: normal

Done: Pádraig Brady <P <at> draigBrady.com>

Bug is archived. No further changes may be made.

Full log


Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Colin Watson <cjwatson <at> ubuntu.com>
To: bug-coreutils <at> gnu.org
Subject: factor: infinite loop on Linux/powerpc
Date: Thu, 29 Nov 2012 14:28:18 +0000
Both Debian and Ubuntu builds of coreutils 8.20 hang while running the
test suite on powerpc.  This turns out to be reproducible using 'factor
122'.

This turns out to be somewhat related to
http://debbugs.gnu.org/cgi/bugreport.cgi?bug=12754, but not quite the
same.  uintmax_t is 64 bits, but the cntlzw instruction takes 32-bit
operands, and the cntlzd option is only available on 64-bit hardware.  I
believe the correct answer is to add an _LP64 check around the PPC64
code, so that this falls back to the C implementations:

--- coreutils-8.20~/src/longlong.h	2012-11-29 14:25:07.000000000 +0000
+++ coreutils-8.20/src/longlong.h	2012-11-29 14:26:40.000000000 +0000
@@ -1398,7 +1398,7 @@
 
 /* We should test _IBMR2 here when we add assembly support for the system
    vendor compilers.  */
-#if HAVE_HOST_CPU_FAMILY_powerpc && W_TYPE_SIZE == 64
+#if HAVE_HOST_CPU_FAMILY_powerpc && W_TYPE_SIZE == 64 && defined (_LP64)
 #if !defined (_LONG_LONG_LIMB)
 /* _LONG_LONG_LIMB is ABI=mode32 where adde operates on 32-bit values.  So
    use adde etc only when not _LONG_LONG_LIMB.  */

Thanks,

-- 
Colin Watson                                       [cjwatson <at> ubuntu.com]




This bug report was last modified 12 years and 132 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.