Home | History | Annotate | Download | only in tests
      1 #!/bin/sh
      2 
      3 # Ensure that strace -k works.
      4 
      5 . "${srcdir=.}/init.sh"
      6 
      7 # strace -k is implemented using /proc/$pid/maps
      8 [ -f /proc/self/maps ] ||
      9 	framework_skip_ '/proc/self/maps is not available'
     10 
     11 check_prog sed
     12 check_prog tr
     13 
     14 ./stack-fcall ||
     15 	fail_ 'stack-fcall failed'
     16 
     17 $STRACE -h | grep '^-k' > /dev/null ||
     18 	skip_ 'strace -k is not available'
     19 
     20 args="-e getpid -k ./stack-fcall"
     21 $STRACE $args > $LOG 2>&1 || {
     22 	cat $LOG
     23 	fail_ "$STRACE $args failed"
     24 }
     25 
     26 expected='getpid f3 f2 f1 f0 main '
     27 result=$(sed -n '1,/(main+0x[a-f0-9]\+) .*/ s/^.*(\([^+]\+\)+0x[a-f0-9]\+) .*/\1/p' $LOG |
     28 	tr '\n' ' ')
     29 
     30 test "$result" = "$expected" || {
     31 	cat $LOG
     32 	echo "expected: \"$expected\""
     33 	echo "result: \"$result\""
     34 	fail_ "unexpected output from $STRACE $args"
     35 }
     36 
     37 exit 0
     38