File: make_local_links

package info (click to toggle)
valgrind 1%3A3.10.0-4~bpo7%2B1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy-backports
  • size: 97,940 kB
  • sloc: ansic: 589,429; xml: 21,096; exp: 8,751; cpp: 7,366; asm: 6,526; perl: 5,656; sh: 5,334; makefile: 4,946; haskell: 195
file content (110 lines) | stat: -rwxr-xr-x 3,398 bytes parent folder | download | duplicates (2)
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
#! /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