[all-commits] [llvm/llvm-project] da7a5c: tsan: don't print __tsan_atomic* functions in repo...

Dmitry Vyukov via All-commits all-commits at lists.llvm.org
Wed Jul 28 11:34:59 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: da7a5c09c86c3f639c63ce8843d6f21c915ae1c6
      https://github.com/llvm/llvm-project/commit/da7a5c09c86c3f639c63ce8843d6f21c915ae1c6
  Author: Dmitry Vyukov <dvyukov at google.com>
  Date:   2021-07-28 (Wed, 28 Jul 2021)

  Changed paths:
    M compiler-rt/lib/tsan/rtl/tsan_interface_atomic.cpp
    M compiler-rt/test/tsan/atomic_free3.cpp
    M compiler-rt/test/tsan/atomic_stack.cpp

  Log Message:
  -----------
  tsan: don't print __tsan_atomic* functions in report stacks

Currently __tsan_atomic* functions do FuncEntry/Exit using caller PC
and then use current PC (pointing to __tsan_atomic* itself) during
memory access handling. As the result the top function in reports
involving atomics is __tsan_atomic* and the next frame points to user code.

Remove FuncEntry/Exit in atomic functions and use caller PC
during memory access handling. This removes __tsan_atomic*
from the top of report stacks, so that they point right to user code.

The motivation for this is performance.
Some atomic operations are very hot (mostly loads),
so removing FuncEntry/Exit is beneficial.
This also reduces thread trace consumption (1 event instead of 3).

__tsan_atomic* at the top of the stack is not necessary
and does not add any new information. We already say
"atomic write of size 4", "__tsan_atomic32_store" does not add
anything new.

It also makes reports consistent between atomic and non-atomic
accesses. For normal accesses we say "previous write" and point
to user code; for atomics we say "previous atomic write" and now
also point to user code.

Reviewed By: vitalybuka

Differential Revision: https://reviews.llvm.org/D106966




More information about the All-commits mailing list