Index: tools/valgrind/chrome_tests.sh |
=================================================================== |
--- tools/valgrind/chrome_tests.sh (revision 109423) |
+++ tools/valgrind/chrome_tests.sh (working copy) |
@@ -7,64 +7,42 @@ |
# Set up some paths and re-direct the arguments to chrome_tests.py |
export THISDIR=`dirname $0` |
+ARGV_COPY="$@" |
-TOOL_OPTION=0 |
-# If --tool is omitted, default to --tool=memcheck |
-NEEDS_VALGRIND=1 |
- |
# We need to set CHROME_VALGRIND iff using Memcheck or TSan-Valgrind: |
# tools/valgrind/chrome_tests.sh --tool memcheck |
# or |
# tools/valgrind/chrome_tests.sh --tool=memcheck |
# (same for "--tool=tsan") |
-# TODO(glider): can this be made more compact? |
-for flag in $@ |
+tool="memcheck" # Default to memcheck. |
+while (( "$#" )) |
do |
- if [ "$flag" == "--tool" ] |
+ if [[ "$1" == "--tool" ]] |
then |
- # Need to check that the next argument is either "memcheck", "tsan" |
- # or "tsan_rv". |
- TOOL_OPTION=1 |
- NEEDS_VALGRIND=0 |
- continue |
- elif [ "$flag" == "--tool=tsan" ] |
+ tool="$2" |
+ shift |
+ elif [[ "$1" =~ --tool=(.*) ]] |
then |
- NEEDS_VALGRIND=1 |
- break |
- elif [ "$flag" == "--tool=tsan_rv" ] |
- then |
- NEEDS_VALGRIND=1 |
- break |
- elif [ "$flag" == "--tool=memcheck" ] |
- then |
- NEEDS_VALGRIND=1 |
- break |
- elif [ $(echo $flag | sed "s/=.*//") == "--tool" ] |
- then |
- # This is a non-Valgrind tool. |
- NEEDS_VALGRIND=0 |
- break |
+ tool="${BASH_REMATCH[1]}" |
fi |
- if [ "$TOOL_OPTION" == "1" ] |
- then |
- if [ "$flag" == "memcheck" ] |
- then |
- NEEDS_VALGRIND=1 |
- break |
- elif [ "$flag" == "tsan" ] |
- then |
- NEEDS_VALGRIND=1 |
- break |
- elif [ "$flag" == "tsan_rv" ] |
- then |
- NEEDS_VALGRIND=1 |
- break |
- else |
- TOOL_OPTION=0 |
- fi |
- fi |
+ shift |
done |
+NEEDS_VALGRIND=0 |
+NEEDS_DRMEMORY=0 |
+ |
+case "$tool" in |
+ "memcheck") |
+ NEEDS_VALGRIND=1 |
+ ;; |
+ "tsan" | "tsan_rv") |
+ NEEDS_VALGRIND=1 |
+ ;; |
+ "drmemory" | "drmemory_light" | "drmemory_full") |
+ NEEDS_DRMEMORY=1 |
+ ;; |
+esac |
+ |
if [ "$NEEDS_VALGRIND" == "1" ] |
then |
CHROME_VALGRIND=`sh $THISDIR/locate_valgrind.sh` |
@@ -82,4 +60,21 @@ |
export VALGRIND_LIB_INNER="$CHROME_VALGRIND/lib/valgrind" |
fi |
-PYTHONPATH=$THISDIR/../python/google "$THISDIR/chrome_tests.py" "$@" |
+if [ "$NEEDS_DRMEMORY" == "1" ] |
+then |
+ export DRMEMORY_PATH=$THISDIR/../../third_party/drmemory |
+ export DRMEMORY_SFX=$DRMEMORY_PATH/drmemory-windows-sfx.exe |
+ if [ ! -f "$DRMEMORY_SFX" ] |
+ then |
+ echo "Can't find Dr. Memory executables." |
+ echo "See http://www.chromium.org/developers/how-tos/using-valgrind/dr-memory" |
+ echo "for the instructions on how to get them." |
+ exit 1 |
+ fi |
+ |
+ chmod +x "$DRMEMORY_SFX" # Cygwin won't run it without +x. |
+ "$DRMEMORY_SFX" -o"$DRMEMORY_PATH/unpacked" -y |
+ export DRMEMORY_COMMAND=$DRMEMORY_PATH/unpacked/bin/drmemory.exe |
+fi |
+ |
+PYTHONPATH=$THISDIR/../python/google "$THISDIR/chrome_tests.py" $ARGV_COPY |