diff options
Diffstat (limited to 'lib/tsan/check_memcpy.sh')
-rwxr-xr-x | lib/tsan/check_memcpy.sh | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/tsan/check_memcpy.sh b/lib/tsan/check_memcpy.sh new file mode 100755 index 0000000000000..101df1166b7ce --- /dev/null +++ b/lib/tsan/check_memcpy.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Ensure that tsan runtime does not contain compiler-emitted memcpy and memset calls. + +set -eu + +ROOTDIR=$(dirname $0) +TEST_DIR=$ROOTDIR/../../test/tsan + +: ${CXX:=clang++} +CFLAGS="-fsanitize=thread -fPIE -O1 -g" +LDFLAGS="-pie -lpthread -ldl -lrt -lm -Wl,--whole-archive $ROOTDIR/rtl/libtsan.a -Wl,--no-whole-archive" + +SRC=$TEST_DIR/simple_race.cc +OBJ=$SRC.o +EXE=$SRC.exe +$CXX $SRC $CFLAGS -c -o $OBJ +$CXX $OBJ $LDFLAGS -o $EXE + +NCALL=$(objdump -d $EXE | egrep "callq .*<__interceptor_mem(cpy|set)>" | wc -l) +if [ "$NCALL" != "0" ]; then + echo FAIL: found $NCALL memcpy/memset calls + exit 1 +fi + +# tail calls +NCALL=$(objdump -d $EXE | egrep "jmpq .*<__interceptor_mem(cpy|set)>" | wc -l) +if [ "$NCALL" != "0" ]; then + echo FAIL: found $NCALL memcpy/memset calls + exit 1 +fi |