forked from OSchip/llvm-project
tsan: remove TSAN_SHADOW_COUNT
TSAN_SHADOW_COUNT is defined to 4 in all environments. Other values of TSAN_SHADOW_COUNT were never tested and were broken by recent changes to shadow mapping. Remove it as there is no reason to fix nor maintain it. llvm-svn: 226466
This commit is contained in:
parent
f9b1730d41
commit
cc5e40811b
|
@ -1,4 +1,4 @@
|
|||
type tsan_go.cc ..\rtl\tsan_interface_atomic.cc ..\rtl\tsan_clock.cc ..\rtl\tsan_flags.cc ..\rtl\tsan_md5.cc ..\rtl\tsan_mutex.cc ..\rtl\tsan_report.cc ..\rtl\tsan_rtl.cc ..\rtl\tsan_rtl_mutex.cc ..\rtl\tsan_rtl_report.cc ..\rtl\tsan_rtl_thread.cc ..\rtl\tsan_stat.cc ..\rtl\tsan_suppressions.cc ..\rtl\tsan_sync.cc ..\rtl\tsan_stack_trace.cc ..\..\sanitizer_common\sanitizer_allocator.cc ..\..\sanitizer_common\sanitizer_common.cc ..\..\sanitizer_common\sanitizer_flags.cc ..\..\sanitizer_common\sanitizer_stacktrace.cc ..\..\sanitizer_common\sanitizer_libc.cc ..\..\sanitizer_common\sanitizer_printf.cc ..\..\sanitizer_common\sanitizer_suppressions.cc ..\..\sanitizer_common\sanitizer_thread_registry.cc ..\rtl\tsan_platform_windows.cc ..\..\sanitizer_common\sanitizer_win.cc ..\..\sanitizer_common\sanitizer_deadlock_detector1.cc ..\..\sanitizer_common\sanitizer_stackdepot.cc ..\..\sanitizer_common\sanitizer_persistent_allocator.cc > gotsan.cc
|
||||
|
||||
gcc -c -o race_windows_amd64.syso gotsan.cc -I..\rtl -I..\.. -I..\..\sanitizer_common -I..\..\..\include -m64 -Wall -fno-exceptions -fno-rtti -DSANITIZER_GO -DTSAN_SHADOW_COUNT=4 -Wno-error=attributes -Wno-attributes -Wno-format -DSANITIZER_DEBUG=0 -O3 -fomit-frame-pointer
|
||||
gcc -c -o race_windows_amd64.syso gotsan.cc -I..\rtl -I..\.. -I..\..\sanitizer_common -I..\..\..\include -m64 -Wall -fno-exceptions -fno-rtti -DSANITIZER_GO -Wno-error=attributes -Wno-attributes -Wno-format -DSANITIZER_DEBUG=0 -O3 -fomit-frame-pointer
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ for F in $SRCS; do
|
|||
cat $F >> gotsan.cc
|
||||
done
|
||||
|
||||
FLAGS=" -I../rtl -I../.. -I../../sanitizer_common -I../../../include -std=c++11 -m64 -Wall -fno-exceptions -fno-rtti -DSANITIZER_GO -DTSAN_SHADOW_COUNT=4 -DSANITIZER_DEADLOCK_DETECTOR_VERSION=2 $OSCFLAGS"
|
||||
FLAGS=" -I../rtl -I../.. -I../../sanitizer_common -I../../../include -std=c++11 -m64 -Wall -fno-exceptions -fno-rtti -DSANITIZER_GO -DSANITIZER_DEADLOCK_DETECTOR_VERSION=2 $OSCFLAGS"
|
||||
if [ "$DEBUG" == "" ]; then
|
||||
FLAGS+=" -DSANITIZER_DEBUG=0 -O3 -msse3 -fomit-frame-pointer"
|
||||
else
|
||||
|
|
|
@ -40,18 +40,8 @@ const int kClkBits = 42;
|
|||
const unsigned kMaxTidReuse = (1 << (64 - kClkBits)) - 1;
|
||||
const uptr kShadowStackSize = 64 * 1024;
|
||||
|
||||
#ifdef TSAN_SHADOW_COUNT
|
||||
# if TSAN_SHADOW_COUNT == 2 \
|
||||
|| TSAN_SHADOW_COUNT == 4 || TSAN_SHADOW_COUNT == 8
|
||||
const uptr kShadowCnt = TSAN_SHADOW_COUNT;
|
||||
# else
|
||||
# error "TSAN_SHADOW_COUNT must be one of 2,4,8"
|
||||
# endif
|
||||
#else
|
||||
// Count of shadow values in a shadow cell.
|
||||
#define TSAN_SHADOW_COUNT 4
|
||||
const uptr kShadowCnt = 4;
|
||||
#endif
|
||||
|
||||
// That many user bytes are mapped onto a single shadow cell.
|
||||
const uptr kShadowCell = 8;
|
||||
|
@ -96,16 +86,6 @@ void build_consistency_stats();
|
|||
void build_consistency_nostats();
|
||||
#endif
|
||||
|
||||
#if TSAN_SHADOW_COUNT == 1
|
||||
void build_consistency_shadow1();
|
||||
#elif TSAN_SHADOW_COUNT == 2
|
||||
void build_consistency_shadow2();
|
||||
#elif TSAN_SHADOW_COUNT == 4
|
||||
void build_consistency_shadow4();
|
||||
#else
|
||||
void build_consistency_shadow8();
|
||||
#endif
|
||||
|
||||
static inline void USED build_consistency() {
|
||||
#if SANITIZER_DEBUG
|
||||
build_consistency_debug();
|
||||
|
@ -117,15 +97,6 @@ static inline void USED build_consistency() {
|
|||
#else
|
||||
build_consistency_nostats();
|
||||
#endif
|
||||
#if TSAN_SHADOW_COUNT == 1
|
||||
build_consistency_shadow1();
|
||||
#elif TSAN_SHADOW_COUNT == 2
|
||||
build_consistency_shadow2();
|
||||
#elif TSAN_SHADOW_COUNT == 4
|
||||
build_consistency_shadow4();
|
||||
#else
|
||||
build_consistency_shadow8();
|
||||
#endif
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
|
|
|
@ -565,43 +565,15 @@ void MemoryAccessImpl1(ThreadState *thr, uptr addr,
|
|||
// it's just not worth it (performance- and complexity-wise).
|
||||
|
||||
Shadow old(0);
|
||||
if (kShadowCnt == 1) {
|
||||
int idx = 0;
|
||||
|
||||
int idx = 0;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
} else if (kShadowCnt == 2) {
|
||||
int idx = 0;
|
||||
idx = 1;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
idx = 1;
|
||||
idx = 2;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
} else if (kShadowCnt == 4) {
|
||||
int idx = 0;
|
||||
idx = 3;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
idx = 1;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
idx = 2;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
idx = 3;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
} else if (kShadowCnt == 8) {
|
||||
int idx = 0;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
idx = 1;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
idx = 2;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
idx = 3;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
idx = 4;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
idx = 5;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
idx = 6;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
idx = 7;
|
||||
#include "tsan_update_shadow_word_inl.h"
|
||||
} else {
|
||||
CHECK(false);
|
||||
}
|
||||
|
||||
// we did not find any races and had already stored
|
||||
// the current access info, so we are done
|
||||
|
@ -652,7 +624,7 @@ bool ContainsSameAccessSlow(u64 *s, u64 a, u64 sync_epoch, bool is_write) {
|
|||
return false;
|
||||
}
|
||||
|
||||
#if defined(__SSE3__) && TSAN_SHADOW_COUNT == 4
|
||||
#if defined(__SSE3__)
|
||||
#define SHUF(v0, v1, i0, i1, i2, i3) _mm_castps_si128(_mm_shuffle_ps( \
|
||||
_mm_castsi128_ps(v0), _mm_castsi128_ps(v1), \
|
||||
(i0)*1 + (i1)*4 + (i2)*16 + (i3)*64))
|
||||
|
@ -712,7 +684,7 @@ bool ContainsSameAccessFast(u64 *s, u64 a, u64 sync_epoch, bool is_write) {
|
|||
|
||||
ALWAYS_INLINE
|
||||
bool ContainsSameAccess(u64 *s, u64 a, u64 sync_epoch, bool is_write) {
|
||||
#if defined(__SSE3__) && TSAN_SHADOW_COUNT == 4
|
||||
#if defined(__SSE3__)
|
||||
bool res = ContainsSameAccessFast(s, a, sync_epoch, is_write);
|
||||
// NOTE: this check can fail if the shadow is concurrently mutated
|
||||
// by other threads. But it still can be useful if you modify
|
||||
|
@ -1003,16 +975,6 @@ void build_consistency_stats() {}
|
|||
void build_consistency_nostats() {}
|
||||
#endif
|
||||
|
||||
#if TSAN_SHADOW_COUNT == 1
|
||||
void build_consistency_shadow1() {}
|
||||
#elif TSAN_SHADOW_COUNT == 2
|
||||
void build_consistency_shadow2() {}
|
||||
#elif TSAN_SHADOW_COUNT == 4
|
||||
void build_consistency_shadow4() {}
|
||||
#else
|
||||
void build_consistency_shadow8() {}
|
||||
#endif
|
||||
|
||||
} // namespace __tsan
|
||||
|
||||
#ifndef SANITIZER_GO
|
||||
|
|
|
@ -46,9 +46,6 @@ TEST(ThreadSanitizer, MemcpyRace1) {
|
|||
t2.Memcpy(data, data2, 10, true);
|
||||
}
|
||||
|
||||
// The test fails with TSAN_SHADOW_COUNT=2,
|
||||
// because the old racy access is evicted.
|
||||
#if defined(TSAN_SHADOW_COUNT) && TSAN_SHADOW_COUNT >= 4
|
||||
TEST(ThreadSanitizer, MemcpyRace2) {
|
||||
char *data = new char[10];
|
||||
char *data1 = new char[10];
|
||||
|
@ -57,7 +54,6 @@ TEST(ThreadSanitizer, MemcpyRace2) {
|
|||
t1.Memcpy(data+5, data1, 1);
|
||||
t2.Memcpy(data+3, data2, 4, true);
|
||||
}
|
||||
#endif
|
||||
|
||||
TEST(ThreadSanitizer, MemcpyRace3) {
|
||||
char *data = new char[10];
|
||||
|
|
Loading…
Reference in New Issue