Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 308593 - dev-libs/libgcrypt: MIPS: buildfix wrt. GCC-4.4
Summary: dev-libs/libgcrypt: MIPS: buildfix wrt. GCC-4.4
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: [OLD] Library (show other bugs)
Hardware: MIPS Linux
: High normal (vote)
Assignee: Crypto team [DISABLED]
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-03-09 07:12 UTC by Manuel Lauss
Modified: 2010-07-17 07:47 UTC (History)
1 user (show)

See Also:
Package list:
Runtime testing required: ---


Attachments
libgcrypt-1.4.5-gcc44-mips-no-h-constraint Patch (libgcrypt-1.4.5-mips-h-constraint.patch,2.97 KB, patch)
2010-03-09 07:13 UTC, Manuel Lauss
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Manuel Lauss 2010-03-09 07:12:32 UTC
The MIPS port of GCC-4.4 no longer recognizes the "h" asm constraint. 
Patch originally from OpenWRT forums:
  https://forum.openwrt.org/viewtopic.php?id=20520

Passes all tests on little-endian MIPS32 (gcc-4.4.3).

--- libgcrypt-1.4.5/mpi/longlong.h.orig	2010-03-09 07:39:59.000000000 +0100
+++ libgcrypt-1.4.5/mpi/longlong.h	2010-03-09 07:40:04.000000000 +0100
@@ -710,18 +710,35 @@ extern USItype __udiv_qrnnd ();
 #endif /* __m88110__ */
 #endif /* __m88000__ */
 
+/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */
+#if defined (__GNUC__) && defined (__GNUC_MINOR__)
+#define __GNUC_PREREQ(maj, min) \
+	((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+#else
+#define __GNUC_PREREQ(maj, min)  0
+#endif
+
 /***************************************
  **************  MIPS  *****************
  ***************************************/
 #if defined (__mips__) && W_TYPE_SIZE == 32
-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
+#if __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) && __GNUC_PREREQ (2,7)
 #define umul_ppmm(w1, w0, u, v) \
   __asm__ ("multu %2,%3"                                                \
 	   : "=l" ((USItype)(w0)),                                      \
 	     "=h" ((USItype)(w1))                                       \
 	   : "d" ((USItype)(u)),                                        \
 	     "d" ((USItype)(v)))
-#else
+#endif
+#if !defined (umul_ppmm)
 #define umul_ppmm(w1, w0, u, v) \
   __asm__ ("multu %2,%3 \n" \
 	   "mflo %0 \n"     \
@@ -739,14 +756,24 @@ extern USItype __udiv_qrnnd ();
  **************  MIPS/64  **************
  ***************************************/
 #if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64
-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
+#if __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) && __GNUC_PREREQ (2,7)
 #define umul_ppmm(w1, w0, u, v) \
   __asm__ ("dmultu %2,%3"                                               \
 	   : "=l" ((UDItype)(w0)),                                      \
 	     "=h" ((UDItype)(w1))                                       \
 	   : "d" ((UDItype)(u)),                                        \
 	     "d" ((UDItype)(v)))
-#else
+#endif
+#if !defined (umul_ppmm)
 #define umul_ppmm(w1, w0, u, v) \
   __asm__ ("dmultu %2,%3 \n"    \
 	   "mflo %0 \n"         \


Reproducible: Always
Comment 1 Manuel Lauss 2010-03-09 07:13:57 UTC
Created attachment 222777 [details, diff]
libgcrypt-1.4.5-gcc44-mips-no-h-constraint Patch
Comment 2 Ling Kun 2010-04-05 05:09:54 UTC
I have tested it on my Loongson little-endian N32 mips . Pass
Comment 3 Yixun Lan archtester gentoo-dev 2010-04-29 08:08:16 UTC
1.4.5 version
passed test on my gentoo-mips 24kc box,
both cross/native compile 

(In reply to comment #0)
Comment 4 Arfrever Frehtes Taifersar Arahesis (RETIRED) gentoo-dev 2010-07-15 22:27:45 UTC
Doest this problem still occur with dev-libs/libgcrypt-1.4.6?
Comment 5 Manuel Lauss 2010-07-17 07:47:40 UTC
(In reply to comment #4)
> Doest this problem still occur with dev-libs/libgcrypt-1.4.6?

No, the libgcrypt-1.4.6 ebuild builds just fine on my MIPS machines
with gcc-4.4.4.

I'll close the bug.