Lines Matching full:pc
25 void ReportDeadlock(ThreadState *thr, uptr pc, DDReport *r);
26 void ReportDestroyLocked(ThreadState *thr, uptr pc, uptr addr,
31 uptr pc;
33 Callback(ThreadState *thr, uptr pc)
35 , pc(pc) {
40 StackID Unwind() override { return CurrentStackId(thr, pc); }
44 void DDMutexInit(ThreadState *thr, uptr pc, SyncVar *s) {
45 Callback cb(thr, pc);
50 static void ReportMutexMisuse(ThreadState *thr, uptr pc, ReportType typ,
62 ObtainCurrentStack(thr, pc, &trace);
68 static void RecordMutexLock(ThreadState *thr, uptr pc, uptr addr,
76 TraceMutexLock(thr, typ, pc, addr, stack_id);
86 void MutexCreate(ThreadState *thr, uptr pc, uptr addr, u32 flagz) {
88 if (!(flagz & MutexFlagLinkerInit) && pc && IsAppMem(addr))
89 MemoryAccess(thr, pc, addr, 1, kAccessWrite);
91 auto s = ctx->metamap.GetSyncOrCreate(thr, pc, addr, true);
95 s->creation_stack_id = CurrentStackId(thr, pc);
98 void MutexDestroy(ThreadState *thr, uptr pc, uptr addr, u32 flagz) {
118 Callback cb(thr, pc);
130 if (pc && IsAppMem(addr))
131 MemoryAccess(thr, pc, addr, 1,
135 ReportDestroyLocked(thr, pc, addr, last_lock, creation_stack_id);
140 void MutexPreLock(ThreadState *thr, uptr pc, uptr addr, u32 flagz) {
146 Callback cb(thr, pc);
149 auto s = ctx->metamap.GetSyncOrCreate(thr, pc, addr, true);
155 ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
158 void MutexPostLock(ThreadState *thr, uptr pc, uptr addr, u32 flagz, int rec) {
165 if (pc && IsAppMem(addr))
166 MemoryAccess(thr, pc, addr, 1, kAccessRead | kAccessAtomic);
173 auto s = ctx->metamap.GetSyncOrCreate(thr, pc, addr, true);
175 RecordMutexLock(thr, pc, addr, creation_stack_id, true);
200 Callback cb(thr, pc);
208 ReportMutexMisuse(thr, pc, ReportTypeMutexDoubleLock, addr,
211 Callback cb(thr, pc);
212 ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
216 int MutexUnlock(ThreadState *thr, uptr pc, uptr addr, u32 flagz) {
218 if (pc && IsAppMem(addr))
219 MemoryAccess(thr, pc, addr, 1, kAccessRead | kAccessAtomic);
226 auto s = ctx->metamap.GetSyncOrCreate(thr, pc, addr, true);
249 Callback cb(thr, pc);
257 ReportMutexMisuse(thr, pc, ReportTypeMutexBadUnlock, addr,
260 Callback cb(thr, pc);
261 ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
266 void MutexPreReadLock(ThreadState *thr, uptr pc, uptr addr, u32 flagz) {
270 Callback cb(thr, pc);
273 auto s = ctx->metamap.GetSyncOrCreate(thr, pc, addr, true);
278 ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
281 void MutexPostReadLock(ThreadState *thr, uptr pc, uptr addr, u32 flagz) {
283 if (pc && IsAppMem(addr))
284 MemoryAccess(thr, pc, addr, 1, kAccessRead | kAccessAtomic);
290 auto s = ctx->metamap.GetSyncOrCreate(thr, pc, addr, true);
292 RecordMutexLock(thr, pc, addr, creation_stack_id, false);
308 Callback cb(thr, pc);
316 ReportMutexMisuse(thr, pc, ReportTypeMutexBadReadLock, addr,
319 Callback cb(thr, pc);
320 ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
324 void MutexReadUnlock(ThreadState *thr, uptr pc, uptr addr) {
326 if (pc && IsAppMem(addr))
327 MemoryAccess(thr, pc, addr, 1, kAccessRead | kAccessAtomic);
333 auto s = ctx->metamap.GetSyncOrCreate(thr, pc, addr, true);
349 Callback cb(thr, pc);
357 ReportMutexMisuse(thr, pc, ReportTypeMutexBadReadUnlock, addr,
360 Callback cb(thr, pc);
361 ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
365 void MutexReadOrWriteUnlock(ThreadState *thr, uptr pc, uptr addr) {
367 if (pc && IsAppMem(addr))
368 MemoryAccess(thr, pc, addr, 1, kAccessRead | kAccessAtomic);
375 auto s = ctx->metamap.GetSyncOrCreate(thr, pc, addr, true);
403 Callback cb(thr, pc);
411 ReportMutexMisuse(thr, pc, ReportTypeMutexBadUnlock, addr,
414 Callback cb(thr, pc);
415 ReportDeadlock(thr, pc, ctx->dd->GetReport(&cb));
419 void MutexRepair(ThreadState *thr, uptr pc, uptr addr) {
422 auto s = ctx->metamap.GetSyncOrCreate(thr, pc, addr, true);
428 void MutexInvalidAccess(ThreadState *thr, uptr pc, uptr addr) {
433 auto s = ctx->metamap.GetSyncOrCreate(thr, pc, addr, true);
437 ReportMutexMisuse(thr, pc, ReportTypeMutexInvalidAccess, addr,
441 void Acquire(ThreadState *thr, uptr pc, uptr addr) {
463 void Release(ThreadState *thr, uptr pc, uptr addr) {
469 auto s = ctx->metamap.GetSyncOrCreate(thr, pc, addr, false);
476 void ReleaseStore(ThreadState *thr, uptr pc, uptr addr) {
482 auto s = ctx->metamap.GetSyncOrCreate(thr, pc, addr, false);
489 void ReleaseStoreAcquire(ThreadState *thr, uptr pc, uptr addr) {
495 auto s = ctx->metamap.GetSyncOrCreate(thr, pc, addr, false);
516 void AfterSleep(ThreadState *thr, uptr pc) {
520 thr->last_sleep_stack_id = CurrentStackId(thr, pc);
528 void ReportDeadlock(ThreadState *thr, uptr pc, DDReport *r) {
554 void ReportDestroyLocked(ThreadState *thr, uptr pc, uptr addr,
564 ObtainCurrentStack(thr, pc, &trace);