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_interface.cpp
//===-- tsan_interface.cpp ------------------------------------------------===// // // 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. // //===----------------------------------------------------------------------===// #include "tsan_interface.h" #include "tsan_interface_ann.h" #include "tsan_rtl.h" #include "sanitizer_common/sanitizer_internal_defs.h" #define CALLERPC ((uptr)__builtin_return_address(0)) using namespace __tsan; typedef u16 uint16_t; typedef u32 uint32_t; typedef u64 uint64_t; void __tsan_init() { cur_thread_init(); Initialize(cur_thread()); } void __tsan_flush_memory() { FlushShadowMemory(); } void __tsan_read16(void *addr) { MemoryRead(cur_thread(), CALLERPC, (uptr)addr, kSizeLog8); MemoryRead(cur_thread(), CALLERPC, (uptr)addr + 8, kSizeLog8); } void __tsan_write16(void *addr) { MemoryWrite(cur_thread(), CALLERPC, (uptr)addr, kSizeLog8); MemoryWrite(cur_thread(), CALLERPC, (uptr)addr + 8, kSizeLog8); } void __tsan_read16_pc(void *addr, void *pc) { MemoryRead(cur_thread(), (uptr)pc, (uptr)addr, kSizeLog8); MemoryRead(cur_thread(), (uptr)pc, (uptr)addr + 8, kSizeLog8); } void __tsan_write16_pc(void *addr, void *pc) { MemoryWrite(cur_thread(), (uptr)pc, (uptr)addr, kSizeLog8); MemoryWrite(cur_thread(), (uptr)pc, (uptr)addr + 8, kSizeLog8); } // __tsan_unaligned_read/write calls are emitted by compiler. void __tsan_unaligned_read2(const void *addr) { UnalignedMemoryAccess(cur_thread(), CALLERPC, (uptr)addr, 2, false, false); } void __tsan_unaligned_read4(const void *addr) { UnalignedMemoryAccess(cur_thread(), CALLERPC, (uptr)addr, 4, false, false); } void __tsan_unaligned_read8(const void *addr) { UnalignedMemoryAccess(cur_thread(), CALLERPC, (uptr)addr, 8, false, false); } void __tsan_unaligned_read16(const void *addr) { UnalignedMemoryAccess(cur_thread(), CALLERPC, (uptr)addr, 16, false, false); } void __tsan_unaligned_write2(void *addr) { UnalignedMemoryAccess(cur_thread(), CALLERPC, (uptr)addr, 2, true, false); } void __tsan_unaligned_write4(void *addr) { UnalignedMemoryAccess(cur_thread(), CALLERPC, (uptr)addr, 4, true, false); } void __tsan_unaligned_write8(void *addr) { UnalignedMemoryAccess(cur_thread(), CALLERPC, (uptr)addr, 8, true, false); } void __tsan_unaligned_write16(void *addr) { UnalignedMemoryAccess(cur_thread(), CALLERPC, (uptr)addr, 16, true, false); } // __sanitizer_unaligned_load/store are for user instrumentation. extern "C" { SANITIZER_INTERFACE_ATTRIBUTE u16 __sanitizer_unaligned_load16(const uu16 *addr) { __tsan_unaligned_read2(addr); return *addr; } SANITIZER_INTERFACE_ATTRIBUTE u32 __sanitizer_unaligned_load32(const uu32 *addr) { __tsan_unaligned_read4(addr); return *addr; } SANITIZER_INTERFACE_ATTRIBUTE u64 __sanitizer_unaligned_load64(const uu64 *addr) { __tsan_unaligned_read8(addr); return *addr; } SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_unaligned_store16(uu16 *addr, u16 v) { __tsan_unaligned_write2(addr); *addr = v; } SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_unaligned_store32(uu32 *addr, u32 v) { __tsan_unaligned_write4(addr); *addr = v; } SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_unaligned_store64(uu64 *addr, u64 v) { __tsan_unaligned_write8(addr); *addr = v; } SANITIZER_INTERFACE_ATTRIBUTE void *__tsan_get_current_fiber() { return cur_thread(); } SANITIZER_INTERFACE_ATTRIBUTE void *__tsan_create_fiber(unsigned flags) { return FiberCreate(cur_thread(), CALLERPC, flags); } SANITIZER_INTERFACE_ATTRIBUTE void __tsan_destroy_fiber(void *fiber) { FiberDestroy(cur_thread(), CALLERPC, static_cast<ThreadState *>(fiber)); } SANITIZER_INTERFACE_ATTRIBUTE void __tsan_switch_to_fiber(void *fiber, unsigned flags) { FiberSwitch(cur_thread(), CALLERPC, static_cast<ThreadState *>(fiber), flags); } SANITIZER_INTERFACE_ATTRIBUTE void __tsan_set_fiber_name(void *fiber, const char *name) { ThreadSetName(static_cast<ThreadState *>(fiber), name); } } // extern "C" void __tsan_acquire(void *addr) { Acquire(cur_thread(), CALLERPC, (uptr)addr); } void __tsan_release(void *addr) { Release(cur_thread(), CALLERPC, (uptr)addr); }
Upload File
Create Folder