diff options
author | Nick Mathewson <nickm@torproject.org> | 2006-10-02 21:00:20 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2006-10-02 21:00:20 +0000 |
commit | 36adc7cdd90f195013eb8e24a90ef40348787212 (patch) | |
tree | e91fc5837efd4ee879f3a22f80ff206629970059 | |
parent | 14f9b537d124866bf67befc473ac5be04f457db4 (diff) | |
download | tor-36adc7cdd90f195013eb8e24a90ef40348787212.tar tor-36adc7cdd90f195013eb8e24a90ef40348787212.tar.gz |
r8844@totoro: nickm | 2006-10-02 16:32:44 -0400
Resolve an XXXX: make sure that we are actually on 2s-complement hardware.
svn:r8576
-rw-r--r-- | configure.in | 21 | ||||
-rw-r--r-- | src/common/torint.h | 9 |
2 files changed, 27 insertions, 3 deletions
diff --git a/configure.in b/configure.in index 45a1ffc54..6ea5dac07 100644 --- a/configure.in +++ b/configure.in @@ -588,6 +588,27 @@ if test $tor_cv_malloc_zero_works = yes; then [Define to 1 iff malloc(0) returns a pointer]) fi +# whether we seem to be in a 2s-complement world. +if test -z "$CROSS_COMPILE"; then +AC_CACHE_CHECK([whether we are using 2s-complement arithmetic], tor_cv_twos_complement, +[AC_RUN_IFELSE([AC_LANG_SOURCE( +[[int main () { int problem = ((-99) != (~99)+1); +return problem ? 1 : 0; }]])], + [tor_cv_twos_complement=yes], + [tor_cv_twos_complement=no], + [tor_cv_twos_complement=cross])]) + +else + # Cross-compiling; let's hope that the target isn't raving mad. + AC_MSG_NOTICE([Cross-compiling: we'll assume that NULL is represented as a sequence of 0-valued bytes.]) + tor_cv_twos_complement=yes +fi + +if test $tor_cv_twos_complement = yes; then + AC_DEFINE([USING_TWOS_COMPLEMENT], 1, + [Define to 1 iff we represent negative integers with two's complement]) +fi + # Whether we should use the dmalloc memory allocation debugging library. AC_MSG_CHECKING(whether to use dmalloc (debug memory allocation library)) AC_ARG_WITH(dmalloc, diff --git a/src/common/torint.h b/src/common/torint.h index b69af3eea..6ec53ed12 100644 --- a/src/common/torint.h +++ b/src/common/torint.h @@ -220,9 +220,12 @@ typedef uint32_t uintptr_t; #error "Missing type uint64_t" #endif -/* XXXX This assumes a sane (2's-complement) representation. But if you - * aren't 2's complement, and you don't define LONG_MAX, then you're so - * bizarre that I want nothing to do with you. */ +/* This assumes a sane (2's-complement) representation. But if you + * aren't 2's complement, and you don't define LONG_MAX, then you're so + * bizarre that I want nothing to do with you. */ +#ifndef USING_TWOS_COMPLEMENT +#error "Seems that your platform doesn't use 2's complement arithmetic. Argh." +#endif #ifndef LONG_MAX #if (SIZEOF_LONG == 4) #define LONG_MAX 0x7fffffffL |