Lines Matching +full:frame +full:- +full:inversion
1 //===-- tsan_debugging.cpp ------------------------------------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
12 //===----------------------------------------------------------------------===//
23 case ReportTypeRace: return "data-race"; in ReportTypeDescription()
24 case ReportTypeVptrRace: return "data-race-vptr"; in ReportTypeDescription()
25 case ReportTypeUseAfterFree: return "heap-use-after-free"; in ReportTypeDescription()
26 case ReportTypeVptrUseAfterFree: return "heap-use-after-free-vptr"; in ReportTypeDescription()
27 case ReportTypeExternalRace: return "external-race"; in ReportTypeDescription()
28 case ReportTypeThreadLeak: return "thread-leak"; in ReportTypeDescription()
29 case ReportTypeMutexDestroyLocked: return "locked-mutex-destroy"; in ReportTypeDescription()
30 case ReportTypeMutexDoubleLock: return "mutex-double-lock"; in ReportTypeDescription()
31 case ReportTypeMutexInvalidAccess: return "mutex-invalid-access"; in ReportTypeDescription()
32 case ReportTypeMutexBadUnlock: return "mutex-bad-unlock"; in ReportTypeDescription()
33 case ReportTypeMutexBadReadLock: return "mutex-bad-read-lock"; in ReportTypeDescription()
34 case ReportTypeMutexBadReadUnlock: return "mutex-bad-read-unlock"; in ReportTypeDescription()
35 case ReportTypeSignalUnsafe: return "signal-unsafe-call"; in ReportTypeDescription()
36 case ReportTypeErrnoInSignal: return "errno-in-signal-handler"; in ReportTypeDescription()
37 case ReportTypeDeadlock: return "lock-order-inversion"; in ReportTypeDescription()
39 return "mutex-held-in-wrong-context"; in ReportTypeDescription()
60 for (SymbolizedStack *frame = first_frame; frame != nullptr; in CopyTrace() local
61 frame = frame->next) { in CopyTrace()
62 trace[i++] = (void *)frame->info.address; in CopyTrace()
70 return const_cast<ReportDesc*>(cur_thread()->current_report); in __tsan_get_current_report()
80 *description = ReportTypeDescription(rep->typ); in __tsan_get_report_data()
81 *count = rep->count; in __tsan_get_report_data()
82 *stack_count = rep->stacks.Size(); in __tsan_get_report_data()
83 *mop_count = rep->mops.Size(); in __tsan_get_report_data()
84 *loc_count = rep->locs.Size(); in __tsan_get_report_data()
85 *mutex_count = rep->mutexes.Size(); in __tsan_get_report_data()
86 *thread_count = rep->threads.Size(); in __tsan_get_report_data()
87 *unique_tid_count = rep->unique_tids.Size(); in __tsan_get_report_data()
88 if (rep->sleep) CopyTrace(rep->sleep->frames, sleep_trace, trace_size); in __tsan_get_report_data()
95 *tag = rep->tag; in __tsan_get_report_tag()
103 CHECK_LT(idx, rep->stacks.Size()); in __tsan_get_report_stack()
104 ReportStack *stack = rep->stacks[idx]; in __tsan_get_report_stack()
105 if (stack) CopyTrace(stack->frames, trace, trace_size); in __tsan_get_report_stack()
114 CHECK_LT(idx, rep->mops.Size()); in __tsan_get_report_mop()
115 ReportMop *mop = rep->mops[idx]; in __tsan_get_report_mop()
116 *tid = mop->tid; in __tsan_get_report_mop()
117 *addr = (void *)mop->addr; in __tsan_get_report_mop()
118 *size = mop->size; in __tsan_get_report_mop()
119 *write = mop->write ? 1 : 0; in __tsan_get_report_mop()
120 *atomic = mop->atomic ? 1 : 0; in __tsan_get_report_mop()
121 if (mop->stack) CopyTrace(mop->stack->frames, trace, trace_size); in __tsan_get_report_mop()
131 CHECK_LT(idx, rep->locs.Size()); in __tsan_get_report_loc()
132 ReportLocation *loc = rep->locs[idx]; in __tsan_get_report_loc()
133 *type = ReportLocationTypeDescription(loc->type); in __tsan_get_report_loc()
134 *addr = (void *)loc->global.start; in __tsan_get_report_loc()
135 *start = loc->heap_chunk_start; in __tsan_get_report_loc()
136 *size = loc->heap_chunk_size; in __tsan_get_report_loc()
137 *tid = loc->tid; in __tsan_get_report_loc()
138 *fd = loc->fd; in __tsan_get_report_loc()
139 *suppressable = loc->suppressable; in __tsan_get_report_loc()
140 if (loc->stack) CopyTrace(loc->stack->frames, trace, trace_size); in __tsan_get_report_loc()
148 CHECK_LT(idx, rep->locs.Size()); in __tsan_get_report_loc_object_type()
149 ReportLocation *loc = rep->locs[idx]; in __tsan_get_report_loc_object_type()
150 *object_type = GetObjectTypeFromTag(loc->external_tag); in __tsan_get_report_loc_object_type()
158 CHECK_LT(idx, rep->mutexes.Size()); in __tsan_get_report_mutex()
159 ReportMutex *mutex = rep->mutexes[idx]; in __tsan_get_report_mutex()
160 *mutex_id = mutex->id; in __tsan_get_report_mutex()
161 *addr = (void *)mutex->addr; in __tsan_get_report_mutex()
163 if (mutex->stack) CopyTrace(mutex->stack->frames, trace, trace_size); in __tsan_get_report_mutex()
172 CHECK_LT(idx, rep->threads.Size()); in __tsan_get_report_thread()
173 ReportThread *thread = rep->threads[idx]; in __tsan_get_report_thread()
174 *tid = thread->id; in __tsan_get_report_thread()
175 *os_id = thread->os_id; in __tsan_get_report_thread()
176 *running = thread->running; in __tsan_get_report_thread()
177 *name = thread->name; in __tsan_get_report_thread()
178 *parent_tid = thread->parent_tid; in __tsan_get_report_thread()
179 if (thread->stack) CopyTrace(thread->stack->frames, trace, trace_size); in __tsan_get_report_thread()
186 CHECK_LT(idx, rep->unique_tids.Size()); in __tsan_get_report_unique_tid()
187 *tid = rep->unique_tids[idx]; in __tsan_get_report_unique_tid()
208 if (a->PointerIsMine((void *)addr)) { in __tsan_locate_address()
209 void *block_begin = a->GetBlockBegin((void *)addr); in __tsan_locate_address()
210 if (block_begin) b = ctx->metamap.GetBlock((uptr)block_begin); in __tsan_locate_address()
214 region_address = (uptr)allocator()->GetBlockBegin((void *)addr); in __tsan_locate_address()
215 region_size = b->siz; in __tsan_locate_address()
220 ctx->thread_registry.Lock(); in __tsan_locate_address()
222 ctx->thread_registry.Unlock(); in __tsan_locate_address()
228 if (Symbolizer::GetOrInit()->SymbolizeData(addr, &info)) { in __tsan_locate_address()
248 if (a->PointerIsMine((void *)addr)) { in __tsan_get_alloc_stack()
249 void *block_begin = a->GetBlockBegin((void *)addr); in __tsan_get_alloc_stack()
250 if (block_begin) b = ctx->metamap.GetBlock((uptr)block_begin); in __tsan_get_alloc_stack()
254 *thread_id = b->tid; in __tsan_get_alloc_stack()
257 ThreadContextBase *tctx = ctx->thread_registry.GetThreadLocked(b->tid); in __tsan_get_alloc_stack()
258 *os_id = tctx->os_id; in __tsan_get_alloc_stack()
260 StackTrace stack = StackDepotGet(b->stk); in __tsan_get_alloc_stack()
262 for (uptr i = 0; i < size; i++) trace[i] = stack.trace[stack.size - i - 1]; in __tsan_get_alloc_stack()