Detect TSAN instead of relying on #ifdef THREAD_SANITIZER.

And reindent.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2293063002

CQ_INCLUDE_TRYBOTS=master.client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-TSAN-Trybot

Review-Url: https://codereview.chromium.org/2293063002
This commit is contained in:
mtklein 2016-08-30 10:45:17 -07:00 committed by Commit bot
parent fce1906472
commit e6ec16356e
2 changed files with 51 additions and 50 deletions

View File

@ -464,9 +464,6 @@
], ],
'ldflags': [ '-fsanitize=<(skia_sanitizer)' ], 'ldflags': [ '-fsanitize=<(skia_sanitizer)' ],
'conditions' : [ 'conditions' : [
[ 'skia_sanitizer == "thread"', {
'defines': [ 'THREAD_SANITIZER' ],
}],
[ 'skia_sanitizer == "memory"', { [ 'skia_sanitizer == "memory"', {
'cflags': [ 'cflags': [
'-O1', '-O1',

View File

@ -11,58 +11,62 @@
#include "SkTypes.h" #include "SkTypes.h"
#include "SkSemaphore.h" #include "SkSemaphore.h"
#if defined(THREAD_SANITIZER) #if !defined(__has_feature)
#define __has_feature(x) 0
/* Report that a lock has been created at address "lock". */
#define ANNOTATE_RWLOCK_CREATE(lock) \
AnnotateRWLockCreate(__FILE__, __LINE__, lock)
/* Report that the lock at address "lock" is about to be destroyed. */
#define ANNOTATE_RWLOCK_DESTROY(lock) \
AnnotateRWLockDestroy(__FILE__, __LINE__, lock)
/* Report that the lock at address "lock" has been acquired.
is_w=1 for writer lock, is_w=0 for reader lock. */
#define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \
AnnotateRWLockAcquired(__FILE__, __LINE__, lock, is_w)
/* Report that the lock at address "lock" is about to be released. */
#define ANNOTATE_RWLOCK_RELEASED(lock, is_w) \
AnnotateRWLockReleased(__FILE__, __LINE__, lock, is_w)
#ifdef DYNAMIC_ANNOTATIONS_WANT_ATTRIBUTE_WEAK
# ifdef __GNUC__
# define DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK __attribute__((weak))
# else
/* TODO(glider): for Windows support we may want to change this macro in order
to prepend __declspec(selectany) to the annotations' declarations. */
# error weak annotations are not supported for your compiler
# endif
#else
# define DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK
#endif #endif
extern "C" { #if __has_feature(thread_sanitizer)
void AnnotateRWLockCreate(
const char *file, int line, /* Report that a lock has been created at address "lock". */
const volatile void *lock) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; #define ANNOTATE_RWLOCK_CREATE(lock) \
void AnnotateRWLockDestroy( AnnotateRWLockCreate(__FILE__, __LINE__, lock)
const char *file, int line,
const volatile void *lock) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; /* Report that the lock at address "lock" is about to be destroyed. */
void AnnotateRWLockAcquired( #define ANNOTATE_RWLOCK_DESTROY(lock) \
const char *file, int line, AnnotateRWLockDestroy(__FILE__, __LINE__, lock)
const volatile void *lock, long is_w) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK;
void AnnotateRWLockReleased( /* Report that the lock at address "lock" has been acquired.
const char *file, int line, is_w=1 for writer lock, is_w=0 for reader lock. */
const volatile void *lock, long is_w) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK; #define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \
} AnnotateRWLockAcquired(__FILE__, __LINE__, lock, is_w)
/* Report that the lock at address "lock" is about to be released. */
#define ANNOTATE_RWLOCK_RELEASED(lock, is_w) \
AnnotateRWLockReleased(__FILE__, __LINE__, lock, is_w)
#if defined(DYNAMIC_ANNOTATIONS_WANT_ATTRIBUTE_WEAK)
#if defined(__GNUC__)
#define DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK __attribute__((weak))
#else
/* TODO(glider): for Windows support we may want to change this macro in order
to prepend __declspec(selectany) to the annotations' declarations. */
#error weak annotations are not supported for your compiler
#endif
#else
#define DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK
#endif
extern "C" {
void AnnotateRWLockCreate(
const char *file, int line,
const volatile void *lock) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK;
void AnnotateRWLockDestroy(
const char *file, int line,
const volatile void *lock) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK;
void AnnotateRWLockAcquired(
const char *file, int line,
const volatile void *lock, long is_w) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK;
void AnnotateRWLockReleased(
const char *file, int line,
const volatile void *lock, long is_w) DYNAMIC_ANNOTATIONS_ATTRIBUTE_WEAK;
}
#else #else
#define ANNOTATE_RWLOCK_CREATE(lock) #define ANNOTATE_RWLOCK_CREATE(lock)
#define ANNOTATE_RWLOCK_DESTROY(lock) #define ANNOTATE_RWLOCK_DESTROY(lock)
#define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) #define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w)
#define ANNOTATE_RWLOCK_RELEASED(lock, is_w) #define ANNOTATE_RWLOCK_RELEASED(lock, is_w)
#endif #endif