Commit Graph

568 Commits

Author SHA1 Message Date
Dmitry Vyukov 572c5b2a44 tsan: add more atomics to public interface (fetch_or/and/xor + 1-,2-byte versions)
llvm-svn: 156766
2012-05-14 15:33:00 +00:00
Dmitry Vyukov 665ce2a2f4 tsan: enabled report suppression for signal-unsafe reports
llvm-svn: 156765
2012-05-14 15:28:03 +00:00
Dmitry Vyukov d004b99cc6 tsan: fix output_tests script to actually verify tests results
llvm-svn: 156764
2012-05-14 15:25:35 +00:00
Dmitry Vyukov f5cbda29cd tsan: make addr2line symbolizer understand dynamic libraries
Collect info about all dynamic libraries in the process (name, base, size).
Determine to what dyn lib the address relates, route request to addr2line instance for the lib.

llvm-svn: 156759
2012-05-14 14:38:29 +00:00
Dmitry Vyukov fa44dc5623 tsan: update output tests to race on heap memory
Races on stack of main thread are problematic for COMPAT mapping, because it's not 1-to-1 and race addr is not properly mapped from shadow back to application memory. 
Update output tests to race heap memory.

llvm-svn: 156758
2012-05-14 14:00:07 +00:00
Dmitry Vyukov b078a33151 tsan: fix mmap fd
This is mostly to test my commit access.
Fixes fd passed to mmap(), -1 is the proper invalid fd.

llvm-svn: 156741
2012-05-13 14:24:46 +00:00
Alexander Potapenko a1c3c6582c Increase error_message_buffer_size to 64K (16K is insufficient for large programs)
llvm-svn: 156711
2012-05-12 12:33:41 +00:00
Evgeniy Stepanov d989be1386 Fix GetFrameNameByAddr hitting stale stack guards.
In the current implementation AsanThread::GetFrameNameByAddr scans the
stack for a magic guard value to locate base address of the stack
frame. This is not reliable, especially on ARM, where the code that
stores this magic value has to construct it in a register from two
small intermediates; this register can then end up stored in a random
stack location in the prologue of another function.

With this change, GetFrameNameByAddr scans the shadow memory for the
signature of a left stack redzone instead. It is now possible to
remove the magic from the instrumentation pass for additional
performance gain. We keep it there for now just to make sure the new
algorithm does not fail in some corner case.

llvm-svn: 156710
2012-05-12 12:33:10 +00:00
Kostya Serebryany 0e6705ec67 [tsan] run output tests in parallel
llvm-svn: 156617
2012-05-11 14:58:20 +00:00
Kostya Serebryany 07c4805175 [tsan] run more kinds of builds as presubmit test (and fix gcc debug build)
llvm-svn: 156616
2012-05-11 14:42:24 +00:00
Kostya Serebryany 1136764ab0 [tsan] a bit more lint
llvm-svn: 156614
2012-05-11 13:49:53 +00:00
Kostya Serebryany 5b7cb1db61 [tsan] old-dstyle Makefile for tests; two helper scripts that analyze the assembly code of the hot functions
llvm-svn: 156547
2012-05-10 15:10:03 +00:00
Kostya Serebryany ff15ef0c50 [tsan] ThreadSanitizer tests and micro benchmarks. No makefiles yet.
llvm-svn: 156545
2012-05-10 14:18:22 +00:00
Kostya Serebryany df68b67f06 [tsan] add the old Makefile (which is the only way to build the tsan-rtl for now)
llvm-svn: 156544
2012-05-10 14:04:19 +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
Alexander Potapenko 66e6de10cf Fix ReadFileToBuffer to return 0 on failure (-1 is too large if returned as size_t).
llvm-svn: 156538
2012-05-10 12:03:09 +00:00
Alexey Samsonov fbadfddcf1 [ASan] use CLANG_VERSION in Makefile (currently 3.2)
llvm-svn: 155350
2012-04-23 13:27:47 +00:00
Kostya Serebryany c5bf3ad922 [asan] fix asan issue #66 (correctly report type of the bug)
llvm-svn: 155344
2012-04-23 10:08:16 +00:00
Alexander Potapenko 0825d35b57 Bump the LLVM minor version. This should fix our 32-bit Linux build.
llvm-svn: 155338
2012-04-23 07:36:24 +00:00
Kostya Serebryany d45a71c2bc [asan] test for issue #66
llvm-svn: 155127
2012-04-19 14:53:51 +00:00
Alexander Potapenko ec316e5940 Partially revert r154390 (http://llvm.org/viewvc/llvm-project?view=rev&revision=154390)
Until we work out the solution for http://code.google.com/p/address-sanitizer/issues/detail?id=65 we'd better not allow
the clients to override AddressSanitizer's signal handler.

The second part of r154390 (removing the sighandler-related tests) is not reverted, because those tests were broken
and didn't test anything.

llvm-svn: 154803
2012-04-16 08:33:01 +00:00
Alexey Samsonov cc0b3e6607 [asan] minor fix: pass flag -g to output tests as a part of CXXFLAGS
llvm-svn: 154589
2012-04-12 13:31:13 +00:00
Alexey Samsonov f2a8ea3afd Don't build atomic.c when building compiler-rt using make
llvm-svn: 154583
2012-04-12 09:43:57 +00:00
Alexey Samsonov a5f6fd9884 [ASan] fix output tests - r154570 changed debug info for static functions and now they are symbolized a bit differently
llvm-svn: 154581
2012-04-12 07:32:08 +00:00
Alexander Potapenko bc42d44112 Change the way ASan interacts with custom signal handlers.
From now on we allow the clients to override signal handlers set by ASan, but print a warning in such a case.

Remove the tests for signal() and sigaction(), because they made little sense even without this change.

llvm-svn: 154390
2012-04-10 11:00:26 +00:00
Alexey Samsonov 7ec936a4f4 [ASan] remove dispatch.h header once again - it's not present on Leopard, and we don't want to break the build of compiler-rt there. See https://trac.macports.org/ticket/33362
llvm-svn: 154326
2012-04-09 16:45:18 +00:00
Timur Iskhodzhanov 36a7cc6292 Use 'typename' instead of 'class' in template<> definitions supporting POD types
llvm-svn: 154314
2012-04-09 11:50:27 +00:00
Kostya Serebryany d2863dab85 [asan] last bit for gcc compatibility
llvm-svn: 154203
2012-04-06 20:36:18 +00:00
Kostya Serebryany b7f68dee45 [asan] minor change to please gcc
llvm-svn: 154201
2012-04-06 20:19:59 +00:00
Alexey Samsonov 6a19d5d209 [ASan] move replacements for new/delete to separate file
llvm-svn: 154167
2012-04-06 08:21:08 +00:00
Kostya Serebryany 1490c7996f [asan] add flags: disable_core, abort_on_error and unmap_shadow_on_exit
llvm-svn: 154159
2012-04-06 01:27:11 +00:00
Timur Iskhodzhanov 889a3009a4 [ASan/Win] Revert the local Makefile change slipped into the prev commit
llvm-svn: 154112
2012-04-05 18:33:17 +00:00
Timur Iskhodzhanov 7d2776960b [ASan/Win] Fix lint warning
llvm-svn: 154111
2012-04-05 18:31:50 +00:00
Timur Iskhodzhanov 0881092306 [ASan/Win] Fix build by using inline assembly instead of an unavailable intrinsic function
llvm-svn: 154106
2012-04-05 17:16:32 +00:00
Kostya Serebryany 7a8f5e4d1e [asan] make __asan::Deallocate immune to racy double-free (issue #57)
llvm-svn: 154097
2012-04-05 15:55:09 +00:00
Alexander Potapenko 08342aa1a1 Introduce the use_sigaltstack flag (off by default), which enables using alternate
per-thread stacks for signal handling. This allows to print more verbose error reports
for stack overflows.

llvm-svn: 154092
2012-04-05 10:54:52 +00:00
Alexander Potapenko 44016da83f Allow calling GetCurrentTidOrMinusOne() before AsanThreadRegistry was initialized.
llvm-svn: 154091
2012-04-05 10:10:57 +00:00
Chandler Carruth 1f5d5c0e13 Initial, very rough cut at a new CMake build system for compiler-rt.
Some high-level notes:

1) An explicit goal is to support building compiler-rt as a subproject
   build, checked out into the projects/compiler-rt directory. There are
   many other possible ways of building the code here, but this is
   optimized for development on LLVM/Clang/compiler-rt, and incremental
   trial and testing of the toolchain.
2) The current support is targeted at Linux. I would love to see this
   generalized to other platforms, but for the sake of simplicity in
   testing, I'm focusing here first.

Much of this patch was paired with Manuel, and I credit him with the
majority of the work here.

Some important caveats that I'll be working on in subsequent patches:

1) This uses the host compiler rather than using the just-built-clang.
2) Currently only x86 is supported.
3) Currently, none of the tests are built or run.
4) Uses CMake's builtin globbing which doesn't update correctly.
5) This is still turned off from LLVM's CMake build until these issues
   are addressed

llvm-svn: 154060
2012-04-04 22:12:04 +00:00
Chandler Carruth 6acfaaf3aa Remove the old, and non-functional CMake build system from CompilerRT.
I cannot build any part of this successfully on either Linux or Darwin,
and the replacement is worlds simpler by requiring that this be built as
a subproject of LLVM. If this breaks you for any reason, please let me
know, and let me know what your use case is.

llvm-svn: 154059
2012-04-04 22:12:01 +00:00
Alexey Samsonov 61a331d594 [ASan] use correct C-version of strchr on Windows
llvm-svn: 154006
2012-04-04 11:36:47 +00:00
Benjamin Kramer 185f2edd70 Fix the build on 32 bit hosts.
- Add memcpy and memcmp to the stub headers.
- __uint128_t is not available on 32 bit platforms. It's also unused so just
  comment it out for now.

llvm-svn: 153779
2012-03-30 21:37:08 +00:00
Alexander Potapenko 4f1d3e8eaa Make sure NSObjects are allocated in a way that is visible to ASan.
llvm-svn: 153762
2012-03-30 17:31:15 +00:00
David Chisnall 675de5d16c Initial commit of support functions for atomic operations.
llvm-svn: 153735
2012-03-30 08:35:32 +00:00
Alexander Potapenko c6eb6a8287 Add internal_memset and replace the uses of REAL(memset) with it where the performance allows.
llvm-svn: 153641
2012-03-29 12:20:47 +00:00
Alexey Samsonov b33c87bbb9 [ASan] interceptors for atoi/atol/atoll
llvm-svn: 153637
2012-03-29 08:04:35 +00:00
Kostya Serebryany b0414e0eff [asan] fix lint
llvm-svn: 153601
2012-03-28 21:03:34 +00:00
Kostya Serebryany 48c157c25a [asan] add racy double-free test
llvm-svn: 153586
2012-03-28 18:30:10 +00:00
Alexander Potapenko 8418de1689 Log the allocator messages at a higher verbosity level.
llvm-svn: 153514
2012-03-27 16:37:16 +00:00
Alexey Samsonov 0a4f8dc0cb [ASan] add interceptor for strtol
llvm-svn: 153444
2012-03-26 16:42:22 +00:00
Evgeniy Stepanov 4cc2631c7d Avoid including link.h.
It's not available on Android. We only use this header to find out if _DYNAMIC
is present; declaring it "extern void*" does the trick.

llvm-svn: 153431
2012-03-26 09:48:41 +00:00