Commit Graph

354 Commits

Author SHA1 Message Date
Dmitry Vyukov 9ca2afd3a1 tsan: fix handling of signals
(do not execute synchronous signals in recursive interceptors)

llvm-svn: 168421
2012-11-21 11:12:33 +00:00
Alexey Samsonov 4ac66c49da [TSan] use explicit ctor for BlockingCall
llvm-svn: 168150
2012-11-16 11:21:07 +00:00
Dmitry Vyukov 262465c126 tsan: eevn better handling of signals
add interceptor for poll()
in addition process signals in every atomic op
in addition process signals in blocking libc functions

llvm-svn: 168050
2012-11-15 17:40:49 +00:00
Dmitry Vyukov 317f39290d tsan: intercept gettimeofday()
llvm-svn: 167630
2012-11-09 19:55:06 +00:00
Dmitry Vyukov 67dc5702f8 tsan: do not sleep at exit if there are no other threads
llvm-svn: 167533
2012-11-07 16:41:57 +00:00
Dmitry Vyukov ea4f1990e1 tsan: add flag to suppress all reports (useful for benchmarking)
llvm-svn: 167532
2012-11-07 16:14:12 +00:00
Alexey Samsonov ad9d65feb8 [TSan] finally remove TsanPrintf in favor of Printf from sanitizer_common
llvm-svn: 167294
2012-11-02 12:17:51 +00:00
Dmitry Vyukov 90c9cbfed4 tsan: cache pc's that cause suppressions (this way we do not need to symbolize the reports)
llvm-svn: 165317
2012-10-05 15:51:32 +00:00
Dmitry Vyukov 27d5b37c38 tsan: output tid's in reports
llvm-svn: 164998
2012-10-02 11:52:05 +00:00
Alexey Samsonov b6879ce94c [TSan] move replacement for new/delete back into tsan_interceptors
llvm-svn: 164764
2012-09-27 09:50:19 +00:00
Alexey Samsonov 313014694f [TSan] Provide replacements for operators new/delete instead of declaring extern C functions with weirdly mangled names (same strategy is used in ASan).
llvm-svn: 164487
2012-09-24 13:19:47 +00:00
Alexey Samsonov 046248c509 [TSan] fix a bunch of warnings reported by pedantic gcc
llvm-svn: 163788
2012-09-13 11:54:41 +00:00
Alexander Potapenko ab7a4ea485 Revert the lockf() support.
llvm-svn: 163614
2012-09-11 11:59:05 +00:00
Alexander Potapenko 1a471772b0 Interceptors for lockf and lockf64, minor calloc() fix.
llvm-svn: 163602
2012-09-11 09:26:35 +00:00
Dmitry Vyukov 318f77749e tsan: add "as if synchronized via sleep" feature
llvm-svn: 163006
2012-08-31 17:27:49 +00:00
Dmitry Vyukov 4723e6b1e5 tsan: implement RWLOCK annotations
llvm-svn: 162019
2012-08-16 13:29:41 +00:00
Dmitry Vyukov 912f3bf279 tsan: refactor cur_thread() -> thr
llvm-svn: 162017
2012-08-16 13:26:54 +00:00
Dmitry Vyukov 954fc8c3e4 tsan: switch to new allocator
llvm-svn: 161953
2012-08-15 15:35:15 +00:00
Dmitry Vyukov 2bee426ed6 tsan: fix parameter type for pwrite64() interceptor
llvm-svn: 161741
2012-08-12 11:08:30 +00:00
Kostya Serebryany 38f318bf20 [tsan] use internal_strnlen in strncpy interceptor (the bug found while booting chromium)
llvm-svn: 160171
2012-07-13 13:04:43 +00:00
Dmitry Vyukov 6fa46f7003 tsan/asan: unify atomics (move atomics from tsan to sanitizer_common)
llvm-svn: 159437
2012-06-29 16:58:33 +00:00
Dmitry Vyukov ef5a5a5650 tsan: replace struct copies where clang inserts memcpy() calls with explicit internal_memcpy() calls
llvm-svn: 159431
2012-06-29 15:26:55 +00:00
Dmitry Vyukov 5bb47a6e0e tsan: remove own memset/memcpy/memcmp (too messy)
llvm-svn: 159430
2012-06-29 15:19:14 +00:00
Dmitry Vyukov a932bdfc1e tsan: clear shadow for ucontext, because it's visible to user
llvm-svn: 159365
2012-06-28 18:20:50 +00:00
Dmitry Vyukov fa985a02ef tsan: fix crashes if signal is caught during thread bootstrap or shutdown
llvm-svn: 159361
2012-06-28 18:07:46 +00:00
Dmitry Vyukov 090f345522 tsan: prevent insertion of unwanted memset/memcpy/memcmp into runtime
llvm-svn: 159294
2012-06-27 21:00:23 +00:00
Dmitry Vyukov b94a8f0c39 tsan: remember and pass original ucontext to signal handlers (instead of a fabricated one)
llvm-svn: 159278
2012-06-27 17:35:35 +00:00
Dmitry Vyukov 97c26bdaea tsan: refactor signal handling code (move some definitions out of common header)
llvm-svn: 159266
2012-06-27 16:05:06 +00:00
Dmitry Vyukov d326a6cf93 tsan: check that signal handlers do not spoil errno.
llvm-svn: 159264
2012-06-27 13:54:46 +00:00
Alexey Samsonov 3efd6fc26c [Sanitizer] Use DEFINE_REAL macro in TSan runtime to call libc implementations of functions. Move strchr to sanitizer_libc.
llvm-svn: 158517
2012-06-15 12:24:07 +00:00
Alexey Samsonov 96ef49a71e [Sanitizer] Move internal_memcmp to common sanitizer libc
llvm-svn: 158450
2012-06-14 14:04:54 +00:00
Alexey Samsonov f516d39c1f [TSan] use efficient real_memcpy inside runtime
llvm-svn: 158260
2012-06-09 09:14:24 +00:00
Alexey Samsonov 59036d2c06 [Sanitizer] add internal_memset and internal_strrchr to sanitizer_common/
llvm-svn: 158202
2012-06-08 14:11:12 +00:00
Alexey Samsonov 6cfc34ea7f [TSan] s/internal_memset/real_memset
llvm-svn: 158200
2012-06-08 13:59:39 +00:00
Alexey Samsonov 91e1a7eb17 [Sanitizer] move internal_strdup and internal_memcpy to common runtime. Make internal allocations from TSan runtime call InternalAlloc from common runtime
llvm-svn: 158148
2012-06-07 11:54:08 +00:00
Alexey Samsonov 8bd9098b32 [Sanitizer] move placement_new definiton from TSan to common runtime
llvm-svn: 158145
2012-06-07 09:50:16 +00:00
Alexey Samsonov 51ae983718 [Sanitizer]: Introduce a common internal printf function. For now, also use tool-specific wrappers TsanPrintf (its output is controlled by TSan flags) and AsanPrintf (which copies its results to the ASan-private buffer). Supported formats: %[z]{d,u,x}, %s, %p. Re-write all format strings in TSan according to this format (this should have no effect on 64-bit platforms).
llvm-svn: 158065
2012-06-06 13:11:29 +00:00
Alexey Samsonov ac4c290d02 [TSan] run some renaming as a preparation for factoring out Printf implementation.
llvm-svn: 158058
2012-06-06 10:13:27 +00:00
Alexey Samsonov ee07290628 [Sanitizer] Move more functions/constants to sanitizer_common.
llvm-svn: 158056
2012-06-06 09:26:25 +00:00
Alexey Samsonov ef2e2cfd33 [Sanitizer] Use common defines for ASan and TSan runtime. Split defines between interface defines (can be visible in user code that includes interface ASan/TSan headers) and internal defines.
llvm-svn: 157998
2012-06-05 13:50:57 +00:00
Alexey Samsonov 3b2f9f4c98 Remove file-type tags in .cc files in tsan/ and sanitizer_common/
llvm-svn: 157928
2012-06-04 13:55:19 +00:00
Alexey Samsonov 90f9630c80 [Sanitizer]: move internal_strcmp to sanitizer_common
llvm-svn: 157926
2012-06-04 13:27:49 +00:00
Dmitry Vyukov 95a5c5ca4c tsan: intercept longjmp() but die in it, greatly simplifies problem diagnostic
llvm-svn: 157760
2012-05-31 18:03:59 +00:00
Dmitry Vyukov 92d917d91c tsan: prevent recursive signal handlers
llvm-svn: 157625
2012-05-29 15:51:27 +00:00
Dmitry Vyukov 7339eb197b tsan: do not call into libc in symbolizer and in other code (this causes recursion and crashes)
llvm-svn: 157466
2012-05-25 11:15:04 +00:00
Dmitry Vyukov e86497ee1c tsan: output message about failure to intercept only if verbosity flag is passed
llvm-svn: 157465
2012-05-25 09:47:18 +00:00
Dmitry Vyukov 011a363c85 tsan: fix sizeof sigset_t
llvm-svn: 157268
2012-05-22 18:01:33 +00:00
Dmitry Vyukov 15710c9220 tsan: simple memory profiler
llvm-svn: 157248
2012-05-22 11:33:03 +00:00
Dmitry Vyukov 46c1a4c25e tsan: implement malloc/free hooks
llvm-svn: 157196
2012-05-21 17:39:40 +00:00
Dmitry Vyukov 99ed663a42 tsan: do not assume non-recursive signal handlers
llvm-svn: 157187
2012-05-21 14:24:20 +00:00
Dmitry Vyukov 98953b7a6d tsan: better, more realistic handling of signals
llvm-svn: 157178
2012-05-21 08:26:51 +00:00
Dmitry Vyukov bea47a5029 tsan: fix potential NULL deref
llvm-svn: 157047
2012-05-18 08:53:16 +00:00
Dmitry Vyukov 19b855fe3e tsan: remove shutdown code
tsan runtime shutdown is problematic for 2 reasons:
1. others crash during shutdown
2. we have to override user exit status (don't know it and can't return from atexit handler)

llvm-svn: 156991
2012-05-17 15:00:27 +00:00
Kostya Serebryany 4ad375f0a9 [tsan] First commit of ThreadSanitizer (TSan) run-time library.
Algorithm description: http://code.google.com/p/thread-sanitizer/wiki/ThreadSanitizerAlgorithm

Status:
The tool is known to work on large real-life applications, but still has quite a few rough edges.
Nothing is guaranteed yet.

The tool works on x86_64 Linux.
Support for 64-bit MacOS 10.7+ is planned for late 2012.
Support for 32-bit OSes is doable, but problematic and not yet planed.

Further commits coming:
  - tests
  - makefiles
  - documentation
  - clang driver patch

The code was previously developed at http://code.google.com/p/data-race-test/source/browse/trunk/v2/
by Dmitry Vyukov and Kostya Serebryany with contributions from
Timur Iskhodzhanov, Alexander Potapenko, Alexey Samsonov and Evgeniy Stepanov.

llvm-svn: 156542
2012-05-10 13:48:04 +00:00