| #!/bin/bash |
| |
| PIN_ROOT=${PIN_ROOT:-$HOME/pin} |
| TS_ROOT=${TS_ROOT:-`dirname $0`} |
| TS_VARIANT=-debug |
| MT= |
| |
| UNAME_OS=`uname -o` |
| if [ "$UNAME_OS" == "GNU/Linux" ]; then |
| PIN_BINARY=${PIN_BINARY:-pin} |
| DLL=so |
| OS=linux |
| elif [ "$UNAME_OS" == "Cygwin" ]; then |
| PIN_BINARY=${PIN_BINARY:-pin.bat} |
| DLL=dll |
| OS=windows |
| fi |
| |
| export MSM_THREAD_SANITIZER=1 |
| export INSTRUMENTATION_FRAMEWORK=PIN_LINUX |
| |
| |
| FOLLOW=-follow_execv |
| PIN_FLAGS=${PIN_FLAGS:-""} |
| |
| TS_FLAGS="-short_name" |
| PIN_FLAGS="" |
| |
| VERBOZE=0 |
| |
| for arg in "$@"; do |
| case $arg in |
| --opt) TS_VARIANT="";; |
| --dbg) TS_VARIANT="-debug";; |
| --mt) MT=mt;; |
| --v=[1-9]) VERBOZE=1; TS_FLAGS="$TS_FLAGS $arg";; |
| --) shift; break;; |
| -*) TS_FLAGS="$TS_FLAGS $arg";; |
| *) break;; |
| esac |
| shift |
| done |
| |
| |
| ulimit -c 0 # core make very little sense here |
| |
| if [ $VERBOZE == "1" ] ; then |
| printf "PIN_ROOT : %s\n" "$PIN_ROOT" |
| printf "PIN_BINARY : %s\n" "$PIN_BINARY" |
| printf "PIN_FLAGS : %s\n" "$PIN_FLAGS" |
| printf "TS_ROOT : %s\n" "$TS_ROOT" |
| printf "TS_VARIANT : %s\n" "$TS_VARIANT" |
| printf "TS_FLAGS : %s\n" "$TS_FLAGS" |
| printf "PARAMS : %s\n" "$*" |
| fi |
| |
| if [ "$TS_VARIANT" == "-debug" ] ; then |
| TS_FLAGS="$TS_FLAGS -slow_asserts" |
| fi |
| |
| TS_PARAMS="$@" |
| |
| run() { |
| echo $@ |
| $@ |
| } |
| |
| run $PIN_ROOT/$PIN_BINARY $PIN_FLAGS $FOLLOW \ |
| -t64 $TS_ROOT/bin/amd64-$OS${TS_VARIANT}-ts_pin$MT.$DLL \ |
| -t $TS_ROOT/bin/x86-$OS${TS_VARIANT}-ts_pin$MT.$DLL \ |
| $TS_FLAGS -- $TS_PARAMS |
| |