diff options
author | kcc <kcc@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-05-22 07:09:21 +0000 |
---|---|---|
committer | kcc <kcc@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-05-22 07:09:21 +0000 |
commit | 7d752f28b590bbad13c877c2aa7f5f8de2cdff10 (patch) | |
tree | f90afdf42b3ae78508a5c6422f458a5bb0216aa2 /libsanitizer/tsan/tsan_platform.h | |
parent | ca1a66e9c405dff80abce41c96371525e515bdb4 (diff) | |
download | gcc-7d752f28b590bbad13c877c2aa7f5f8de2cdff10.tar.gz |
libsanitizer merge from upstream r209283
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@210743 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libsanitizer/tsan/tsan_platform.h')
-rw-r--r-- | libsanitizer/tsan/tsan_platform.h | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/libsanitizer/tsan/tsan_platform.h b/libsanitizer/tsan/tsan_platform.h index 164ee45d6c6..60eb1a84995 100644 --- a/libsanitizer/tsan/tsan_platform.h +++ b/libsanitizer/tsan/tsan_platform.h @@ -75,6 +75,8 @@ static const uptr kLinuxShadowMsk = 0x200000000000ULL; #elif defined(TSAN_COMPAT_SHADOW) && TSAN_COMPAT_SHADOW static const uptr kLinuxAppMemBeg = 0x290000000000ULL; static const uptr kLinuxAppMemEnd = 0x7fffffffffffULL; +static const uptr kAppMemGapBeg = 0x2c0000000000ULL; +static const uptr kAppMemGapEnd = 0x7d0000000000ULL; #else static const uptr kLinuxAppMemBeg = 0x7cf000000000ULL; static const uptr kLinuxAppMemEnd = 0x7fffffffffffULL; @@ -103,7 +105,12 @@ static const uptr kLinuxShadowEnd = MemToShadow(kLinuxAppMemEnd) | 0xff; static inline bool IsAppMem(uptr mem) { +#if defined(TSAN_COMPAT_SHADOW) && TSAN_COMPAT_SHADOW + return (mem >= kLinuxAppMemBeg && mem < kAppMemGapBeg) || + (mem >= kAppMemGapEnd && mem <= kLinuxAppMemEnd); +#else return mem >= kLinuxAppMemBeg && mem <= kLinuxAppMemEnd; +#endif } static inline bool IsShadowMem(uptr mem) { @@ -138,8 +145,9 @@ const char *InitializePlatform(); void FinalizePlatform(); // The additional page is to catch shadow stack overflow as paging fault. -const uptr kTotalTraceSize = (kTraceSize * sizeof(Event) + sizeof(Trace) + 4096 - + 4095) & ~4095; +// Windows wants 64K alignment for mmaps. +const uptr kTotalTraceSize = (kTraceSize * sizeof(Event) + sizeof(Trace) + + (64 << 10) + (64 << 10) - 1) & ~((64 << 10) - 1); uptr ALWAYS_INLINE GetThreadTrace(int tid) { uptr p = kTraceMemBegin + (uptr)tid * kTotalTraceSize; @@ -154,7 +162,8 @@ uptr ALWAYS_INLINE GetThreadTraceHeader(int tid) { return p; } -void internal_start_thread(void(*func)(void*), void *arg); +void *internal_start_thread(void(*func)(void*), void *arg); +void internal_join_thread(void *th); // Says whether the addr relates to a global var. // Guesses with high probability, may yield both false positives and negatives. @@ -162,6 +171,10 @@ bool IsGlobalVar(uptr addr); int ExtractResolvFDs(void *state, int *fds, int nfd); int ExtractRecvmsgFDs(void *msg, int *fds, int nfd); +int call_pthread_cancel_with_cleanup(int(*fn)(void *c, void *m, + void *abstime), void *c, void *m, void *abstime, + void(*cleanup)(void *arg), void *arg); + } // namespace __tsan #else // defined(__LP64__) || defined(_WIN64) |