[dfsan] Add thread registration
authorJianzhou Zhao <jianzhouzh@google.com>
Wed, 3 Feb 2021 19:41:58 +0000 (19:41 +0000)
committerJianzhou Zhao <jianzhouzh@google.com>
Fri, 5 Feb 2021 17:38:59 +0000 (17:38 +0000)
commit0f3fd3b2810d7549d5cf7356b269701d5c5032fa
tree22808c1b6e1c7d14fec8460b673835b8352ed4fc
parent5f4d7b2f0ab2f7a8395077572e140ae5c5d1f60b
[dfsan] Add thread registration

This is a part of https://reviews.llvm.org/D95835.

This change is to address two problems
1) When recording stacks in origin tracking, libunwind is not async signal safe. Inside signal callbacks, we need
to use fast unwind. Fast unwind needs threads
2) StackDepot used by origin tracking is not async signal safe, we set a flag per thread inside
a signal callback to prevent from using it.

The thread registration is similar to ASan and MSan.

Related MSan changes are
* https://github.com/llvm/llvm-project/commit/98f5ea0dbae664a2e5f9381a64f2913fe1add208
* https://github.com/llvm/llvm-project/commit/f653cda2695ac7390fe5663f2c0895213938334d
* https://github.com/llvm/llvm-project/commit/5a7c3643437c262137bd3dac7f6a0f5b9e8501be

Some changes in the diff are used in the next diffs
1) The test case pthread.c is not very interesting for now. It will be
  extended to test origin tracking later.
2) DFsanThread::InSignalHandler will be used by origin tracking later.

Reviewed-by: morehouse
Differential Revision: https://reviews.llvm.org/D95963
compiler-rt/lib/dfsan/CMakeLists.txt
compiler-rt/lib/dfsan/dfsan.cpp
compiler-rt/lib/dfsan/dfsan_custom.cpp
compiler-rt/lib/dfsan/dfsan_thread.cpp [new file with mode: 0644]
compiler-rt/lib/dfsan/dfsan_thread.h [new file with mode: 0644]
compiler-rt/test/dfsan/pthread.c [new file with mode: 0644]