| 103 | /* -------------------------------------------------------------------------- */ |
| 104 | |
| 105 | static inline void |
| 106 | kcsan_report(csan_cell_t *new, u_int newcpu, csan_cell_t *old, u_int oldcpu) |
| 107 | { |
| 108 | const char *newsym, *oldsym; |
| 109 | #ifdef DDB |
| 110 | c_db_sym_t sym; |
| 111 | db_expr_t offset; |
| 112 | |
| 113 | sym = db_search_symbol((vm_offset_t)new->pc, DB_STGY_PROC, &offset); |
| 114 | db_symbol_values(sym, &newsym, NULL); |
| 115 | |
| 116 | sym = db_search_symbol((vm_offset_t)old->pc, DB_STGY_PROC, &offset); |
| 117 | db_symbol_values(sym, &oldsym, NULL); |
| 118 | #else |
| 119 | newsym = ""; |
| 120 | oldsym = ""; |
| 121 | #endif |
| 122 | REPORT("CSan: Racy Access " |
| 123 | "[Cpu%u %s%s Addr=%p Size=%u PC=%p<%s>] " |
| 124 | "[Cpu%u %s%s Addr=%p Size=%u PC=%p<%s>]\n", |
| 125 | newcpu, |
| 126 | (new->atomic ? "Atomic " : ""), (new->write ? "Write" : "Read"), |
| 127 | (void *)new->addr, new->size, (void *)new->pc, newsym, |
| 128 | oldcpu, |
| 129 | (old->atomic ? "Atomic " : ""), (old->write ? "Write" : "Read"), |
| 130 | (void *)old->addr, old->size, (void *)old->pc, oldsym); |
| 131 | kcsan_md_unwind(); |
| 132 | } |
| 133 | |
| 134 | static inline bool |
| 135 | kcsan_access_is_atomic(csan_cell_t *new, csan_cell_t *old) |
no test coverage detected