summaryrefslogtreecommitdiff
path: root/valgrind.in
blob: b10f48795b6a18d69ddc25ab16ef563e6539d5e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#!/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"

# The default name of the suppressions file
vgsupp="--suppressions=$VALGRIND/default.supp"

# name we were invoked with
vgname=`echo $0 | sed 's,^.*/,,'`

# Valgrind options
vgopts=

# Prog and arg to run
argopts=

# Show usage info?
dousage=0

# show version info?
doversion=0

# Collect up args for Valgrind
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;;
    --check-addrVs=no)      vgopts="$vgopts $arg"; shift;;
    --check-addrVs=yes)     vgopts="$vgopts $arg"; shift;;
    --gdb-attach=no)        vgopts="$vgopts $arg"; shift;;
    --gdb-attach=yes)       vgopts="$vgopts $arg"; shift;;
    --demangle=no)          vgopts="$vgopts $arg"; shift;;
    --demangle=yes)         vgopts="$vgopts $arg"; shift;;
    --num-callers=*)        vgopts="$vgopts $arg"; shift;;
    --partial-loads-ok=no)  vgopts="$vgopts $arg"; shift;;
    --partial-loads-ok=yes) vgopts="$vgopts $arg"; shift;;
    --leak-check=no)        vgopts="$vgopts $arg"; shift;;
    --leak-check=yes)       vgopts="$vgopts $arg"; shift;;
    --show-reachable=no)    vgopts="$vgopts $arg"; shift;;
    --show-reachable=yes)   vgopts="$vgopts $arg"; shift;;
    --leak-resolution=low)  vgopts="$vgopts $arg"; shift;;
    --leak-resolution=med)  vgopts="$vgopts $arg"; shift;;
    --leak-resolution=high) vgopts="$vgopts $arg"; shift;;
    --sloppy-malloc=no)     vgopts="$vgopts $arg"; shift;;
    --sloppy-malloc=yes)    vgopts="$vgopts $arg"; shift;;
    --trace-children=no)    vgopts="$vgopts $arg"; shift;;
    --trace-children=yes)   vgopts="$vgopts $arg"; shift;;
    --workaround-gcc296-bugs=no)    vgopts="$vgopts $arg"; shift;;
    --workaround-gcc296-bugs=yes)   vgopts="$vgopts $arg"; shift;;
    --freelist-vol=*)       vgopts="$vgopts $arg"; shift;;
    --suppressions=*)       vgopts="$vgopts $arg"; shift;;
    --cachesim=yes)         vgopts="$vgopts $arg"; shift;;
    --cachesim=no)          vgopts="$vgopts $arg"; shift;;
#   options for debugging Valgrind
    --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;;
    --smc-check=none)       vgopts="$vgopts $arg"; shift;;
    --smc-check=some)       vgopts="$vgopts $arg"; shift;;
    --smc-check=all)        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 "valgrind-$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 "    --gdb-attach=no|yes       start GDB when errors detected? [no]"
   echo "    --demangle=no|yes         automatically demangle C++ names? [yes]"
   echo "    --num-callers=<number>    show <num> callers in stack traces [4]"
   echo "    --partial-loads-ok=no|yes too hard to explain here; see manual [yes]"
   echo "    --leak-check=no|yes       search for memory leaks at exit? [no]"
   echo "    --leak-resolution=low|med|high"
   echo "                              amount of bt merging in leak check [low]"
   echo "    --show-reachable=no|yes   show reachable blocks in leak check? [no]"
   echo "    --sloppy-malloc=no|yes    round malloc sizes to next word? [no]"
   echo "    --trace-children=no|yes   Valgrind-ise child processes? [no]"
   echo "    --logfile-fd=<number>     file descriptor for messages [2=stderr]"
   echo "    --freelist-vol=<number>   volume of freed blocks queue [1000000]"
   echo "    --workaround-gcc296-bugs=no|yes  self explanatory [no]"
   echo "    --suppressions=<filename> suppress errors described in"
   echo "                              suppressions file <filename>"
   echo "    --check-addrVs=no|yes     experimental lighterweight checking? [yes]"
   echo "                              yes == Valgrind's original behaviour"
   echo "    --cachesim=no|yes         do cache profiling? [no]"
   echo
   echo "  options for debugging Valgrind 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 "    --smc-check=none|some|all check writes for s-m-c? [some]"
   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 \$VALGRIND_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


VG_ARGS="$VALGRIND_OPTS $vgsupp $vgopts"
export VG_ARGS
LD_LIBRARY_PATH=$VALGRIND:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
LD_PRELOAD=valgrind.so:$LD_PRELOAD
export LD_PRELOAD
#LD_DEBUG=files
#LD_DEBUG=symbols
#export LD_DEBUG
exec "$@"