Browse Source

Merge remote-tracking branch 'origin/maint-0.2.4'

Nick Mathewson 11 years ago
parent
commit
d39f713806
2 changed files with 31 additions and 18 deletions
  1. 5 0
      changes/bug8587
  2. 26 18
      configure.ac

+ 5 - 0
changes/bug8587

@@ -0,0 +1,5 @@
+  o Minor bugfixes (build):
+    - Build Tor correctly on 32-bit platforms where the compiler can build
+      but not run code using the "uint128_t" construction. Fixes bug 8587;
+      bugfix on 0.2.4.8-alpha.
+

+ 26 - 18
configure.ac

@@ -676,30 +676,38 @@ if test x$enable_curve25519 != xno; then
       [AC_LANG_PROGRAM([dnl
         #include <stdint.h>
         typedef unsigned uint128_t __attribute__((mode(TI)));
+	int func(uint64_t a, uint64_t b) {
+  	     uint128_t c = ((uint128_t)a) * b;
+             int ok = ((uint64_t)(c>>96)) == 522859 &&
+	           (((uint64_t)(c>>64))&0xffffffffL) == 3604448702L &&
+                   (((uint64_t)(c>>32))&0xffffffffL) == 2351960064L &&
+                   (((uint64_t)(c))&0xffffffffL) == 0;
+             return ok;
+        }
 	], [dnl
-          uint64_t a = ((uint64_t)2000000000) * 1000000000;
-	  uint64_t b = ((uint64_t)1234567890) << 24;
-	  uint128_t c = ((uint128_t)a) * b;
-	  return ((uint64_t)(c>>96)) == 522859 &&
-	         ((uint64_t)(c>>64))&0xffffffffL == 3604448702L &&
-                 ((uint64_t)(c>>32))&0xffffffffL == 2351960064L &&
-                 ((uint64_t)(c))&0xffffffffL == 0;
+	  int ok = func( ((uint64_t)2000000000) * 1000000000,
+	  	         ((uint64_t)1234567890) << 24);
+          return !ok;
         ])],
 	[tor_cv_can_use_curve25519_donna_c64=yes],
         [tor_cv_can_use_curve25519_donna_c64=no],
 	[AC_COMPILE_IFELSE(
           [AC_LANG_PROGRAM([dnl
-            #include <stdint.h>
-            typedef unsigned uint128_t __attribute__((mode(TI)));
-            ], [dnl
-              uint64_t a = ((uint64_t)2000000000) * 1000000000;
-	      uint64_t b = ((uint64_t)1234567890) << 24;
-	      uint128_t c = ((uint128_t)a) * b;
-	      return ((uint64_t)(c>>96)) == 522859 &&
-	             ((uint64_t)(c>>64))&0xffffffffL == 3604448702L &&
-                     ((uint64_t)(c>>32))&0xffffffffL == 2351960064L &&
-                     ((uint64_t)(c))&0xffffffffL == 0;
-            ])],
+        #include <stdint.h>
+        typedef unsigned uint128_t __attribute__((mode(TI)));
+	int func(uint64_t a, uint64_t b) {
+  	     uint128_t c = ((uint128_t)a) * b;
+             int ok = ((uint64_t)(c>>96)) == 522859 &&
+	           (((uint64_t)(c>>64))&0xffffffffL) == 3604448702L &&
+                   (((uint64_t)(c>>32))&0xffffffffL) == 2351960064L &&
+                   (((uint64_t)(c))&0xffffffffL) == 0;
+             return ok;
+        }
+	], [dnl
+	  int ok = func( ((uint64_t)2000000000) * 1000000000,
+	  	         ((uint64_t)1234567890) << 24);
+          return !ok;
+        ])],
             [tor_cv_can_use_curve25519_donna_c64=cross],
 	    [tor_cv_can_use_curve25519_donna_c64=no])])])