#! /bin/sh # (must be called from the valgrind top source dir). # # Make local links in the gdbserver_tests directory # so that tests needing gdb can be disabled if # a too old version of gdb is provided or if no gdb is # provided. # # The vgdb link is needed either for gdb tests # or for standalone vgdb tests. # Make sure we're in the correct directory, i.e. the root of the valgrind # source tree. We use the existence of the coregrind directory as evidence # that we're in the right place. if [ ! -d "coregrind" ]; then echo "make_local_links is not invoked from the top-of-tree directory" 1>&2 exit 1 fi # Make sure there is an argument if [ "x$1" = "x" ]; then echo "usage: make_local_links /path/to/gdb" 1>&2 exit 1 fi export GDB="" export GDBVERSIONLINE="" export GDBMAJ="" export GDBMIN="" # $1 = Major.Minor gdb version needed # $2 = marker file to touch (if version ok) or to remove (version not ok) # $3 and following: msg in output check_version() { NEEDED=$1 shift NEEDEDMAJ=$(echo $NEEDED | awk -F\. '{ print $1 }') NEEDEDMIN=$(echo $NEEDED | awk -F\. '{ print $2 }') MARKERFILE=$1 shift if [ \( $GDBMAJ -gt $NEEDEDMAJ \) \ -o \( \( $GDBMAJ -eq $NEEDEDMAJ \) \ -a \( $GDBMIN -ge $NEEDEDMIN \) \) ] then if [ ! -f $MARKERFILE ] then touch $MARKERFILE fi else echo "$@" "suppressed as $GDB version" $GDBVERSIONLINE "is <" $NEEDED rm -f $MARKERFILE fi } if [ -x "$1" ] then GDB=$1 ln -f -s "$GDB" gdbserver_tests/gdb # Try to extract the gdb version major and minor numbers. # We assume these are the first two integers separated by a . GDBVERSIONLINE=`gdbserver_tests/gdb --version | head -n 1` GDBMAJ=`echo $GDBVERSIONLINE | sed -e 's/[^0-9\.]//g' | awk -F\. '{print $1}'` GDBMIN=`echo $GDBVERSIONLINE | sed -e 's/[^0-9\.]//g' | awk -F\. '{print $2}'` # We need at least a 6.5 version to use the Valgrind gdbserver. # However, the gdb tests are only supported/maintained for gdb >= 7 check_version 7.0 gdbserver_tests/gdb "gdbserver gdb tests" # We need at least a 7.1 version to run the 'pic' executable tests # (with 7.0, it fails on many platforms) check_version 7.1 gdbserver_tests/gdb.pic "pic executable tests" # by default, we can run tests needed next/step/... # But on ARM, we need at least 7.1 to run the 'next/step/...' tests. # (gdb 7.0 has bugs in the 'guess next pc' heuristic in thumb mode). if tests/arch_test arm then check_version 7.1 gdbserver_tests/gdb.step "gdbserver next/step/... tests ARM" else check_version 7.0 gdbserver_tests/gdb.step "gdbserver next/step/... tests" fi # We need at least a 7.2 version for gdb tests using eval command check_version 7.2 gdbserver_tests/gdb.eval "gdbserver eval tests" else echo "gdbserver gdb tests suppressed as $1 is not executable" fi ln -f -s ../coregrind/vgdb gdbserver_tests/vgdb # if ptrace not implemented in vgdb or OS restricts the initial attach, # some tests would block for a loooonnnng time. if gdbserver_tests/vgdb --help 2>&1 | grep -e 'ptrace invoker not implemented' \ -e 'kernel restricts ptrace invoker' > /dev/null then rm -f gdbserver_tests/vgdb.ptraceinvoker else touch gdbserver_tests/vgdb.ptraceinvoker fi # cleanup the possibly big garbage previously collected output rm -f gdbserver_tests/garbage.filtered.out