diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 96fcb3e25..ab4494671 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -1 +1 @@ -SUBDIRS = python +SUBDIRS = debug python diff --git a/scripts/debug/.cvsignore b/scripts/debug/.cvsignore new file mode 100644 index 000000000..c2f6e13d9 --- /dev/null +++ b/scripts/debug/.cvsignore @@ -0,0 +1,2 @@ +fgfs.supp +core* diff --git a/scripts/debug/Makefile.am b/scripts/debug/Makefile.am new file mode 100644 index 000000000..954f6e141 --- /dev/null +++ b/scripts/debug/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = debug-fgfs sample.fgfs.supp diff --git a/scripts/debug/debug-fgfs b/scripts/debug/debug-fgfs new file mode 100755 index 000000000..32c4f3015 --- /dev/null +++ b/scripts/debug/debug-fgfs @@ -0,0 +1,81 @@ +#!/usr/bin/bash +# $Id$ +# +# +# To use this script you need +# - a Linux 2.4 system with libc 2.2.* and at least XFree86 4.1 +# - the valgrind debugger (http://developer.kde.org/~sewardj/) +# - lots of memory (RAM + swap space > 600MB!) and +# - a fast computer =or= a lot of patience. +# +# It is useful (but not required) to compile FlightGear without +# any optimizations (-O0 without -funroll-loops etc.). Otherwise +# the debug messages might not seem to make sense in some cases. +# +# The sample suppression file is designed for a SuSE 7.1 system +# with Linux 2.4.18, XFree86 4.2.0 and a 3dfx card. Don't use it +# as it is, but create your own! You will likely have different +# libraries with different bugs. +# +# If you have problems with valgrind and FlightGear, don't bother +# the valgrind author -- ask on the flightgear-devel list first! +# +# +# +# adapt the following two entries to your needs: +# +fgfs="../FlightGear/src/Main/fgfs" +opt="--disable-game-mode --disable-fullscreen --fdm=magic" + + + +gdb="--gdb-attach=yes" +cmd= +extra= + +while true; do + case "$1" in + -h|--help) cat <<-EOF + debug [-r] [-g] [-i] [-b] [-c] [-x] [-h] + + -r run fgfs + -g run fgfs with gdb + -i interactive valgrind run (default) + -b valgrind batch run + -c start gdb with most recent core dump + -x add some extra pedantic valgrind parameters + -h show this help screen + EOF + exit 0 + ;; + -r) cmd="$fgfs $opt" ;; + -g) cmd="gdb -x .gdbinit $fgfs" ;; + -i) cmd=""; gdb="" ;; + -b) gdb="" ;; + -x) extra="--single-step=yes --optimise=no --cleanup=no --dump-error=1" ;; + -c) core=$(ls -t core*|head -1) + if test -z $core; then + echo "$0: there's no core file" + exit 1 + fi + cmd="gdb $fgfs $core" + ;; + *) break ;; + esac + shift +done + +if ! test -e "$fgfs"; then + echo "$0: there's no fgfs exectuable $fgfs" + exit 2 +fi + +echo "set args $opt" > .gdbinit + +test -e fgfs.supp || head -14 sample.fgfs.supp > fgfs.supp + +test -z "$cmd" && cmd="nice valgrind $gdb --num-callers=10 --suppressions=fgfs.supp $extra $* $fgfs $opt" + +echo "command: $cmd" +exec $cmd + diff --git a/scripts/debug/sample.fgfs.supp b/scripts/debug/sample.fgfs.supp new file mode 100644 index 000000000..30519190e --- /dev/null +++ b/scripts/debug/sample.fgfs.supp @@ -0,0 +1,91 @@ +# valgrind suppression rules for FlightGear + +# Format of this file is: +# { +# name_of_suppression +# kind: one of Param Value1 Value2 Value4 Value8 +# Cond Free Addr1 Addr2 Addr4 Addr8 +# (if Param: name of system call param, if Free: name of free-ing fn) +# caller0 name, or /name/of/so/file.so +# caller1 name, or ditto +# (optionally: caller2 name) +# (optionally: caller3 name) +# } + +# sample rules for Linux kernel 2.4, glibc 2.2.4, XFree86 4.2.0, 3dfx + +{ + _dlopen_signal_error(Addr1) + Addr1 + fun:_dl_signal_error + fun:_dl_open + fun:dlopen_doit +} + +{ + _dl_signal_error(Addr4) + Addr4 + fun:_dl_signal_error + fun:_dl_open + fun:dlopen_doit +} + +{ + memcpy(Addr1) + Addr1 + fun:memcpy + fun:_dl_signal_error + fun:_dl_open + fun:dlopen_doit +} + +{ + memcpy(Addr4) + Addr4 + fun:memcpy + fun:_dl_signal_error + fun:_dl_open + fun:dlopen_doit +} + +{ + ioctl(generic)/(Param) + Param + ioctl(generic) + fun:__ioctl + fun:driMesaCreateScreen + fun:__driCreateScreen +} + +{ + Mesa/texsubimage2d...(Addr1) + Addr1 + fun:texsubimage2d_*_to_* + fun:convert_texsubimage2d_* + fun:_mesa_convert_texsubimage2d + fun:tdfxDDTexImage2D +} + +{ + Mesa/texsubimage2d...(Addr4) + Addr4 + fun:texsubimage2d_*_to_* + fun:convert_texsubimage2d_* + fun:_mesa_convert_texsubimage2d + fun:tdfxDDTexImage2D +} + +{ + Mesa/texsubimage2d...(Value1) + Value1 + fun:texsubimage2d_*_to_* + fun:convert_texsubimage2d_* + fun:_mesa_convert_texsubimage2d + fun:tdfxDDTexImage2D +} + +{ + known-plib-bug/already_reported(Cond) + Cond + fun:removeEntity__7ssgListUi +}