On Thu, Sep 30, 2010 at 12:15:05PM -0400, James Vega wrote: > On Thu, Sep 30, 2010 at 9:22 AM, Julien Cristau <jcristau@debian.org> wrote: > > plt-scheme FTBFS on mipsen in testing: > >> [...] > >> gcc -I./.. -I/build/buildd-plt-scheme_4.2.1-1+b1-mips-JD2ADc/plt-scheme-4.2.1/src/mzscheme/src/../include -Wall -c /build/buildd-plt-scheme_4.2.1-1+b1-mips-JD2ADc/plt-scheme-4.2.1/src/mzscheme/src/gmp/gmp.c -o gmp.o > >> /build/buildd-plt-scheme_4.2.1-1+b1-mips-JD2ADc/plt-scheme-4.2.1/src/mzscheme/src/gmp/gmp.c: In function 'mpn_sb_get_str': > >> /build/buildd-plt-scheme_4.2.1-1+b1-mips-JD2ADc/plt-scheme-4.2.1/src/mzscheme/src/gmp/gmp.c:1858: error: impossible constraint in 'asm' > >> /build/buildd-plt-scheme_4.2.1-1+b1-mips-JD2ADc/plt-scheme-4.2.1/src/mzscheme/src/gmp/gmp.c:1863: error: impossible constraint in 'asm' > >> /build/buildd-plt-scheme_4.2.1-1+b1-mips-JD2ADc/plt-scheme-4.2.1/src/mzscheme/src/gmp/gmp.c:1915: error: impossible constraint in 'asm' > >> make[7]: *** [gmp.o] Error 1 > > These are instances of the umul_ppmm macro being called. It's defined > in src/mzscheme/src/gmp/gmplonglong.h as follows: > > [snip] > > I'll try to get some time this weekend to test a patch that simply > always uses the mfhi/mflo macros, but I'm a bit busy. So if someone > else has some spare cycles to test it, I'd appreciate it. I found a patch from upstream that, with a little massaging to backport cleanly, fixes the issue. Would this be acceptable to upload to t-p-u? -- James GPG Key: 1024D/61326D40 2003-09-02 James Vega <jamessan@debian.org>
diff --git a/debian/changelog b/debian/changelog
index eb69202..63ab077 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+plt-scheme (4.2.1-1+squeeze1) testing-proposed-updates; urgency=low
+
+ * Backport patch from upstream to fix mips FTBFS. (Closes: #598615)
+ + debian/rules: Pass --enable-cgcdefault to configure to use alternate
+ garbage collector on alpha/mips(el).
+ * debian/control:
+ + Add myself to Uploaders.
+ + Point Vcs-* to git.
+
+ -- James Vega <jamessan@debian.org> Mon, 04 Oct 2010 00:45:31 -0400
+
plt-scheme (4.2.1-1) unstable; urgency=low
* New upstream version
diff --git a/debian/control b/debian/control
index 46c69a5..b72da8b 100644
--- a/debian/control
+++ b/debian/control
@@ -1,14 +1,15 @@
Source: plt-scheme
-Section: lisp
+Section: lisp
Priority: optional
Maintainer: Ari Pollak <ari@debian.org>
+Uploaders: James Vega <jamessan@debian.org>
Standards-Version: 3.8.0
Build-Depends: cdbs, quilt, debhelper (>= 7.0.0), patchutils,
libfreetype6-dev, libjpeg62-dev, libpng12-dev, libssl-dev, libxaw7-dev,
xbitmaps, libxft-dev, libgl1-mesa-dev | libgl-dev,
libglu1-mesa-dev | libglu-dev, libx11-dev, libxrender-dev, libcairo2-dev
-XS-Vcs-Svn: svn://svn.debian.org/svn/pkt-plt-scheme/drscheme/
-XS-Vcs-Browser: http://svn.debian.org/wsvn/pkg-plt-scheme/drscheme/
+Vcs-Git: git://git.debian.org/collab-maint/racket.git
+Vcs-Browser: http://git.debian.org/?p=collab-maint/racket.git
Homepage: http://www.plt-scheme.org/
Package: plt-scheme
diff --git a/debian/patches/mips-gmp.diff b/debian/patches/mips-gmp.diff
new file mode 100644
index 0000000..0ab4605
--- /dev/null
+++ b/debian/patches/mips-gmp.diff
@@ -0,0 +1,198 @@
+From: Matthew Flatt <mflatt@racket-lang.org>
+Date: Mon, 19 Jul 2010 06:07:55 -0600
+Subject: [PATCH] fix MIPS bignum config and implementation
+ --- includes a fix for gmp with long long configuration,
+ but that's now disabled for MIPS to keep things
+ simpler
+ (cherry picked from commit 7a8efb446eec852dcd770a7ab534c0425efb48ea)
+
+Patch is based on the above, but adjusted accordingly as a backport to
+plt-scheme 4.2.1.
+
+Origin: upstream, http://git.racket-lang.org/plt/commitdiff/43bdcc3
+Bug-Debian: http://bugs.debian.org/598615
+---
+
+diff --git a/src/mzscheme/sconfig.h b/src/mzscheme/sconfig.h
+index a7b8e8b..b0fad01 100644
+--- a/src/mzscheme/sconfig.h
++++ b/src/mzscheme/sconfig.h
+@@ -384,10 +384,6 @@
+
+ # define USE_TIMEZONE_AND_ALTZONE_VAR
+
+-# ifdef _ABIN32
+-# define USE_LONG_LONG_FOR_BIGDIG
+-# endif
+-
+ # define FLAGS_ALREADY_SET
+
+ #endif
+diff --git a/src/mzscheme/src/bignum.c b/src/mzscheme/src/bignum.c
+index 7dacdb0..bd65dcc 100644
+--- a/src/mzscheme/src/bignum.c
++++ b/src/mzscheme/src/bignum.c
+@@ -81,20 +81,23 @@ void scheme_bignum_use_fuel(long n);
+ #endif
+
+ #if defined(USE_LONG_LONG_FOR_BIGDIG)
+-# define TOP_BITS_MASK 0xFFFFFFFF00000000
++# define TOP_BITS_MASK ((bigdig)0xFFFFFFFF << 32)
+ # define BOTTOM_BITS_MASK 0x00000000FFFFFFFF
++# define FIRST_BIT_MASK_LL ((bigdig)FIRST_BIT_MASK << 32)
++#else
++# define FIRST_BIT_MASK_LL FIRST_BIT_MASK
+ #endif
+
+ #if defined(SIXTY_FOUR_BIT_INTEGERS) || defined(USE_LONG_LONG_FOR_BIGDIG)
+ # define BIG_RADIX 18446744073709551616.0 /* = 0x10000000000000000 */
+-# define ALL_ONES 0xFFFFFFFFFFFFFFFF
+ # define WORD_SIZE 64
+ #else
+ # define BIG_RADIX 4294967296.0 /* = 0x100000000 */
+-# define ALL_ONES 0xFFFFFFFF
+ # define WORD_SIZE 32
+ #endif
+
++# define ALL_ONES (~(bigdig)0)
++
+ static Scheme_Object *bignum_one;
+
+ #ifdef MZ_PRECISE_GC
+@@ -406,7 +409,7 @@ int scheme_bignum_get_long_long_val(const Scheme_Object *o, mzlonglong *v)
+ } else if (SCHEME_BIGLEN(o) == 0) {
+ *v = 0;
+ return 1;
+- } else if (SCHEME_BIGDIG(o)[MAX_BN_SIZE_FOR_LL - 1] == FIRST_BIT_MASK
++ } else if (SCHEME_BIGDIG(o)[MAX_BN_SIZE_FOR_LL - 1] == FIRST_BIT_MASK_LL
+ # ifndef USE_LONG_LONG_FOR_BIGDIG
+ && !SCHEME_BIGDIG(o)[0]
+ # endif
+@@ -417,7 +420,7 @@ int scheme_bignum_get_long_long_val(const Scheme_Object *o, mzlonglong *v)
+ v2 = (v2 << 63);
+ *v = v2;
+ return 1;
+- } else if ((SCHEME_BIGDIG(o)[MAX_BN_SIZE_FOR_LL - 1] & FIRST_BIT_MASK) != 0) { /* Won't fit into a signed long long */
++ } else if ((SCHEME_BIGDIG(o)[MAX_BN_SIZE_FOR_LL - 1] & FIRST_BIT_MASK_LL) != 0) { /* Won't fit into a signed long long */
+ return 0;
+ } else {
+ mzlonglong v2;
+@@ -448,7 +451,7 @@ int scheme_bignum_get_unsigned_long_long_val(const Scheme_Object *o, umzlonglong
+ } else {
+ umzlonglong v2;
+ v2 = SCHEME_BIGDIG(o)[0];
+- if (SCHEME_BIGLEN(o)) {
++ if (SCHEME_BIGLEN(o) > 1) {
+ v2 |= ((umzlonglong)SCHEME_BIGDIG(o)[1]) << 32;
+ }
+ *v = v2;
+diff --git a/src/mzscheme/src/gmp/gmp.c b/src/mzscheme/src/gmp/gmp.c
+index 59d9ad2..cc22a05 100644
+--- a/src/mzscheme/src/gmp/gmp.c
++++ b/src/mzscheme/src/gmp/gmp.c
+@@ -54,7 +54,7 @@ THREAD_LOCAL_DECL(static void *gmp_mem_pool);
+ # define MP_BASES_BIG_BASE_10 CNST_LIMB(0x8ac7230489e80000)
+ # define MP_BASES_BIG_BASE_INVERTED_10 CNST_LIMB(0xd83c94fb6d2ac34a)
+ # define MP_BASES_NORMALIZATION_STEPS_10 0
+-# define GMP_NUMB_MASK 0xFFFFFFFFFFFFFFFF
++# define GMP_NUMB_MASK (~(mp_limb_t)0)
+ #endif
+
+ #define MPN_DIVREM_OR_PREINV_DIVREM_1(qp,xsize,ap,size,d,dinv,shift) \
+diff --git a/src/mzscheme/src/gmp/gmp.h b/src/mzscheme/src/gmp/gmp.h
+index b5dddd4..45628b5 100644
+--- a/src/mzscheme/src/gmp/gmp.h
++++ b/src/mzscheme/src/gmp/gmp.h
+@@ -40,9 +40,15 @@ MA 02111-1307, USA. */
+ # endif
+ #endif
+
+-#if defined (__mips) && defined (_ABIN32)
++#if 0
++# if (defined (__mips) || defined(mips)) && defined (_ABIN32)
+ /* Force the use of 64-bit limbs for all 64-bit MIPS CPUs if ABI permits. */
+-#define _LONG_LONG_LIMB
++# define _LONG_LONG_LIMB
++# endif
++#endif
++
++#ifdef USE_LONG_LONG_FOR_BIGDIG
++# define _LONG_LONG_LIMB
+ #endif
+
+ #if (__STDC__-0) || defined (__cplusplus)
+@@ -607,5 +613,13 @@ enum
+ #define gmp_version __gmp_version
+ extern __gmp_const char *gmp_version;
+
++/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */
++#if defined (__GNUC__) && defined (__GNUC_MINOR__)
++#define __GMP_GNUC_PREREQ(maj, min) \
++ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
++#else
++#define __GMP_GNUC_PREREQ(maj, min) 0
++#endif
++
+ #define __GMP_H__
+ #endif /* __GMP_H__ */
+diff --git a/src/mzscheme/src/gmp/gmplonglong.h b/src/mzscheme/src/gmp/gmplonglong.h
+index bca4b77..5199d94 100644
+--- a/src/mzscheme/src/gmp/gmplonglong.h
++++ b/src/mzscheme/src/gmp/gmplonglong.h
+@@ -618,26 +618,45 @@ extern USItype __MPN(udiv_qrnnd) _PROTO ((USItype *, USItype, USItype, USItype))
+ #endif /* __m88000__ */
+
+ #if defined (__mips) && W_TYPE_SIZE == 32
+-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
++#if __GMP_GNUC_PREREQ (4,4)
++#define umul_ppmm(w1, w0, u, v) \
++ do { \
++ UDItype __ll = (UDItype)(u) * (v); \
++ w1 = __ll >> 32; \
++ w0 = __ll; \
++ } while (0)
++#endif
++#if !defined (umul_ppmm) && __GMP_GNUC_PREREQ (2,7)
+ #define umul_ppmm(w1, w0, u, v) \
+ __asm__ ("multu %2,%3" : "=l" (w0), "=h" (w1) : "d" (u), "d" (v))
+-#else
++#endif
++#if !defined (umul_ppmm)
+ #define umul_ppmm(w1, w0, u, v) \
+- __asm__ ("multu %2,%3\n\tmflo %0\n\tmfhi %1" \
+- : "=d" (w0), "=d" (w1) : "d" (u), "d" (v))
++ __asm__ ("multu %2,%3\n\tmflo %0\n\tmfhi %1" \
++ : "=d" (w0), "=d" (w1) : "d" (u), "d" (v))
+ #endif
+ #define UMUL_TIME 10
+ #define UDIV_TIME 100
+ #endif /* __mips */
+
+ #if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64
+-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
++#if __GMP_GNUC_PREREQ (4,4)
++#define umul_ppmm(w1, w0, u, v) \
++ do { \
++ typedef unsigned int __ll_UTItype __attribute__((mode(TI))); \
++ __ll_UTItype __ll = (__ll_UTItype)(u) * (v); \
++ w1 = __ll >> 64; \
++ w0 = __ll; \
++ } while (0)
++#endif
++#if !defined (umul_ppmm) && __GMP_GNUC_PREREQ (2,7)
+ #define umul_ppmm(w1, w0, u, v) \
+ __asm__ ("dmultu %2,%3" : "=l" (w0), "=h" (w1) : "d" (u), "d" (v))
+-#else
++#endif
++#if !defined (umul_ppmm)
+ #define umul_ppmm(w1, w0, u, v) \
+- __asm__ ("dmultu %2,%3\n\tmflo %0\n\tmfhi %1" \
+- : "=d" (w0), "=d" (w1) : "d" (u), "d" (v))
++ __asm__ ("dmultu %2,%3\n\tmflo %0\n\tmfhi %1" \
++ : "=d" (w0), "=d" (w1) : "d" (u), "d" (v))
+ #endif
+ #define UMUL_TIME 20
+ #define UDIV_TIME 140
+--
+1.7.3.1
+
diff --git a/debian/patches/series b/debian/patches/series
index e69de29..4762dac 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -0,0 +1 @@
+mips-gmp.diff
diff --git a/debian/rules b/debian/rules
index 66f2344..9dd3da9 100755
--- a/debian/rules
+++ b/debian/rules
@@ -4,7 +4,13 @@ include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk
include /usr/share/cdbs/1/rules/patchsys-quilt.mk
+DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
DEB_CONFIGURE_SCRIPT := $(CURDIR)/src/configure
+# Some architectures don't like the 3m garbage collector, so use Boehm (aka
+# cgc)
+ifneq (,$(filter alpha mips mipsel,$(DEB_HOST_ARCH)))
+ DEB_CONFIGURE_EXTRA_FLAGS := --enable-cgcdefault
+endif
# Upstream does funky things with assembly, so we'll have to trust their
# compilation settings and override cdbs/dpkg-buildpackage defaults for
# configure and make
Attachment:
signature.asc
Description: Digital signature