#!/bin/sh

dir=`dirname $0`
dir=`cd $dir; /bin/pwd`

valgrind="valgrind -v --suppressions=$dir/valgrind-python.supp --suppressions=$dir/gps.supp --track-fds=yes"

# use --db-attach=yes        to attach to a debugger for every error found
# use --gen-suppressions=all to generate a suppression file 
# use --show-reachable=yes   to show unfreed blocks for which we still have a handle


## See http://www.lrz-muenchen.de/services/software/programmierung/valgrind/html_3.0/ms-manual.html

## Modes that can be used when running this script:
## memcheck : check pointers
## leaks:   : check memory leaks
## massif   : check heap usage
## addrcheck: check pointers usage, same as memcheck but doesn't do
##            "undefined-value checks". Twice as fast though

mode=${1:-memcheck}
shift

gps=${1:-$dir/obj/gps}
shift


case $mode in
   leaks)    args="--tool=memcheck --leak-check=full --gen-suppressions=all" ;;
   memcheck) args="--tool=memcheck";;
   massif)   args="--tool=massif --depth=5 --format=html --alloc-fn=__gnat_malloc \
                   --alloc-fn=PyObject_Malloc --alloc-fn=g_malloc --alloc-fn=__gnat_realloc \
                   --alloc-fn=g_realloc --alloc-fn=g_try_malloc --alloc-fn=g_malloc0 \
                   --alloc-fn=g_mem_chunk_alloc --alloc-fn=_PyObject_GC_Malloc" ;;
   *) echo "Invalid first argument: expecting leaks, memcheck or massif"
      exit -1;;
esac  

$valgrind $args "$@" $gps 2>&1 | tee log
