Merge branch 'bug8587_v3' into maint-0.2.4

This commit is contained in:
Nick Mathewson 2013-04-11 18:12:44 -04:00
commit a1178cdbcf
2 changed files with 31 additions and 18 deletions

5
changes/bug8587 Normal file
View File

@ -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.

View File

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