1#!/bin/bash
2
3PIN_ROOT=${PIN_ROOT:-$HOME/pin}
4TS_ROOT=${TS_ROOT:-`dirname $0`}
5TS_VARIANT=-debug
6MT=
7
8UNAME_OS=`uname -o`
9if [ "$UNAME_OS" == "GNU/Linux" ]; then
10  PIN_BINARY=${PIN_BINARY:-pin}
11  DLL=so
12  OS=linux
13elif [ "$UNAME_OS" == "Cygwin" ]; then
14  PIN_BINARY=${PIN_BINARY:-pin.bat}
15  DLL=dll
16  OS=windows
17fi
18
19export MSM_THREAD_SANITIZER=1
20export INSTRUMENTATION_FRAMEWORK=PIN_LINUX
21
22
23FOLLOW=-follow_execv
24PIN_FLAGS=${PIN_FLAGS:-""}
25
26TS_FLAGS="-short_name"
27PIN_FLAGS=""
28
29VERBOZE=0
30
31for arg in "$@"; do
32  case $arg in
33    --opt) TS_VARIANT="";;
34    --dbg) TS_VARIANT="-debug";;
35    --mt)  MT=mt;;
36    --v=[1-9]) VERBOZE=1; TS_FLAGS="$TS_FLAGS $arg";;
37    --) shift; break;;
38    -*) TS_FLAGS="$TS_FLAGS $arg";;
39    *) break;;
40  esac
41  shift
42done
43
44
45ulimit -c 0 # core make very little sense here
46
47if [ $VERBOZE == "1" ] ; then
48  printf "PIN_ROOT   : %s\n" "$PIN_ROOT"
49  printf "PIN_BINARY : %s\n" "$PIN_BINARY"
50  printf "PIN_FLAGS  : %s\n" "$PIN_FLAGS"
51  printf "TS_ROOT    : %s\n" "$TS_ROOT"
52  printf "TS_VARIANT : %s\n" "$TS_VARIANT"
53  printf "TS_FLAGS   : %s\n" "$TS_FLAGS"
54  printf "PARAMS     : %s\n" "$*"
55fi
56
57if [ "$TS_VARIANT" == "-debug" ] ; then
58  TS_FLAGS="$TS_FLAGS -slow_asserts"
59fi
60
61TS_PARAMS="$@"
62
63run() {
64  echo $@
65  $@
66}
67
68run $PIN_ROOT/$PIN_BINARY $PIN_FLAGS $FOLLOW \
69  -t64 $TS_ROOT/bin/amd64-$OS${TS_VARIANT}-ts_pin$MT.$DLL \
70  -t   $TS_ROOT/bin/x86-$OS${TS_VARIANT}-ts_pin$MT.$DLL \
71 $TS_FLAGS -- $TS_PARAMS
72
73