forked from OSchip/llvm-project
[TSan] Port check_memcpy.sh script to a regular lit test.
Check that TSan runtime doesn't contain compiler-inserted calls to memset/memmove functions. In future, we may consider moving this test to test/sanitizer_common, as we don't want to have compiler-inserted memcpy/memmove calls in any sanitizer runtime. llvm-svn: 254955
This commit is contained in:
parent
4b5634af44
commit
dc37ee2226
|
@ -71,14 +71,12 @@ presubmit:
|
||||||
# Release build with clang.
|
# Release build with clang.
|
||||||
$(MAKE) -f Makefile.old clean
|
$(MAKE) -f Makefile.old clean
|
||||||
$(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=$(CLANG) CXX=$(CLANG)++
|
$(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=$(CLANG) CXX=$(CLANG)++
|
||||||
./check_memcpy.sh
|
|
||||||
# Debug build with gcc
|
# Debug build with gcc
|
||||||
$(MAKE) -f Makefile.old clean
|
$(MAKE) -f Makefile.old clean
|
||||||
$(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=gcc CXX=g++
|
$(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=gcc CXX=g++
|
||||||
# Release build with gcc
|
# Release build with gcc
|
||||||
$(MAKE) -f Makefile.old clean
|
$(MAKE) -f Makefile.old clean
|
||||||
$(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=gcc CXX=g++
|
$(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=gcc CXX=g++
|
||||||
./check_memcpy.sh
|
|
||||||
# Sanity check for Go runtime
|
# Sanity check for Go runtime
|
||||||
(cd go && ./buildgo.sh)
|
(cd go && ./buildgo.sh)
|
||||||
# Check cmake build
|
# Check cmake build
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
#!/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
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
// Test that verifies TSan runtime doesn't contain compiler-emitted
|
||||||
|
// memcpy/memmove calls. It builds the binary with TSan and passes it to
|
||||||
|
// check_memcpy.sh script.
|
||||||
|
|
||||||
|
// RUN: %clangxx_tsan -O1 %s -o %t
|
||||||
|
// RUN: %S/check_memcpy.sh %t
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Script that ensures that TSan runtime does not contain compiler-emitted
|
||||||
|
# memcpy and memset calls.
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
if [[ "$#" != 1 ]]; then
|
||||||
|
echo "Usage: $0 /path/to/binary/built/with/tsan"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
EXE=$1
|
||||||
|
|
||||||
|
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
|
Loading…
Reference in New Issue