Index: tools_webrtc/valgrind/valgrind.sh |
diff --git a/tools_webrtc/valgrind/valgrind.sh b/tools_webrtc/valgrind/valgrind.sh |
new file mode 100755 |
index 0000000000000000000000000000000000000000..a0976e5e0a2a86e9c50ca3d93604e003d0ba7023 |
--- /dev/null |
+++ b/tools_webrtc/valgrind/valgrind.sh |
@@ -0,0 +1,110 @@ |
+#!/bin/bash |
+ |
+# Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. |
+# |
+# Use of this source code is governed by a BSD-style license |
+# that can be found in the LICENSE file in the root of the source |
+# tree. An additional intellectual property rights grant can be found |
+# in the file PATENTS. All contributing project authors may |
+# be found in the AUTHORS file in the root of the source tree. |
+ |
+# This is a small script for manually launching valgrind, along with passing |
+# it the suppression file, and some helpful arguments (automatically attaching |
+# the debugger on failures, etc). Run it from your repo root, something like: |
+# $ sh ./tools/valgrind/valgrind.sh ./out/Debug/chrome |
+# |
+# This is mostly intended for running the chrome browser interactively. |
+# To run unit tests, you probably want to run chrome_tests.sh instead. |
+# That's the script used by the valgrind buildbot. |
+ |
+export THISDIR=`dirname $0` |
+ |
+setup_memcheck() { |
+ RUN_COMMAND="valgrind" |
+ |
+ # Prompt to attach gdb when there was an error detected. |
+ DEFAULT_TOOL_FLAGS=("--db-command=gdb -nw %f %p" "--db-attach=yes" \ |
+ # Keep the registers in gdb in sync with the code. |
+ "--vex-iropt-register-updates=allregs-at-mem-access" \ |
+ # Overwrite newly allocated or freed objects |
+ # with 0x41 to catch inproper use. |
+ "--malloc-fill=41" "--free-fill=41" \ |
+ # Increase the size of stacks being tracked. |
+ "--num-callers=30") |
+} |
+ |
+setup_unknown() { |
+ echo "Unknown tool \"$TOOL_NAME\" specified, the result is not guaranteed" |
+ DEFAULT_TOOL_FLAGS=() |
+} |
+ |
+set -e |
+ |
+if [ $# -eq 0 ]; then |
+ echo "usage: <command to run> <arguments ...>" |
+ exit 1 |
+fi |
+ |
+TOOL_NAME="memcheck" |
+declare -a DEFAULT_TOOL_FLAGS[0] |
+ |
+# Select a tool different from memcheck with --tool=TOOL as a first argument |
+TMP_STR=`echo $1 | sed 's/^\-\-tool=//'` |
+if [ "$TMP_STR" != "$1" ]; then |
+ TOOL_NAME="$TMP_STR" |
+ shift |
+fi |
+ |
+if echo "$@" | grep "\-\-tool" ; then |
+ echo "--tool=TOOL must be the first argument" >&2 |
+ exit 1 |
+fi |
+ |
+case $TOOL_NAME in |
+ memcheck*) setup_memcheck "$1";; |
+ *) setup_unknown;; |
+esac |
+ |
+ |
+SUPPRESSIONS="$THISDIR/$TOOL_NAME/suppressions.txt" |
+ |
+CHROME_VALGRIND=`sh $THISDIR/locate_valgrind.sh` |
+if [ "$CHROME_VALGRIND" = "" ] |
+then |
+ # locate_valgrind.sh failed |
+ exit 1 |
+fi |
+echo "Using valgrind binaries from ${CHROME_VALGRIND}" |
+ |
+set -x |
+PATH="${CHROME_VALGRIND}/bin:$PATH" |
+# We need to set these variables to override default lib paths hard-coded into |
+# Valgrind binary. |
+export VALGRIND_LIB="$CHROME_VALGRIND/lib/valgrind" |
+export VALGRIND_LIB_INNER="$CHROME_VALGRIND/lib/valgrind" |
+ |
+# G_SLICE=always-malloc: make glib use system malloc |
+# NSS_DISABLE_UNLOAD=1: make nss skip dlclosing dynamically loaded modules, |
+# which would result in "obj:*" in backtraces. |
+# NSS_DISABLE_ARENA_FREE_LIST=1: make nss use system malloc |
+# G_DEBUG=fatal_warnings: make GTK abort on any critical or warning assertions. |
+# If it crashes on you in the Options menu, you hit bug 19751, |
+# comment out the G_DEBUG=fatal_warnings line. |
+# |
+# GTEST_DEATH_TEST_USE_FORK=1: make gtest death tests valgrind-friendly |
+# |
+# When everyone has the latest valgrind, we might want to add |
+# --show-possibly-lost=no |
+# to ignore possible but not definite leaks. |
+ |
+G_SLICE=always-malloc \ |
+NSS_DISABLE_UNLOAD=1 \ |
+NSS_DISABLE_ARENA_FREE_LIST=1 \ |
+G_DEBUG=fatal_warnings \ |
+GTEST_DEATH_TEST_USE_FORK=1 \ |
+$RUN_COMMAND \ |
+ --trace-children=yes \ |
+ --leak-check=yes \ |
+ --suppressions="$SUPPRESSIONS" \ |
+ "${DEFAULT_TOOL_FLAGS[@]}" \ |
+ "$@" |