#!/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