003 File Manager
Current Path:
/usr/src/contrib/llvm-project/compiler-rt/lib/tsan/rtl
usr
/
src
/
contrib
/
llvm-project
/
compiler-rt
/
lib
/
tsan
/
rtl
/
📁
..
📄
tsan.syms.extra
(573 B)
📄
tsan_clock.cpp
(20.28 KB)
📄
tsan_clock.h
(9.25 KB)
📄
tsan_debugging.cpp
(9.28 KB)
📄
tsan_defs.h
(4.68 KB)
📄
tsan_dense_alloc.h
(3.97 KB)
📄
tsan_dispatch_defs.h
(2.18 KB)
📄
tsan_external.cpp
(3.97 KB)
📄
tsan_fd.cpp
(9.02 KB)
📄
tsan_fd.h
(2.39 KB)
📄
tsan_flags.cpp
(3.47 KB)
📄
tsan_flags.h
(1.09 KB)
📄
tsan_flags.inc
(4.29 KB)
📄
tsan_ignoreset.cpp
(1.04 KB)
📄
tsan_ignoreset.h
(958 B)
📄
tsan_interceptors.h
(2.18 KB)
📄
tsan_interceptors_libdispatch.cpp
(31.46 KB)
📄
tsan_interceptors_mac.cpp
(20.28 KB)
📄
tsan_interceptors_mach_vm.cpp
(2.02 KB)
📄
tsan_interceptors_posix.cpp
(89.69 KB)
📄
tsan_interface.cpp
(4.35 KB)
📄
tsan_interface.h
(17.5 KB)
📄
tsan_interface_ann.cpp
(16.46 KB)
📄
tsan_interface_ann.h
(1.02 KB)
📄
tsan_interface_atomic.cpp
(25.88 KB)
📄
tsan_interface_inl.h
(3.53 KB)
📄
tsan_interface_java.cpp
(7.89 KB)
📄
tsan_interface_java.h
(4.19 KB)
📄
tsan_malloc_mac.cpp
(3.45 KB)
📄
tsan_md5.cpp
(6.9 KB)
📄
tsan_mman.cpp
(12.08 KB)
📄
tsan_mman.h
(2.61 KB)
📄
tsan_mutex.cpp
(7.88 KB)
📄
tsan_mutex.h
(1.92 KB)
📄
tsan_mutexset.cpp
(2.01 KB)
📄
tsan_mutexset.h
(1.88 KB)
📄
tsan_new_delete.cpp
(6.72 KB)
📄
tsan_platform.h
(33.68 KB)
📄
tsan_platform_linux.cpp
(16.09 KB)
📄
tsan_platform_mac.cpp
(11.81 KB)
📄
tsan_platform_posix.cpp
(5.72 KB)
📄
tsan_platform_windows.cpp
(922 B)
📄
tsan_ppc_regs.h
(1.35 KB)
📄
tsan_preinit.cpp
(1021 B)
📄
tsan_report.cpp
(15.63 KB)
📄
tsan_report.h
(2.79 KB)
📄
tsan_rtl.cpp
(34.92 KB)
📄
tsan_rtl.h
(28.13 KB)
📄
tsan_rtl_aarch64.S
(5.63 KB)
📄
tsan_rtl_amd64.S
(8.71 KB)
📄
tsan_rtl_mips64.S
(3.69 KB)
📄
tsan_rtl_mutex.cpp
(18.71 KB)
📄
tsan_rtl_ppc64.S
(8.18 KB)
📄
tsan_rtl_proc.cpp
(1.66 KB)
📄
tsan_rtl_report.cpp
(23.51 KB)
📄
tsan_rtl_thread.cpp
(13.82 KB)
📄
tsan_stack_trace.cpp
(1.91 KB)
📄
tsan_stack_trace.h
(1.27 KB)
📄
tsan_stat.cpp
(12.23 KB)
📄
tsan_stat.h
(4.22 KB)
📄
tsan_suppressions.cpp
(5.42 KB)
📄
tsan_suppressions.h
(1.32 KB)
📄
tsan_symbolize.cpp
(3.85 KB)
📄
tsan_symbolize.h
(897 B)
📄
tsan_sync.cpp
(8.44 KB)
📄
tsan_sync.h
(4.88 KB)
📄
tsan_trace.h
(1.89 KB)
📄
tsan_update_shadow_word_inl.h
(2.22 KB)
Editing: tsan_defs.h
//===-- tsan_defs.h ---------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file is a part of ThreadSanitizer (TSan), a race detector. // //===----------------------------------------------------------------------===// #ifndef TSAN_DEFS_H #define TSAN_DEFS_H #include "sanitizer_common/sanitizer_internal_defs.h" #include "sanitizer_common/sanitizer_libc.h" #include "tsan_stat.h" #include "ubsan/ubsan_platform.h" // Setup defaults for compile definitions. #ifndef TSAN_NO_HISTORY # define TSAN_NO_HISTORY 0 #endif #ifndef TSAN_COLLECT_STATS # define TSAN_COLLECT_STATS 0 #endif #ifndef TSAN_CONTAINS_UBSAN # if CAN_SANITIZE_UB && !SANITIZER_GO # define TSAN_CONTAINS_UBSAN 1 # else # define TSAN_CONTAINS_UBSAN 0 # endif #endif namespace __tsan { const int kClkBits = 42; const unsigned kMaxTidReuse = (1 << (64 - kClkBits)) - 1; struct ClockElem { u64 epoch : kClkBits; u64 reused : 64 - kClkBits; // tid reuse count }; struct ClockBlock { static const uptr kSize = 512; static const uptr kTableSize = kSize / sizeof(u32); static const uptr kClockCount = kSize / sizeof(ClockElem); static const uptr kRefIdx = kTableSize - 1; static const uptr kBlockIdx = kTableSize - 2; union { u32 table[kTableSize]; ClockElem clock[kClockCount]; }; ClockBlock() { } }; const int kTidBits = 13; // Reduce kMaxTid by kClockCount because one slot in ClockBlock table is // occupied by reference counter, so total number of elements we can store // in SyncClock is kClockCount * (kTableSize - 1). const unsigned kMaxTid = (1 << kTidBits) - ClockBlock::kClockCount; #if !SANITIZER_GO const unsigned kMaxTidInClock = kMaxTid * 2; // This includes msb 'freed' bit. #else const unsigned kMaxTidInClock = kMaxTid; // Go does not track freed memory. #endif const uptr kShadowStackSize = 64 * 1024; // Count of shadow values in a shadow cell. const uptr kShadowCnt = 4; // That many user bytes are mapped onto a single shadow cell. const uptr kShadowCell = 8; // Size of a single shadow value (u64). const uptr kShadowSize = 8; // Shadow memory is kShadowMultiplier times larger than user memory. const uptr kShadowMultiplier = kShadowSize * kShadowCnt / kShadowCell; // That many user bytes are mapped onto a single meta shadow cell. // Must be less or equal to minimal memory allocator alignment. const uptr kMetaShadowCell = 8; // Size of a single meta shadow value (u32). const uptr kMetaShadowSize = 4; #if TSAN_NO_HISTORY const bool kCollectHistory = false; #else const bool kCollectHistory = true; #endif const u16 kInvalidTid = kMaxTid + 1; // The following "build consistency" machinery ensures that all source files // are built in the same configuration. Inconsistent builds lead to // hard to debug crashes. #if SANITIZER_DEBUG void build_consistency_debug(); #else void build_consistency_release(); #endif #if TSAN_COLLECT_STATS void build_consistency_stats(); #else void build_consistency_nostats(); #endif static inline void USED build_consistency() { #if SANITIZER_DEBUG build_consistency_debug(); #else build_consistency_release(); #endif #if TSAN_COLLECT_STATS build_consistency_stats(); #else build_consistency_nostats(); #endif } template<typename T> T min(T a, T b) { return a < b ? a : b; } template<typename T> T max(T a, T b) { return a > b ? a : b; } template<typename T> T RoundUp(T p, u64 align) { DCHECK_EQ(align & (align - 1), 0); return (T)(((u64)p + align - 1) & ~(align - 1)); } template<typename T> T RoundDown(T p, u64 align) { DCHECK_EQ(align & (align - 1), 0); return (T)((u64)p & ~(align - 1)); } // Zeroizes high part, returns 'bits' lsb bits. template<typename T> T GetLsb(T v, int bits) { return (T)((u64)v & ((1ull << bits) - 1)); } struct MD5Hash { u64 hash[2]; bool operator==(const MD5Hash &other) const; }; MD5Hash md5_hash(const void *data, uptr size); struct Processor; struct ThreadState; class ThreadContext; struct Context; struct ReportStack; class ReportDesc; class RegionAlloc; // Descriptor of user's memory block. struct MBlock { u64 siz : 48; u64 tag : 16; u32 stk; u16 tid; }; COMPILER_CHECK(sizeof(MBlock) == 16); enum ExternalTag : uptr { kExternalTagNone = 0, kExternalTagSwiftModifyingAccess = 1, kExternalTagFirstUserAvailable = 2, kExternalTagMax = 1024, // Don't set kExternalTagMax over 65,536, since MBlock only stores tags // as 16-bit values, see tsan_defs.h. }; } // namespace __tsan #endif // TSAN_DEFS_H
Upload File
Create Folder