| #! /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 'invoker not implemented' > /dev/null |
| then |
| rm -f gdbserver_tests/vgdb.invoker |
| else |
| touch gdbserver_tests/vgdb.invoker |
| fi |
| |
| # cleanup the possibly big garbage previously collected output |
| rm -f gdbserver_tests/garbage.filtered.out |