48 lines
1.4 KiB
CMake
48 lines
1.4 KiB
CMake
|
# this file simulates a program that has been built with thread sanitizer
|
||
|
# options
|
||
|
|
||
|
message("TSAN_OPTIONS = [$ENV{TSAN_OPTIONS}]")
|
||
|
string(REGEX REPLACE ".*log_path=\"([^\"]*)\".*" "\\1" LOG_FILE "$ENV{TSAN_OPTIONS}")
|
||
|
message("LOG_FILE=[${LOG_FILE}]")
|
||
|
|
||
|
set(error_types
|
||
|
"data race"
|
||
|
"data race on vptr (ctor/dtor vs virtual call)"
|
||
|
"heap-use-after-free"
|
||
|
"thread leak"
|
||
|
"destroy of a locked mutex"
|
||
|
"double lock of a mutex"
|
||
|
"unlock of an unlocked mutex (or by a wrong thread)"
|
||
|
"read lock of a write locked mutex"
|
||
|
"read unlock of a write locked mutex"
|
||
|
"signal-unsafe call inside of a signal"
|
||
|
"signal handler spoils errno"
|
||
|
"lock-order-inversion (potential deadlock)"
|
||
|
)
|
||
|
|
||
|
# clear the log file
|
||
|
file(REMOVE "${LOG_FILE}.2343")
|
||
|
|
||
|
# create an error of each type of thread santizer
|
||
|
# these names come from tsan_report.cc in llvm
|
||
|
foreach(error_type ${error_types} )
|
||
|
|
||
|
file(APPEND "${LOG_FILE}.2343"
|
||
|
"==================
|
||
|
WARNING: ThreadSanitizer: ${error_type} (pid=27978)
|
||
|
Write of size 4 at 0x7fe017ce906c by thread T1:
|
||
|
#0 Thread1 ??:0 (exe+0x000000000bb0)
|
||
|
#1 <null> <null>:0 (libtsan.so.0+0x00000001b279)
|
||
|
|
||
|
Previous write of size 4 at 0x7fe017ce906c by main thread:
|
||
|
#0 main ??:0 (exe+0x000000000c3c)
|
||
|
|
||
|
Thread T1 (tid=27979, running) created by main thread at:
|
||
|
#0 <null> <null>:0 (libtsan.so.0+0x00000001ed7b)
|
||
|
#1 main ??:0 (exe+0x000000000c2c)
|
||
|
|
||
|
SUMMARY: ThreadSanitizer: ${error_type} ??:0 Thread1
|
||
|
==================
|
||
|
")
|
||
|
endforeach()
|