Dmitry Vyukov
c9e12aa323
tsan: deobfuscate global ctx variable
...
llvm-svn: 204327
2014-03-20 10:36:20 +00:00
Dmitry Vyukov
4076b3481a
tsan: add interceptors for fopen64, freopen64, tmpfile, tmpfile64
...
llvm-svn: 203647
2014-03-12 08:26:43 +00:00
Evgeniy Stepanov
72a9d25060
[sanitizer] Simplify interceptors with user callbacks.
...
Get rid of the context argument in UNPOISON_PARAM and INITIALIZE_RANGE.
Get rid of all the thread-local contexts in interceptors.
llvm-svn: 203119
2014-03-06 13:26:09 +00:00
Alexey Samsonov
6dece3c99f
Add common interceptors for memchr/memrchr
...
llvm-svn: 202972
2014-03-05 13:25:32 +00:00
Dmitry Vyukov
975b02ad71
tsan: move all pthread_cond interceptors into sanitizer_common
...
llvm-svn: 202813
2014-03-04 10:17:40 +00:00
Dmitry Vyukov
a12923e265
tsan: intercept vfork
...
this fixes obscure false positives
see the comments and the test for details
llvm-svn: 202400
2014-02-27 14:36:16 +00:00
Kostya Serebryany
fd88edfddb
[sanitizer] partially support pthread_rwlock_* (no rd* form yet)
...
llvm-svn: 202128
2014-02-25 09:33:10 +00:00
Kostya Serebryany
11f4f30fa7
[sanitizer] add support for try_lock in deadlock detector
...
llvm-svn: 202120
2014-02-25 08:24:15 +00:00
Dmitry Vyukov
a661a13c0f
tsan: fix SIGRTMAX handling
...
llvm-svn: 202022
2014-02-24 11:28:59 +00:00
Kostya Serebryany
cf5d8e4f29
AdjustStackSizeLinux() is used in Lsan, Tsan and Msan non-Linux-specific code so it seems it should have more generic name and moved to a common scope.
...
Renamed to AdjustStackSize.
Patch by Viktor Kutuzov.
llvm-svn: 202011
2014-02-24 08:53:26 +00:00
Alexey Samsonov
dce6dd9d29
[TSan] Fix mismatched mangled names in operator delete interceptors
...
llvm-svn: 201069
2014-02-10 08:34:46 +00:00
Nick Lewycky
c0930b808b
Stick to C++98 for this.
...
llvm-svn: 201015
2014-02-08 01:36:21 +00:00
Nick Lewycky
fff46e01fd
Update these declarations of operator delete (and delete[]) to have noexcept,
...
as required per core issue 1552 and warned about with
-Wimplicit-exception-spec-mismatch.
llvm-svn: 201014
2014-02-08 01:29:07 +00:00
Alexander Potapenko
a1193a50b0
[TSan] Don't flush all file streams on program shutdown to avoid deadlocks on file stream locks.
...
This should fix https://code.google.com/p/thread-sanitizer/issues/detail?id=47 .
llvm-svn: 200922
2014-02-06 13:37:14 +00:00
Dmitry Vyukov
8aaa44c43d
tsan: relax check for errno spoiling more
...
We do not detect errno spoiling for SIGTERM,
because some SIGTERM handlers do spoil errno but reraise SIGTERM,
tsan reports false positive in such case.
It's difficult to properly detect this situation (reraise),
because in async signal processing case (when handler is called directly
from rtl_generic_sighandler) we have not yet received the reraised
signal; and it looks too fragile to intercept all ways to reraise a signal.
llvm-svn: 200742
2014-02-04 07:10:45 +00:00
Alexander Potapenko
d5802fe548
Make signal-related functions use __sanitizer_* structures instead of __sanitizer_kernel_* ones.
...
Also rename internal_sigaction() into internal_sigaction_norestorer(), as this function doesn't fully
implement the sigaction() functionality on Linux.
This change is a part of refactoring intended to have common signal handling behavior in all tools.
llvm-svn: 200535
2014-01-31 11:29:51 +00:00
Dmitry Vyukov
dc96a0fada
tsan: remove interceptor stats
...
They seems to be unused, but cause maintenance pain.
llvm-svn: 200308
2014-01-28 11:02:04 +00:00
Dmitry Vyukov
7c9621c0be
tsan: relax checking of errno spoiling in signal handlers
...
allow SIGABRT to spoil errno, because some real programs
reset SIGABRT handler in the handler, re-raise SIGABRT and return from the handler
llvm-svn: 200304
2014-01-28 09:49:48 +00:00
Dmitry Vyukov
1b3862ab06
tsan: fix signal handling
...
We left ignore_interceptors>0 when calling signal handlers
from blocking interceptors, this leads to missing synchronization in such signal handler.
llvm-svn: 200003
2014-01-24 14:16:00 +00:00
Dmitry Vyukov
16e7a758b0
tsan: do not deadlock on fork
...
Currently correct programs can deadlock after fork, because atomic operations and async-signal-safe calls are not async-signal-safe under tsan.
With this change:
- if a single-threaded program forks, the child continues running with verification enabled (the tsan background thread is recreated as well)
- if a multi-threaded program forks, then the child runs with verification disabled (memory accesses, atomic operations and interceptors are disabled); it's expected that it will exec soon anyway
- if the child tries to create more threads after multi-threaded fork, the program aborts with error message
- die_after_fork flag is added that allows to continue running, but all bets are off
http://llvm-reviews.chandlerc.com/D2614
llvm-svn: 199993
2014-01-24 12:33:35 +00:00
Dmitry Vyukov
6971fef2f9
tsan: fix false positive in pthread stack manupulation
...
pthread uses internal cache, we do not see synchronization in it
llvm-svn: 197982
2013-12-24 14:38:12 +00:00
Dmitry Vyukov
ce3721057d
tsan: remove in_rtl counter
...
This is intended to address the following problem.
Episodically we see CHECK-failures when recursive interceptors call back into user code. Effectively we are not "in_rtl" at this point, but it's very complicated and fragile to properly maintain in_rtl property. Instead get rid of it. It was used mostly for sanity CHECKs, which basically never uncover real problems.
Instead introduce ignore_interceptors flag, which is used in very few narrow places to disable recursive interceptors (e.g. during runtime initialization).
llvm-svn: 197979
2013-12-24 12:55:56 +00:00
Dmitry Vyukov
8d1eb705c7
tsan: add support for passing file descriptors over UNIX domain sockets
...
tsan was missing new fd's arrived from recvmsg(),
and thus was reporting false positives due to missed synchronization on the fd's
llvm-svn: 195914
2013-11-28 09:09:42 +00:00
Dmitry Vyukov
3238e1c913
tsan: better diagnostics if thread finishes with ignores enabled
...
print thread creation stack
and stacks where ignores were enabled.
llvm-svn: 195836
2013-11-27 11:30:28 +00:00
Dmitry Vyukov
ee882ba4a1
tsan: support synchronization by means of linux aio
...
http://llvm-reviews.chandlerc.com/D2269
llvm-svn: 195830
2013-11-27 09:10:47 +00:00
Dmitry Vyukov
4ca8ee692e
tsan: fix handling of setjmp
...
It's incorrect to take address of setjmp,
because it may not (ligally) present in libc.
Fixes http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59188
llvm-svn: 195345
2013-11-21 11:48:29 +00:00
Dmitry Vyukov
4bbe6dc8a9
tsan: add support for robust mutexes
...
llvm-svn: 194823
2013-11-15 16:58:12 +00:00
Evgeniy Stepanov
90e12a6cb2
[sanitizer] Avoid needless use of stringification (#symver) in INTERCEPT_FUNCTION_VER.
...
This is a workaround for clang-format bug (PR17874).
llvm-svn: 194468
2013-11-12 10:21:52 +00:00
Evgeniy Stepanov
b69699eb58
[sanitizer] Warn if interception fails.
...
This includes a clang-format pass over common interceptors.
llvm-svn: 194372
2013-11-11 11:28:30 +00:00
Dmitry Vyukov
a131bff475
tsna: do not call user code from within runtime (from fflush)
...
llvm-svn: 193880
2013-11-01 19:15:32 +00:00
Evgeniy Stepanov
596d108feb
[tsan] Fix unused variable warnings.
...
llvm-svn: 193639
2013-10-29 18:44:52 +00:00
Dmitry Vyukov
3e8432ee6c
tsan/asan: support pthread_setname_np to set thread names
...
llvm-svn: 193602
2013-10-29 10:30:39 +00:00
Dmitry Vyukov
33dd200ba9
tsan: start the background thread with signals blocked, otherwise it can steal users signals
...
llvm-svn: 193519
2013-10-28 12:29:32 +00:00
Evgeniy Stepanov
c2b6cb0747
[sanitizer] Intercept pthread_attr_get*.
...
llvm-svn: 193405
2013-10-25 13:01:31 +00:00
Alexey Samsonov
bc7c87a8cb
[Sanitizer] Move pthread_cond_signal and pthread_cond_broadcast to common interceptors
...
llvm-svn: 192876
2013-10-17 09:24:03 +00:00
Alexey Samsonov
edecc38395
Make some pthread_mutex_* and pthread_cond_* interceptors common.
...
Reviewers: eugenis, dvyukov
Reviewed By: dvyukov
CC: llvm-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D1937
llvm-svn: 192774
2013-10-16 08:20:31 +00:00
Dmitry Vyukov
7502a3a90c
tsan: use verbosity flag in sanitizer_common code directly
...
now it's available from common_flags()
llvm-svn: 192705
2013-10-15 14:12:26 +00:00
Dmitry Vyukov
6f61206f55
tsan: resolve symlinks for called_from_lib suppressions
...
llvm-svn: 192688
2013-10-15 11:34:59 +00:00
Dmitry Vyukov
6dc0775f1f
tsan: catch more races on file descriptors
...
llvm-svn: 192452
2013-10-11 14:13:11 +00:00
Dmitry Vyukov
c9f9ada48d
tsan: fix epoll_ctl interceptor
...
Currently data-race-test unittests fail with the following false positive:
WARNING: ThreadSanitizer: data race (pid=20365)
Write of size 8 at 0x7da000008050 by thread T54:
#0 close tsan_interceptors.cc:1483 (racecheck_unittest-linux-amd64-O0+0x0000000eb34a)
#1 NegativeTests_epoll::Worker2() unittest/posix_tests.cc:1148 (racecheck_unittest-linux-amd64-O0+0x0000000cc6b1)
#2 MyThread::ThreadBody(MyThread*) unittest/./thread_wrappers_pthread.h:367 (racecheck_unittest-linux-amd64-O0+0x000000097500)
Previous read of size 8 at 0x7da000008050 by thread T49:
#0 epoll_ctl tsan_interceptors.cc:1646 (racecheck_unittest-linux-amd64-O0+0x0000000e9fee)
#1 NegativeTests_epoll::Worker1() unittest/posix_tests.cc:1140 (racecheck_unittest-linux-amd64-O0+0x0000000cc5b5)
#2 MyThread::ThreadBody(MyThread*) unittest/./thread_wrappers_pthread.h:367 (racecheck_unittest-linux-amd64-O0+0x000000097500)
llvm-svn: 192448
2013-10-11 13:33:22 +00:00
Sergey Matveev
dc75cf3368
[sanitizer] Move the PTHREAD_DESTRUCTOR_ITERATIONS constant to sanitizer_linux.h.
...
Add a test.
llvm-svn: 192442
2013-10-11 12:09:49 +00:00
Dmitry Vyukov
513a3a6c0b
tsan: fix a bug in pthread_once when called from an ignored library
...
It must set thr->in_rtl = 0 before executing user callback.
llvm-svn: 191946
2013-10-04 10:27:21 +00:00
Dmitry Vyukov
fdfb2ade8f
asan/msan/tsan: move _exit interceptor to common interceptors
...
llvm-svn: 191903
2013-10-03 15:22:29 +00:00
Dmitry Vyukov
e07dc7d1fe
tsan: intercept _exit so that we can override exit status
...
llvm-svn: 191898
2013-10-03 14:00:46 +00:00
Dmitry Vyukov
5ba736457c
tsan: ignore interceptors coming from specified libraries
...
LibIgnore allows to ignore all interceptors called from a particular set
of dynamic libraries. LibIgnore remembers all "called_from_lib" suppressions
from the provided SuppressionContext; finds code ranges for the libraries;
and checks whether the provided PC value belongs to the code ranges.
Also make malloc and friends interceptors use SCOPED_INTERCEPTOR_RAW instead of
SCOPED_TSAN_INTERCEPTOR, because if they are called from an ignored lib,
then must call our internal allocator instead of libc malloc.
llvm-svn: 191897
2013-10-03 13:37:17 +00:00
Evgeniy Stepanov
8f27f6b549
[sanitizer] A bunch of libc interceptors.
...
sigwait
sigwaitinfo
sigtimedwait
sigemptyset
sigfillset
sigpending
sigprocmask
llvm-svn: 191374
2013-09-25 14:47:43 +00:00
Dmitry Vyukov
76ec1910ac
tsan: ignore malloc/free/strdup when called from libjvm
...
llvm-svn: 191153
2013-09-21 23:44:19 +00:00
Dmitry Vyukov
150406bbf3
tsan: ignore all interceptors coming directly from JVM
...
llvm-svn: 191152
2013-09-21 23:06:00 +00:00
Dmitry Vyukov
1da6b4d5c8
tsan: intercept fork syscall
...
llvm-svn: 191144
2013-09-21 20:59:04 +00:00
Dmitry Vyukov
a182592aa0
tsan: intercept close syscall
...
llvm-svn: 191129
2013-09-21 03:47:35 +00:00
Dmitry Vyukov
481d90c480
tsan: handle memory read/write in syscalls
...
llvm-svn: 191074
2013-09-20 06:54:14 +00:00
Dmitry Vyukov
20f6ff1e66
tsan: do not crash when user intercepts fopen()
...
llvm-svn: 191066
2013-09-20 02:01:38 +00:00
Dmitry Vyukov
b523b9c8d4
tsan: fix linking of tsan runtime into dynamic libraries
...
versioned symbols can not be linked into dynamic library w/o linker script
also simplifies code as side effect
llvm-svn: 191056
2013-09-19 23:44:51 +00:00
Alexey Samsonov
1c5cd7516f
[TSan] Fix -Wempty-body warning
...
llvm-svn: 190993
2013-09-19 07:59:18 +00:00
Dmitry Vyukov
f54631dcfe
tsan: prevent the following false positive due to __cxa_atexit
...
WARNING: ThreadSanitizer: data race (pid=29103)
Write of size 8 at 0x7d64003bbf00 by main thread:
#0 free tsan_interceptors.cc:477
#1 __run_exit_handlers <null>:0 (libc.so.6+0x000000050cb7)
Previous write of size 8 at 0x7d64003bbf00 by thread T78 (mutexes: write M9896):
#0 calloc tsan_interceptors.cc:449
#1 ...
llvm-svn: 190989
2013-09-19 04:48:59 +00:00
Dmitry Vyukov
1a7ca92006
tsan: refactor internal IgnoreCtl interface
...
llvm-svn: 190987
2013-09-19 04:39:04 +00:00
Eli Friedman
abc1a5cb9b
Delete unused variables.
...
llvm-svn: 190383
2013-09-10 03:27:07 +00:00
Kostya Serebryany
895ff83e47
[tsan] make calloc crash instead of returning 0 on overflow (controlled by the allocator_may_return_null flag)
...
llvm-svn: 190135
2013-09-06 11:04:14 +00:00
Dmitry Vyukov
4e27d1fdaf
tsan: catch races on condition variables
...
llvm-svn: 189816
2013-09-03 15:04:15 +00:00
Dmitry Vyukov
3a6c7cea77
tsan: properly intercept pthread_cond functions
...
llvm-svn: 189767
2013-09-02 18:06:28 +00:00
Dmitry Vyukov
8cff61f29e
tsan: intercept getaddrinfo
...
This is necessary to prevent false positives, see:
https://code.google.com/p/thread-sanitizer/issues/detail?id=25
llvm-svn: 188291
2013-08-13 16:51:27 +00:00
Timur Iskhodzhanov
45e82d12b0
[*San/RTL] Fix minor breakage
...
Grumbling: this hasn't been caught by running 'make check-{a,l,t}san check-sanitizer'
llvm-svn: 188262
2013-08-13 12:03:51 +00:00
Timur Iskhodzhanov
eee13914e2
Define SANITIZER_INTERFACE_ATTRIBUTE on Windows and fix all the places where SANITIZER_INTERFACE_ATTRIBUTE or SANITIZER_ATTRIBUTE_WEAK are used
...
llvm-svn: 188261
2013-08-13 11:42:45 +00:00
Evgeniy Stepanov
64cace0687
[sanitizer] Intercept poll/ppoll.
...
llvm-svn: 188177
2013-08-12 13:19:53 +00:00
Dmitry Vyukov
e9c456e15f
tsan: treat SIGSYS as synchronous signal
...
It is required for chromium sandboxing code.
From the description it seems to be indeed synchronous -- called back on syscall with incorrect arguments,
but seems to be unused in practice. So this should be fine.
llvm-svn: 186579
2013-07-18 13:14:11 +00:00
Dmitry Vyukov
c2e4e95580
tsan: disable one more interceptor that causes recursion
...
llvm-svn: 186497
2013-07-17 07:10:47 +00:00
Alexey Samsonov
9916aa2d95
[Sanitizer] move strcpy and strncpy to common interceptors
...
llvm-svn: 186408
2013-07-16 12:51:53 +00:00
Dmitry Vyukov
1a0c76fa55
tsan: support sigsuspend() call
...
Intercepting it makes it process pending signal before return.
llvm-svn: 186400
2013-07-16 11:28:04 +00:00
Evgeniy Stepanov
faba61a7bc
[sanitizer] Support GLOB_ALTDIRFUNC in glob interceptor.
...
llvm-svn: 185932
2013-07-09 12:07:59 +00:00
Alexey Samsonov
8918140809
Hide mlock/munlock info message under verbosity flag.
...
llvm-svn: 185314
2013-07-01 08:25:29 +00:00
Dmitry Vyukov
eb95448245
tsan: add missing __attribute__((visibility("default"))) to interface functions
...
llvm-svn: 184858
2013-06-25 15:36:25 +00:00
Evgeniy Stepanov
0e8053af08
[sanitizer] Intercept readv, preadv, writev, pwritev.
...
llvm-svn: 184717
2013-06-24 10:43:23 +00:00
Dmitry Vyukov
5cf581a8d4
tsan: consistently use return pc as top frame pc
...
always substract 1 from the top pc
this allows to get correct stacks with -O2
llvm-svn: 184112
2013-06-17 19:57:03 +00:00
Dmitry Vyukov
b19a26b852
tsan: disable getaddrinfo() interceptor for tsan (causes recursion)
...
llvm-svn: 183649
2013-06-10 11:35:08 +00:00
Evgeniy Stepanov
a4d08c4e87
[sanitizer] Move TSan and MSan recvmsg interceptors to common.
...
llvm-svn: 182843
2013-05-29 11:30:00 +00:00
Evgeniy Stepanov
08f662845d
[sanitizer] Share TSan accept & accept4 interceptors with other sanitizers.
...
llvm-svn: 182835
2013-05-29 09:09:58 +00:00
Peter Collingbourne
ffaf2eac4d
[nolibc] Move all platforms to internal_getpid.
...
Before, we had an unused internal_getpid function for Linux, and a
platform-independent GetPid function. To make the naming conventions
consistent for syscall-like functions, the GetPid syscall wrapper
in sanitizer_posix.cc is moved to sanitizer_mac.cc, and GetPid is
renamed to internal_getpid, bringing the Linux variant into use.
llvm-svn: 182132
2013-05-17 16:56:53 +00:00
Dmitry Vyukov
beaf786151
tsan: disable getpwuid_r() and glob64() interceptors under tsan, because they cause interceptor recursion if user intercepts fopen()
...
llvm-svn: 180182
2013-04-24 11:06:05 +00:00
Evgeniy Stepanov
755eb32a39
[sanitizer] Add syscall handlers to ASan and TSan runtimes.
...
ASan checks addressability of syscall arguments. TSan does nothing for now.
llvm-svn: 179380
2013-04-12 14:57:03 +00:00
Timur Iskhodzhanov
07d06d7cf5
Remove all 'static' before ALWAYS_INLINE
...
llvm-svn: 178290
2013-03-28 21:16:09 +00:00
Dmitry Vyukov
4adf49d253
tsan: intercept setjmp/longjmp
...
llvm-svn: 177858
2013-03-25 10:10:44 +00:00
Dmitry Vyukov
9af68719ed
tsan: return 0 on malloc() failure instead of crashing
...
llvm-svn: 177741
2013-03-22 17:06:22 +00:00
Dmitry Vyukov
69c323d66f
tsan: intercept abort() to fflush() libc streams
...
llvm-svn: 177637
2013-03-21 12:50:43 +00:00
Dmitry Vyukov
6911a7f1d1
tsan: remove bogus CHECK
...
Asynchronous signal (e.g. SIGABRT) can be received with any value of in_rtl.
llvm-svn: 177636
2013-03-21 12:44:44 +00:00
Dmitry Vyukov
5e797a8e57
tsan: add a comment about magic numbers
...
llvm-svn: 177628
2013-03-21 06:28:04 +00:00
Dmitry Vyukov
6120bac6e6
tsan: correct sizes of signal-related data structures
...
llvm-svn: 177526
2013-03-20 14:57:28 +00:00
Dmitry Vyukov
0954e9c01d
tsan: call fflush(0) on exit again
...
llvm-svn: 177522
2013-03-20 14:01:10 +00:00
Dmitry Vyukov
9dd06ad47a
tsan: instruct malloc() to consume less memory
...
llvm-svn: 177393
2013-03-19 12:24:19 +00:00
Evgeniy Stepanov
b4a218db34
[sanitizer] Don't adjust the size of the user-allocated stack.
...
Moved this code to sanitizer_common.
llvm-svn: 177383
2013-03-19 09:30:52 +00:00
Dmitry Vyukov
ce26a0aa92
tsan: touch less shadow memory during operations on big memory ranges
...
greatly reduces memory consumption
llvm-svn: 177289
2013-03-18 16:56:48 +00:00
Dmitry Vyukov
2e7f29f042
tsan: mark shadow for thread stack as "don't need" when thread exits
...
llvm-svn: 177288
2013-03-18 15:49:07 +00:00
Dmitry Vyukov
15bee188c4
tsan: madvise(DONTNEED) shadow memory on munmap()
...
llvm-svn: 177278
2013-03-18 11:51:51 +00:00
Alexey Samsonov
9aecdfe34d
[TSan] Switch TSan runtime to use ThreadRegistry class from sanitizer_common
...
llvm-svn: 177154
2013-03-15 13:48:44 +00:00
Alexey Samsonov
41a560b8cd
[TSan] Add missing header inclusion
...
llvm-svn: 177013
2013-03-14 07:13:00 +00:00
Alexey Samsonov
109ddd0fe4
[TSan] Use __sanitizer_pthread_attr_t in TSan
...
llvm-svn: 177012
2013-03-14 07:10:52 +00:00
Alexey Samsonov
85f0a7e644
[TSan] Add interceptor for malloc_usable_size()
...
llvm-svn: 176013
2013-02-25 08:43:10 +00:00
Dmitry Vyukov
effd98b0f4
tsan: intercept libc __res_iclose
...
this is required to catch close of file descriptors created in getaddrinfo()
llvm-svn: 174624
2013-02-07 15:27:45 +00:00
Dmitry Vyukov
606de60163
tsan: intercept bind/listen
...
llvm-svn: 174311
2013-02-04 08:06:32 +00:00
Dmitry Vyukov
1fab680c1b
tsan: catch races on fd in more cases
...
llvm-svn: 174184
2013-02-01 15:52:35 +00:00
Dmitry Vyukov
ba4291480d
tsan: detect races between plain and atomic memory accesses
...
llvm-svn: 174163
2013-02-01 09:42:06 +00:00
Alexey Samsonov
49a32c1d08
[Sanitizer] update style checker script and fix namespace style warnings
...
llvm-svn: 173910
2013-01-30 07:45:58 +00:00
Dmitry Vyukov
4399d92252
tsan: support for inprocess symbolizer
...
llvm-svn: 173797
2013-01-29 13:05:30 +00:00
Dmitry Vyukov
b130fc3c0d
tsan: add interceptor stubs for stat family of functions
...
llvm-svn: 173782
2013-01-29 09:23:09 +00:00
Kostya Serebryany
fa79cd65e2
[sanitizer] fix calloc overflow in asan/tsan/msan
...
llvm-svn: 173441
2013-01-25 11:46:22 +00:00
Evgeniy Stepanov
01671c33ff
[sanitizer] lint
...
llvm-svn: 172817
2013-01-18 13:12:56 +00:00
Evgeniy Stepanov
a6c4a387ee
[sanitizer] Rename 2 files *.h->*.inc as appropriate.
...
Also add a missing include.
llvm-svn: 172814
2013-01-18 13:01:18 +00:00
Evgeniy Stepanov
222076e972
[sanitizer] Common *scanf interceptors.
...
llvm-svn: 172805
2013-01-18 11:17:23 +00:00
Kostya Serebryany
69fe0ba415
[sanitizer] reapply r172719, r172721-172723, r172725, and also fix the warning on Mac.
...
llvm-svn: 172791
2013-01-18 06:43:13 +00:00
Jakob Stoklund Olesen
7956e0094d
Revert r172719, r172721-172723, and r172725.
...
The r172719 patch broke the build on Mac, the others depended on it.
compiler-rt/lib/asan/asan_interceptors.cc:78:13: error: unused function
'SetThreadName' [-Werror,-Wunused-function]
static void SetThreadName(const char *name) {
Orignal headlines:
[asan] attempting to fix the Mac build
[asan] restructure read/pread/pread64 tests
[sanitizer] move write/pwrite/pwrite64 interceptors to common
[msan] start using common interceptors in msan
[tsan] move prctl interceptor from asan to common_interceptors thus enabling it for tsan too
llvm-svn: 172763
2013-01-17 22:51:56 +00:00
Kostya Serebryany
5cdd91fc43
[sanitizer] move write/pwrite/pwrite64 interceptors to common
...
llvm-svn: 172722
2013-01-17 14:48:03 +00:00
Kostya Serebryany
f7f5566055
[tsan] move prctl interceptor from asan to common_interceptors thus enabling it for tsan too
...
llvm-svn: 172719
2013-01-17 13:38:16 +00:00
Kostya Serebryany
125e26d49b
[tsan] add write_range/read_range hooks to common interceptors called from tsan (to find races on read/pread/etc)
...
llvm-svn: 172714
2013-01-17 13:18:40 +00:00
Kostya Serebryany
93ebdb5d64
[sanitizer] a bit more unification for interceptors (merge read/pread/pread64 in asan and tsan)
...
llvm-svn: 172713
2013-01-17 13:09:00 +00:00
Dmitry Vyukov
c1a1517a37
tsan: describe stack and TLS addresses
...
llvm-svn: 172393
2013-01-14 10:00:03 +00:00
Dmitry Vyukov
1bc29bd7bf
tsan: add check for invalid fd
...
llvm-svn: 172060
2013-01-10 12:28:58 +00:00
Dmitry Vyukov
a626d03266
tsan: detect races on fd passed to epoll_ctl
...
llvm-svn: 171981
2013-01-09 17:31:27 +00:00
Dmitry Vyukov
a681c01b69
tsan: fix crash when user defines own fopen/fileno
...
llvm-svn: 171967
2013-01-09 11:54:52 +00:00
Dmitry Vyukov
b4ede780b0
tsan: fix crash when user defines own fopen/fileno
...
llvm-svn: 171958
2013-01-09 08:22:06 +00:00
Dmitry Vyukov
73dac64b73
tsan: more defensive file descriptor verification
...
to prevent assertion failures on code like "write(-1, ...)"
llvm-svn: 171030
2012-12-24 11:43:34 +00:00
Dmitry Vyukov
c467933dc7
tsan: fix -Wgnu warnings
...
llvm-svn: 170499
2012-12-19 06:59:45 +00:00
Dmitry Vyukov
44e1beaee6
tsan: intercept fork() to prevent false race reports on fd's
...
llvm-svn: 170433
2012-12-18 14:44:44 +00:00
Dmitry Vyukov
d509179a0b
tsan: add signalfd() and inotify_init() interceptors
...
llvm-svn: 170429
2012-12-18 12:35:31 +00:00
Alexey Samsonov
f37c45c20d
[Sanitizer] Expose StackTrace::GetPreviousInstructionPc() to get PC of call instruction from return address
...
llvm-svn: 170424
2012-12-18 09:57:34 +00:00
Dmitry Vyukov
38d0b60fb9
tsan: synchronize connect->accept calls
...
llvm-svn: 170235
2012-12-14 20:01:58 +00:00
Dmitry Vyukov
e0c37640f7
tsan: add socketpair() interceptor and test
...
llvm-svn: 170184
2012-12-14 09:57:42 +00:00
Dmitry Vyukov
7d95323047
tsan: explain why pthread_cond_init() interceptor is commented out
...
llvm-svn: 169975
2012-12-12 13:11:44 +00:00
Dmitry Vyukov
60c14ce625
tsan: more precise handling of IO synchronization
...
llvm-svn: 169970
2012-12-12 11:59:30 +00:00
Kostya Serebryany
9a58d399c7
[asan] add sanitizer_common/sanitizer_common_interceptors.h with pread/pread64/read interceptors. Use it in asan. Add asan tests for pread/etc. Add FIXME to tsan/msan interceptors
...
llvm-svn: 169966
2012-12-12 09:54:35 +00:00
David Blaikie
a00d9caa8f
Unbreak the C++98 build.
...
llvm-svn: 169636
2012-12-07 21:39:54 +00:00
Dmitry Vyukov
54b87409b4
tsan: even more fd interceptors + fixes
...
llvm-svn: 169628
2012-12-07 19:23:59 +00:00
Dmitry Vyukov
04580518ce
tsan: more fd interceptors + bug fixes + tests
...
llvm-svn: 169621
2012-12-07 18:30:40 +00:00
Dmitry Vyukov
0ef99e2a48
tsan: fix pipe interceptors and add 2 tests
...
llvm-svn: 169607
2012-12-07 16:22:54 +00:00
Dmitry Vyukov
4e7c0f95fb
tsan: add pipe interceptors
...
llvm-svn: 169602
2012-12-07 15:32:56 +00:00
Dmitry Vyukov
5f4ab30be0
tsan: refactoring is preparation to more precise fd synchronization handling
...
llvm-svn: 169600
2012-12-07 14:40:10 +00:00
Dmitry Vyukov
c446aa039a
tsan: provide own implementation of __cxa_guard_xxx functions
...
that way we allow static linking of libstdc++
llvm-svn: 169376
2012-12-05 12:10:22 +00:00
Dmitry Vyukov
6411bd9877
tsan: remove unnecesary include file
...
llvm-svn: 169370
2012-12-05 10:16:17 +00:00
Dmitry Vyukov
0d677279f6
tsan: better error message if we fail to intercept some function
...
currently the message is SIGSEGV
llvm-svn: 169231
2012-12-04 07:28:25 +00:00
Dmitry Vyukov
d05418eac6
tsan: suppress weird race reports when JVM is embed into the process
...
llvm-svn: 169019
2012-11-30 17:45:53 +00:00
Dmitry Vyukov
1450ac6406
tsan: add __libc_memalign interceptor (used by dynamic loader to allocate tls for dlopen'ed modules)
...
llvm-svn: 169017
2012-11-30 17:27:58 +00:00
Dmitry Vyukov
71d759d392
tsan: intercept mlock() because of the kernel bug
...
llvm-svn: 168987
2012-11-30 06:50:15 +00:00
Kostya Serebryany
f22c697f58
[asan] get rid of some of the uses of kPageSize. The intent is to get rid of it completely to support platforms with multiple possible page sizes.
...
llvm-svn: 168517
2012-11-23 15:38:49 +00:00
Dmitry Vyukov
6971414f3e
tsan: fix more bugs in signal handling
...
llvm-svn: 168497
2012-11-22 13:53:54 +00:00
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