Commit Graph

66 Commits

Author SHA1 Message Date
Dmitry Vyukov bde4c9c773 tsan: refactor storage of meta information for heap blocks and sync objects
The new storage (MetaMap) is based on direct shadow (instead of a hashmap + per-block lists).
This solves a number of problems:
 - eliminates quadratic behaviour in SyncTab::GetAndLock (https://code.google.com/p/thread-sanitizer/issues/detail?id=26)
 - eliminates contention in SyncTab
 - eliminates contention in internal allocator during allocation of sync objects
 - removes a bunch of ad-hoc code in java interface
 - reduces java shadow from 2x to 1/2x
 - allows to memorize heap block meta info for Java and Go
 - allows to cleanup sync object meta info for Go
 - which in turn enabled deadlock detector for Go

llvm-svn: 209810
2014-05-29 13:50:54 +00:00
Evgeniy Stepanov f77f2ece71 [tsan] Fix gotsan build.
llvm-svn: 209286
2014-05-21 09:42:56 +00:00
Dmitry Vyukov b7ebc53772 tsan: stop background thread when sandbox is enabled
Fixes https://code.google.com/p/thread-sanitizer/issues/detail?id=56

llvm-svn: 207114
2014-04-24 13:09:17 +00:00
Dmitry Vyukov bbbe6bba8a tsan: preliminary support for Go deadlock detector
llvm-svn: 204228
2014-03-19 12:50:47 +00:00
Alexey Samsonov 18adbc361a Remove sanitizer_linux_libcdep.cc from TSan-Go build
llvm-svn: 203238
2014-03-07 13:17:32 +00:00
Dmitry Vyukov dd419aee00 tsan: update Go windows build script
llvm-svn: 203121
2014-03-06 14:49:21 +00:00
Dmitry Vyukov 350e7ddd34 tsan: update interface for Go
this is required to fix:
https://code.google.com/p/go/issues/detail?id=7460

llvm-svn: 203116
2014-03-06 13:17:28 +00:00
Dmitry Vyukov 6cfab724ec tsan: refactor deadlock detector
Introduce DDetector interface between the tool and the DD itself.
It will help to experiment with other DD implementation,
as well as reuse DD in other tools.

llvm-svn: 202485
2014-02-28 10:48:13 +00:00
Dmitry Vyukov 9ba840865f tsan: simplify Go build script
we don't use assembly files

llvm-svn: 200916
2014-02-06 09:23:12 +00:00
Dmitry Vyukov 447bb46e03 tsan: remove unused functions
llvm-svn: 200915
2014-02-06 09:22:50 +00:00
Dmitry Vyukov 7799eb123b tsan: ensure proper alignment of mmaps on windows
llvm-svn: 200832
2014-02-05 11:37:20 +00:00
Dmitry Vyukov d7fcee8d8c tsan: add windows native build script
llvm-svn: 200780
2014-02-04 17:52:41 +00:00
Dmitry Vyukov 2da2cee706 tsan: update Go public interface
in preparation for https://codereview.appspot.com/55100044

llvm-svn: 200766
2014-02-04 14:45:54 +00:00
Dmitry Vyukov 9244c48b29 tsan: update public Go interface
in preparation for https://codereview.appspot.com/55100044

llvm-svn: 200750
2014-02-04 10:35:23 +00:00
Alexey Samsonov 782ad0eb71 [Sanitizer] Remove now unused symbolization functionality from MemoryMappingLayout
llvm-svn: 198014
2013-12-25 12:11:06 +00:00
Alexey Samsonov ceeb0e0657 [TSan] fix Go build
llvm-svn: 198005
2013-12-25 08:56:08 +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 302ec7b9bc tsan: add memory_limit_mb flag
The flag allows to bound maximum process memory consumption (best effort).
If RSS reaches memory_limit_mb, tsan flushes all shadow memory.

llvm-svn: 191913
2013-10-03 17:14:35 +00:00
Dmitry Vyukov 2ea2d9cb29 tsan: remove unneeded ___chkstk_ms function from Go runtime
llvm-svn: 191161
2013-09-22 02:49:56 +00:00
Dmitry Vyukov f6ea6a5a19 tsan: better report formatting for Go
Say that gorotuine 1 is main goroutine.
Remove excessive new line.

llvm-svn: 188542
2013-08-16 11:15:14 +00:00
Alexey Samsonov ecdcf11bd6 [TSan] try to fix Go build
llvm-svn: 185063
2013-06-27 07:57:53 +00:00
Dmitry Vyukov a8570d38fe tsan: add -Wno-maybe-uninitialized to Go build script
this is how the rest of the codebase is built

llvm-svn: 183738
2013-06-11 11:44:43 +00:00
Dmitry Vyukov 0fffc0088c tsan: use memory access size for Go after all
helps to make range access functions correct and fast

llvm-svn: 183418
2013-06-06 14:31:15 +00:00
Dmitry Vyukov c9e304afbd tsan: fix darwin Go build
llvm-svn: 183402
2013-06-06 13:00:32 +00:00
Alexander Potapenko 22e92fa954 [TSan] Try to fix the Go-TSan build.
llvm-svn: 182582
2013-05-23 12:54:35 +00:00
Peter Collingbourne 8575195772 [nolibc] Move libc-dependent sanitizer_posix.cc code to sanitizer_posix_libcdep.cc.
llvm-svn: 182366
2013-05-21 10:27:07 +00:00
Peter Collingbourne 0c8df4e1d8 [nolibc] Move libc-dependent sanitizer_linux.cc code to sanitizer_linux_libcdep.cc.
llvm-svn: 182292
2013-05-20 15:57:44 +00:00
Evgeniy Stepanov 95eaa21637 [sanitizer] More renamed macros.
llvm-svn: 177401
2013-03-19 14:54:17 +00:00
Dmitry Vyukov 50160030e1 tsan: fix Go build
llvm-svn: 177260
2013-03-18 08:52:46 +00:00
Dmitry Vyukov 3c2489e2c3 tsan: do not imitate memory write on malloc() (Go)
better memory range access functions (put only 1 event to trace) (Go)

llvm-svn: 175056
2013-02-13 13:05:36 +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
Dmitry Vyukov 6f4a6ab5d6 tsan: switch to explicit thread contexts in Go (instead of monotonic goroutine ids)
llvm-svn: 174047
2013-01-31 07:48:43 +00:00
Dmitry Vyukov 5cb6c62641 tsan: symbolize global variables
llvm-svn: 172181
2013-01-11 07:23:51 +00:00
Dmitry Vyukov 714accd917 tsan: add sanity test for Go runtime into presubmit test
llvm-svn: 170185
2012-12-14 10:10:57 +00:00
Dmitry Vyukov 2429b02770 tsan: move traces from tls into dedicated storage at fixed address
helps to reduce tls size (it's weird to have multi-MB tls)
will help with dynamically adjustable trace size

llvm-svn: 168783
2012-11-28 10:35:31 +00:00
Dmitry Vyukov ce7a1ba196 tsan: faster memory reset for Go
llvm-svn: 168567
2012-11-25 16:05:42 +00:00
Dmitry Vyukov 26216e4ae3 tsan: add range access functions for Go
llvm-svn: 167580
2012-11-08 13:38:45 +00:00
Dmitry Vyukov e829b6231a tsan: change TSAN_OPTIONS->GORACE in build script as well
llvm-svn: 167578
2012-11-08 13:23:13 +00:00
Dmitry Vyukov e11f2920c9 tsan: more precise handling of finalizers
llvm-svn: 167530
2012-11-07 15:08:20 +00:00
Dmitry Vyukov da78be74f3 tsan: slightly relax requirements for lazy shadow memory (can overlap and may not be properly aligned)
it's problematic on windows where allocation granularity is much larger than page size

llvm-svn: 167466
2012-11-06 16:48:46 +00:00
Dmitry Vyukov c015712992 tsan: lazily allocate shadow for Go
llvm-svn: 167464
2012-11-06 16:00:16 +00:00
Dmitry Vyukov 7234a5b54d tsan: update script to support windows
llvm-svn: 167456
2012-11-06 13:32:53 +00:00
Dmitry Vyukov ee563c10c6 tsan: add missing function for windows
llvm-svn: 167454
2012-11-06 13:25:05 +00:00
Dmitry Vyukov 1ec08f3627 tsan: fix Go build
llvm-svn: 167446
2012-11-06 12:46:26 +00:00
Dmitry Vyukov 6d5bd599c2 tsan for Go: support mallocs before __tsan_init() (required to support cgo code)
llvm-svn: 165229
2012-10-04 13:54:49 +00:00
Dmitry Vyukov 27d5b37c38 tsan: output tid's in reports
llvm-svn: 164998
2012-10-02 11:52:05 +00:00
Dmitry Vyukov c7bcaf8512 tsan: fix Go build
llvm-svn: 164198
2012-09-19 04:39:36 +00:00
Dmitry Vyukov 50d49238a6 tsan: fix Go build script
llvm-svn: 163320
2012-09-06 15:10:19 +00:00
Dmitry Vyukov 81a78ad59c tsan: handle larger number of goroutines + fix a memory leak of goroutine descriptors
llvm-svn: 161770
2012-08-13 18:44:44 +00:00
Dmitry Vyukov 904d3f9c06 tsan: add ReleaseStore() function that merely copies vector clock rather than combines two clocks
fix clock setup for finalizer goroutine (Go runtime)

llvm-svn: 160918
2012-07-28 15:27:41 +00:00