1#!/bin/bash 2 3# Ensure that tsan runtime does not contain compiler-emitted memcpy and memset calls. 4 5set -eu 6 7ROOTDIR=$(dirname $0) 8TEST_DIR=$ROOTDIR/../../test/tsan 9 10: ${CXX:=clang++} 11CFLAGS="-fsanitize=thread -fPIE -O1 -g" 12LDFLAGS="-pie -lpthread -ldl -lrt -lm -Wl,--whole-archive $ROOTDIR/rtl/libtsan.a -Wl,--no-whole-archive" 13 14SRC=$TEST_DIR/simple_race.cc 15OBJ=$SRC.o 16EXE=$SRC.exe 17$CXX $SRC $CFLAGS -c -o $OBJ 18$CXX $OBJ $LDFLAGS -o $EXE 19 20NCALL=$(objdump -d $EXE | egrep "callq .*<__interceptor_mem(cpy|set)>" | wc -l) 21if [ "$NCALL" != "0" ]; then 22 echo FAIL: found $NCALL memcpy/memset calls 23 exit 1 24fi 25 26# tail calls 27NCALL=$(objdump -d $EXE | egrep "jmpq .*<__interceptor_mem(cpy|set)>" | wc -l) 28if [ "$NCALL" != "0" ]; then 29 echo FAIL: found $NCALL memcpy/memset calls 30 exit 1 31fi 32