On Wed, Feb 13, 2013 at 1:19 AM, Konstantin Serebryany
<[email protected]> wrote:
> Hi,
>
> The attached patch is the libsanitizer merge from upstream r175042.
>
> Lots of changes. Among other things:
> - x86_64 linux: change the shadow offset to 0x7fff8000 (~5% speedup)
> - the new asan allocator is enabled on Mac (was enabled on Linux before).
> - tsan finds races between atomic and plain accesses
> - better scanf interceptor, enabled by default
> - don't include linux/futex.h (fixes PR56128)
> - simple tests seem to work (again?) on PowerPC64 with 44-bit address
> space (46 AS not tested)
>
> Patch for libsanitizer is automatically generated by libsanitizer/merge.sh
> Tested with
> rm -rf */{*/,}libsanitizer \
> && make -j 50 \
> && make -C gcc check-g{cc,++}
> RUNTESTFLAGS='--target_board=unix\{-m32,-m64\} asan.exp'
>
> Our internal LLVM bots (Linux, Mac and Android) are green.
>
> Ok to commit?
>
> --kcc
This breaks build on Linux/x32 where off_t is 64bit:
In file included from
/export/gnu/import/git/gcc/libsanitizer/interception/interception.h:20:0,
from
/export/gnu/import/git/gcc/libsanitizer/interception/interception_type_test.cc:15:
/export/gnu/import/git/gcc/libsanitizer/sanitizer_common/sanitizer_internal_defs.h:221:72:
error: size of array ‘assertion_failed__34’ is negative
typedef char IMPL_PASTE(assertion_failed_##_, line)[2*(int)(pred)-1]
^
/export/gnu/import/git/gcc/libsanitizer/sanitizer_common/sanitizer_internal_defs.h:215:30:
note: in expansion of macro ‘IMPL_COMPILER_ASSERT’
#define COMPILER_CHECK(pred) IMPL_COMPILER_ASSERT(pred, __LINE__)
^
/export/gnu/import/git/gcc/libsanitizer/interception/interception_type_test.cc:34:1:
note: in expansion of macro ‘COMPILER_CHECK’
COMPILER_CHECK(sizeof(OFF_T) == sizeof(off_t));
^
make[7]: *** [interception_type_test.lo] Error 1
This patch fixes it. OK to install?
Thanks.
--
H.J.
---
diff --git a/libsanitizer/interception/interception.h
b/libsanitizer/interception/interception.h
index b4c4137..c4c5026 100644
--- a/libsanitizer/interception/interception.h
+++ b/libsanitizer/interception/interception.h
@@ -28,8 +28,8 @@ typedef __sanitizer::s64 INTMAX_T;
// WARNING: OFF_T may be different from OS type off_t, depending on
the value of
// _FILE_OFFSET_BITS. This definition of OFF_T matches the ABI of system calls
// like pread and mmap, as opposed to pread64 and mmap64.
-// Mac is special.
-#ifdef __APPLE__
+// Mac and Linux/x86-64 are special.
+#if defined(__APPLE__) || (defined(__linux__) && defined(__x86_64__))
typedef __sanitizer::u64 OFF_T;
#else
typedef __sanitizer::uptr OFF_T;