summaryrefslogtreecommitdiff
path: root/recipes/libgcrypt/files
diff options
context:
space:
mode:
authorGraham Gower <graham.gower@gmail.com>2009-08-03 16:19:00 +0000
committerHolger Hans Peter Freyther <zecke@selfish.org>2009-08-11 03:48:58 +0200
commit0d3f61c8280b329f573ded891fad573f666379db (patch)
tree40c0ca52a9067c23dd68c1a80f6c806429287cf7 /recipes/libgcrypt/files
parent7a7e66530372d88a716bbb4a2b48563680f0ef08 (diff)
libgcrypt.inc: Fix libgcrypt compilation with GCC-4.4 on mips
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. http://patchwork.openembedded.org/patch/919/ Signed-Off-By: Holger Hans Peter Freyther <zecke@selfish.org>
Diffstat (limited to 'recipes/libgcrypt/files')
-rw-r--r--recipes/libgcrypt/files/mips-h-constraint.patch70
1 files changed, 70 insertions, 0 deletions
diff --git a/recipes/libgcrypt/files/mips-h-constraint.patch b/recipes/libgcrypt/files/mips-h-constraint.patch
new file mode 100644
index 0000000000..20566bc259
--- /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" \