浏览代码

Throw out this UNALIGNED_INT_ACCESS_OK nonsense. Even where it works, it is often way way slower than doing the right thing. Backport candidate.

svn:r6473
Nick Mathewson 18 年之前
父节点
当前提交
89a8411ace
共有 3 个文件被更改,包括 0 次插入42 次删除
  1. 0 29
      configure.in
  2. 0 2
      src/common/compat.c
  3. 0 11
      src/common/compat.h

+ 0 - 29
configure.in

@@ -398,35 +398,6 @@ AC_CHECK_SIZEOF(socklen_t, , [AC_INCLUDES_DEFAULT()
 
 AC_CHECK_SIZEOF(cell_t)
 
-# Now, let's see about alignment requirements.  On some platforms, we override
-# the default.
-case $host in
- ia64-*-* | arm-*-* | sparc-*-* | sparc64-*-* )
-    tor_cv_unaligned_ok=no
-    ;;
- # On the following architectures unaligned access works, but is not done in
- # hardware.  This means that when you try to do unaligned access the kernel
- # gets to sort out an exception and then work around to somehow make your
- # reqest work, which is quite expensive.  Therefore it's probably better to
- # not even do it.
- alpha-*-* | mips-*-* | mipsel-*-* )
-    tor_cv_unaligned_ok=no
-    ;;
- *)
-AC_CACHE_CHECK([whether unaligned int access is allowed], tor_cv_unaligned_ok,
-[AC_RUN_IFELSE([AC_LANG_SOURCE(
-[[int main () { char s[] = "A\x00\x00\x00\x00\x00\x00\x00";
-return *(int*)(&s[1]); }]])],
-       [tor_cv_unaligned_ok=yes],
-       [tor_cv_unaligned_ok=no],
-       [tor_cv_unaligned_ok=cross])])
-esac
-
-if test $tor_cv_unaligned_ok = yes; then
-  AC_DEFINE([UNALIGNED_INT_ACCESS_OK], 1,
-            [Define to 1 iff unaligned int access is allowed])
-fi
-
 # Now make sure that NULL can be represented as zero bytes.
 AC_CACHE_CHECK([whether memset(0) sets pointers to NULL], tor_cv_null_is_zero,
 [AC_RUN_IFELSE([AC_LANG_SOURCE(

+ 0 - 2
src/common/compat.c

@@ -206,7 +206,6 @@ tor_fix_source_file(const char *fname)
 }
 #endif
 
-#ifndef UNALIGNED_INT_ACCESS_OK
 /**
  * Read a 16-bit value beginning at <b>cp</b>.  Equivalent to
  * *(uint16_t*)(cp), but will not cause segfaults on platforms that forbid
@@ -249,7 +248,6 @@ set_uint32(char *cp, uint32_t v)
 {
   memcpy(cp,&v,4);
 }
-#endif
 
 /**
  * Rename the file <b>from</b> to the file <b>to</b>.  On unix, this is

+ 0 - 11
src/common/compat.h

@@ -223,21 +223,10 @@ const char *tor_socket_strerror(int e);
 /* ===== OS compatibility */
 const char *get_uname(void);
 
-/* Some platforms segfault when you try to access a multi-byte type
- * that isn't aligned to a word boundary.  The macros and/or functions
- * below can be used to access unaligned data on any platform.
- */
-#ifdef UNALIGNED_INT_ACCESS_OK
-#define get_uint16(cp) (*(uint16_t*)(cp))
-#define get_uint32(cp) (*(uint32_t*)(cp))
-#define set_uint16(cp,v) do { *(uint16_t*)(cp) = (v); } while (0)
-#define set_uint32(cp,v) do { *(uint32_t*)(cp) = (v); } while (0)
-#else
 uint16_t get_uint16(const char *cp);
 uint32_t get_uint32(const char *cp);
 void set_uint16(char *cp, uint16_t v);
 void set_uint32(char *cp, uint32_t v);
-#endif
 
 int set_max_file_descriptors(unsigned long limit, unsigned long cap);
 int switch_id(char *user, char *group);