mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
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
This commit is contained in:
parent
13c4590dd1
commit
89a8411ace
29
configure.in
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(
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user