[compiler-rt] r254955 - [TSan] Port check_memcpy.sh script to a regular lit test.

Alexey Samsonov via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 7 14:47:00 PST 2015


On Mon, Dec 7, 2015 at 2:00 PM, Jonathan Roelofs <jonathan at codesourcery.com>
wrote:

>
>
> On 12/7/15 2:54 PM, Alexey Samsonov via llvm-commits wrote:
>
>> Author: samsonov
>> Date: Mon Dec  7 15:53:59 2015
>> New Revision: 254955
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=254955&view=rev
>> Log:
>> [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.
>>
>> Added:
>>      compiler-rt/trunk/test/tsan/Linux/check_memcpy.cc
>>      compiler-rt/trunk/test/tsan/Linux/check_memcpy.sh   (with props)
>> Removed:
>>      compiler-rt/trunk/lib/tsan/check_memcpy.sh
>> Modified:
>>      compiler-rt/trunk/lib/tsan/Makefile.old
>>
>> Modified: compiler-rt/trunk/lib/tsan/Makefile.old
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/Makefile.old?rev=254955&r1=254954&r2=254955&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/Makefile.old (original)
>> +++ compiler-rt/trunk/lib/tsan/Makefile.old Mon Dec  7 15:53:59 2015
>> @@ -71,14 +71,12 @@ presubmit:
>>         # Release build with clang.
>>         $(MAKE) -f Makefile.old clean
>>         $(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=$(CLANG)
>> CXX=$(CLANG)++
>> -       ./check_memcpy.sh
>>         # Debug build with gcc
>>         $(MAKE) -f Makefile.old clean
>>         $(MAKE) -f Makefile.old run DEBUG=1 -j 16 CC=gcc CXX=g++
>>         # Release build with gcc
>>         $(MAKE) -f Makefile.old clean
>>         $(MAKE) -f Makefile.old run DEBUG=0 -j 16 CC=gcc CXX=g++
>> -       ./check_memcpy.sh
>>         # Sanity check for Go runtime
>>         (cd go && ./buildgo.sh)
>>         # Check cmake build
>>
>> Removed: compiler-rt/trunk/lib/tsan/check_memcpy.sh
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/check_memcpy.sh?rev=254954&view=auto
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/check_memcpy.sh (original)
>> +++ compiler-rt/trunk/lib/tsan/check_memcpy.sh (removed)
>> @@ -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
>>
>> Added: compiler-rt/trunk/test/tsan/Linux/check_memcpy.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/Linux/check_memcpy.cc?rev=254955&view=auto
>>
>> ==============================================================================
>> --- compiler-rt/trunk/test/tsan/Linux/check_memcpy.cc (added)
>> +++ compiler-rt/trunk/test/tsan/Linux/check_memcpy.cc Mon Dec  7 15:53:59
>> 2015
>> @@ -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;
>> +}
>> +
>>
>> Added: compiler-rt/trunk/test/tsan/Linux/check_memcpy.sh
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/Linux/check_memcpy.sh?rev=254955&view=auto
>>
>> ==============================================================================
>> --- compiler-rt/trunk/test/tsan/Linux/check_memcpy.sh (added)
>> +++ compiler-rt/trunk/test/tsan/Linux/check_memcpy.sh Mon Dec  7 15:53:59
>> 2015
>> @@ -0,0 +1,26 @@
>> +#!/bin/bash
>> +
>> +# Script that ensures that TSan runtime does not contain compiler-emitted
>> +# memcpy and memset calls.
>>
>
> Why is this a script at all? ISTM it should be done as FileCheck
> CHECK-NOT's in check_memcpy.cc...


Right, I've killed it in r254959. Thanks!


>
>
> +
>> +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
>>
>> Propchange: compiler-rt/trunk/test/tsan/Linux/check_memcpy.sh
>>
>> ------------------------------------------------------------------------------
>>      svn:executable = *
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>>
> --
> Jon Roelofs
> jonathan at codesourcery.com
> CodeSourcery / Mentor Embedded
>



-- 
Alexey Samsonov
vonosmas at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151207/54bcb07f/attachment.html>


More information about the llvm-commits mailing list