| #!/bin/sh |
| # Should point to the installation directory |
| prefix="@prefix@" |
| exec_prefix="@exec_prefix@" |
| VALGRIND="@libdir@/valgrind" |
| |
| |
| # Other stuff ... |
| version="@VERSION@" |
| emailto="jseward@acm.org" |
| |
| # name we were invoked with |
| vgname=`echo $0 | sed 's,^.*/,,'` |
| |
| # Cachegrind options |
| vgopts= |
| |
| # Prog and arg to run |
| argopts= |
| |
| # Show usage info? |
| dousage=0 |
| |
| # show version info? |
| doversion=0 |
| |
| # Collect up args for Cachegrind |
| while [ $+ != 0 ] |
| do |
| arg=$1 |
| case "$arg" in |
| # options for the user |
| --help) dousage=1; break;; |
| --version) doversion=1; break;; |
| --logfile-fd=*) vgopts="$vgopts $arg"; shift;; |
| -v) vgopts="$vgopts $arg"; shift;; |
| --verbose) vgopts="$vgopts -v"; shift;; |
| -q) vgopts="$vgopts $arg"; shift;; |
| --quiet) vgopts="$vgopts $arg"; shift;; |
| --demangle=no) vgopts="$vgopts $arg"; shift;; |
| --demangle=yes) vgopts="$vgopts $arg"; shift;; |
| --trace-children=no) vgopts="$vgopts $arg"; shift;; |
| --trace-children=yes) vgopts="$vgopts $arg"; shift;; |
| --suppressions=*) vgopts="$vgopts $arg"; shift;; |
| --I1=*,*,*) vgopts="$vgopts $arg"; shift;; |
| --D1=*,*,*) vgopts="$vgopts $arg"; shift;; |
| --L2=*,*,*) vgopts="$vgopts $arg"; shift;; |
| # options for debugging Cachegrind |
| --sanity-level=*) vgopts="$vgopts $arg"; shift;; |
| --single-step=yes) vgopts="$vgopts $arg"; shift;; |
| --single-step=no) vgopts="$vgopts $arg"; shift;; |
| --optimise=yes) vgopts="$vgopts $arg"; shift;; |
| --optimise=no) vgopts="$vgopts $arg"; shift;; |
| --instrument=yes) vgopts="$vgopts $arg"; shift;; |
| --instrument=no) vgopts="$vgopts $arg"; shift;; |
| --cleanup=yes) vgopts="$vgopts $arg"; shift;; |
| --cleanup=no) vgopts="$vgopts $arg"; shift;; |
| --trace-syscalls=yes) vgopts="$vgopts $arg"; shift;; |
| --trace-syscalls=no) vgopts="$vgopts $arg"; shift;; |
| --trace-signals=yes) vgopts="$vgopts $arg"; shift;; |
| --trace-signals=no) vgopts="$vgopts $arg"; shift;; |
| --trace-symtab=yes) vgopts="$vgopts $arg"; shift;; |
| --trace-symtab=no) vgopts="$vgopts $arg"; shift;; |
| --trace-malloc=yes) vgopts="$vgopts $arg"; shift;; |
| --trace-malloc=no) vgopts="$vgopts $arg"; shift;; |
| --trace-sched=yes) vgopts="$vgopts $arg"; shift;; |
| --trace-sched=no) vgopts="$vgopts $arg"; shift;; |
| --trace-pthread=none) vgopts="$vgopts $arg"; shift;; |
| --trace-pthread=some) vgopts="$vgopts $arg"; shift;; |
| --trace-pthread=all) vgopts="$vgopts $arg"; shift;; |
| --stop-after=*) vgopts="$vgopts $arg"; shift;; |
| --dump-error=*) vgopts="$vgopts $arg"; shift;; |
| -*) dousage=1; break;; |
| *) break;; |
| esac |
| done |
| |
| if [ z"$doversion" = z1 ]; then |
| echo "cachegrind-$version" |
| exit 1 |
| fi |
| |
| if [ $# = 0 ] || [ z"$dousage" = z1 ]; then |
| echo |
| echo "usage: $vgname [options] prog-and-args" |
| echo |
| echo " options for the user, with defaults in [ ], are:" |
| echo " --help show this message" |
| echo " --version show version" |
| echo " -q --quiet run silently; only print error msgs" |
| echo " -v --verbose be more verbose, incl counts of errors" |
| echo " --demangle=no|yes automatically demangle C++ names? [yes]" |
| echo " --trace-children=no|yes Cachegrind-ise child processes? [no]" |
| echo " --logfile-fd=<number> file descriptor for messages [2=stderr]" |
| echo " --suppressions=<filename> is ignored" |
| echo " --I1=<size>,<assoc>,<line_size> set I1 cache manually" |
| echo " --D1=<size>,<assoc>,<line_size> set D1 cache manually" |
| echo " --L2=<size>,<assoc>,<line_size> set L2 cache manually" |
| echo |
| echo " options for debugging Cachegrind itself are:" |
| echo " --sanity-level=<number> level of sanity checking to do [1]" |
| echo " --single-step=no|yes translate each instr separately? [no]" |
| echo " --optimise=no|yes improve intermediate code? [yes]" |
| echo " --instrument=no|yes actually do memory checks? [yes]" |
| echo " --cleanup=no|yes improve after instrumentation? [yes]" |
| echo " --trace-syscalls=no|yes show all system calls? [no]" |
| echo " --trace-signals=no|yes show signal handling details? [no]" |
| echo " --trace-symtab=no|yes show symbol table details? [no]" |
| echo " --trace-malloc=no|yes show client malloc details? [no]" |
| echo " --trace-sched=no|yes show thread scheduler details? [no]" |
| echo " --trace-pthread=none|some|all show pthread event details? [no]" |
| echo " --stop-after=<number> switch to real CPU after executing" |
| echo " <number> basic blocks [infinity]" |
| echo " --dump-error=<number> show translation for basic block" |
| echo " associated with <number>'th" |
| echo " error context [0=don't show any]" |
| echo |
| echo " Extra options are read from env variable \$CACHEGRIND_OPTS" |
| echo |
| echo " Valgrind is Copyright (C) 2000-2002 Julian Seward" |
| echo " and licensed under the GNU General Public License, version 2." |
| echo " Bug reports, feedback, admiration, abuse, etc, to: $emailto." |
| echo |
| exit 1 |
| fi |
| |
| # A bit subtle. The LD_PRELOAD added entry must be absolute |
| # and not depend on LD_LIBRARY_PATH. This is so that we can |
| # mess with LD_LIBRARY_PATH for child processes, which makes |
| # libpthread.so fall out of visibility, independently of |
| # whether valgrind.so is visible. |
| |
| VG_ARGS="$CACHEGRIND_OPTS $vgsupp $vgopts --cachesim=yes" |
| export VG_ARGS |
| LD_LIBRARY_PATH=$VALGRIND:$LD_LIBRARY_PATH |
| export LD_LIBRARY_PATH |
| LD_PRELOAD=$VALGRIND/valgrind.so:$LD_PRELOAD |
| export LD_PRELOAD |
| #LD_DEBUG=files |
| #LD_DEBUG=symbols |
| #export LD_DEBUG |
| exec "$@" |