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_symbolize.cpp
//===-- tsan_symbolize.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_symbolize.h" #include "sanitizer_common/sanitizer_common.h" #include "sanitizer_common/sanitizer_placement_new.h" #include "sanitizer_common/sanitizer_symbolizer.h" #include "tsan_flags.h" #include "tsan_report.h" #include "tsan_rtl.h" namespace __tsan { void EnterSymbolizer() { ThreadState *thr = cur_thread(); CHECK(!thr->in_symbolizer); thr->in_symbolizer = true; thr->ignore_interceptors++; } void ExitSymbolizer() { ThreadState *thr = cur_thread(); CHECK(thr->in_symbolizer); thr->in_symbolizer = false; thr->ignore_interceptors--; } // Legacy API. // May be overriden by JIT/JAVA/etc, // whatever produces PCs marked with kExternalPCBit. SANITIZER_WEAK_DEFAULT_IMPL bool __tsan_symbolize_external(uptr pc, char *func_buf, uptr func_siz, char *file_buf, uptr file_siz, int *line, int *col) { return false; } // New API: call __tsan_symbolize_external_ex only when it exists. // Once old clients are gone, provide dummy implementation. SANITIZER_WEAK_DEFAULT_IMPL void __tsan_symbolize_external_ex(uptr pc, void (*add_frame)(void *, const char *, const char *, int, int), void *ctx) {} struct SymbolizedStackBuilder { SymbolizedStack *head; SymbolizedStack *tail; uptr addr; }; static void AddFrame(void *ctx, const char *function_name, const char *file, int line, int column) { SymbolizedStackBuilder *ssb = (struct SymbolizedStackBuilder *)ctx; if (ssb->tail) { ssb->tail->next = SymbolizedStack::New(ssb->addr); ssb->tail = ssb->tail->next; } else { ssb->head = ssb->tail = SymbolizedStack::New(ssb->addr); } AddressInfo *info = &ssb->tail->info; if (function_name) { info->function = internal_strdup(function_name); } if (file) { info->file = internal_strdup(file); } info->line = line; info->column = column; } SymbolizedStack *SymbolizeCode(uptr addr) { // Check if PC comes from non-native land. if (addr & kExternalPCBit) { SymbolizedStackBuilder ssb = {nullptr, nullptr, addr}; __tsan_symbolize_external_ex(addr, AddFrame, &ssb); if (ssb.head) return ssb.head; // Legacy code: remove along with the declaration above // once all clients using this API are gone. // Declare static to not consume too much stack space. // We symbolize reports in a single thread, so this is fine. static char func_buf[1024]; static char file_buf[1024]; int line, col; SymbolizedStack *frame = SymbolizedStack::New(addr); if (__tsan_symbolize_external(addr, func_buf, sizeof(func_buf), file_buf, sizeof(file_buf), &line, &col)) { frame->info.function = internal_strdup(func_buf); frame->info.file = internal_strdup(file_buf); frame->info.line = line; frame->info.column = col; } return frame; } return Symbolizer::GetOrInit()->SymbolizePC(addr); } ReportLocation *SymbolizeData(uptr addr) { DataInfo info; if (!Symbolizer::GetOrInit()->SymbolizeData(addr, &info)) return 0; ReportLocation *ent = ReportLocation::New(ReportLocationGlobal); internal_memcpy(&ent->global, &info, sizeof(info)); return ent; } void SymbolizeFlush() { Symbolizer::GetOrInit()->Flush(); } } // namespace __tsan
Upload File
Create Folder