[oe] [PATCH] Fix libgcrypt compilation with GCC-4.4 on mips

Graham Gower graham.gower at gmail.com
Tue Aug 4 02:19:00 UTC 2009


01234567890123456789012345678901234567890123456789012345678901234567890123456789

Patch taken from https://forum.openwrt.org/viewtopic.php?id=20520
Makes sense and seems to work ok.

libgcrypt.inc has --disable-asm in EXTRA_OECONF, yet strangely the configure
script does nothing with this information beyond parsing it. Assembler is
certainly still being used.

-Graham

diff --git a/recipes/libgcrypt/files/mips-h-constraint.patch b/recipes/libgcrypt/files/mips-h-constraint.patch
new file mode 100644
index 0000000..20566bc
--- /dev/null
+++ b/recipes/libgcrypt/files/mips-h-constraint.patch
@@ -0,0 +1,70 @@
+The MIPS port for GCC-4.4 no longer recognizes the h asm constraint.
+Patch from: https://forum.openwrt.org/viewtopic.php?id=20520
+
+--- libgcrypt/mpi/longlong.h-asdf	2009-08-04 09:58:51.000000000 +0930
++++ libgcrypt/mpi/longlong.h	2009-08-04 10:10:27.000000000 +0930
+@@ -710,18 +710,35 @@
+ #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 @@
+  **************  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"         \
diff --git a/recipes/libgcrypt/libgcrypt.inc b/recipes/libgcrypt/libgcrypt.inc
index 691f4fe..4f78a0f 100644
--- a/recipes/libgcrypt/libgcrypt.inc
+++ b/recipes/libgcrypt/libgcrypt.inc
@@ -5,7 +5,8 @@ LICENSE = "GPL LGPL FDL"
 DEPENDS = "libgpg-error"
 
 SRC_URI = "ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-${PV}.tar.gz \
-           file://add-pkgconfig-support.patch;patch=1"
+           file://add-pkgconfig-support.patch;patch=1 \
+	   file://mips-h-constraint.patch;patch=1"
 
 inherit autotools binconfig pkgconfig lib_package
 




More information about the Openembedded-devel mailing list