19682107053968402da7afca7e82e2c6281d05518Masatake YAMATO#!/bin/sh 29682107053968402da7afca7e82e2c6281d05518Masatake YAMATO 39682107053968402da7afca7e82e2c6281d05518Masatake YAMATO# Ensure that strace -k works. 49682107053968402da7afca7e82e2c6281d05518Masatake YAMATO 59682107053968402da7afca7e82e2c6281d05518Masatake YAMATO. "${srcdir=.}/init.sh" 69682107053968402da7afca7e82e2c6281d05518Masatake YAMATO 79682107053968402da7afca7e82e2c6281d05518Masatake YAMATO# strace -k is implemented using /proc/$pid/maps 89682107053968402da7afca7e82e2c6281d05518Masatake YAMATO[ -f /proc/self/maps ] || 99682107053968402da7afca7e82e2c6281d05518Masatake YAMATO framework_skip_ '/proc/self/maps is not available' 109682107053968402da7afca7e82e2c6281d05518Masatake YAMATO 119682107053968402da7afca7e82e2c6281d05518Masatake YAMATOcheck_prog sed 129682107053968402da7afca7e82e2c6281d05518Masatake YAMATOcheck_prog tr 139682107053968402da7afca7e82e2c6281d05518Masatake YAMATO 149682107053968402da7afca7e82e2c6281d05518Masatake YAMATO./stack-fcall || 159682107053968402da7afca7e82e2c6281d05518Masatake YAMATO fail_ 'stack-fcall failed' 169682107053968402da7afca7e82e2c6281d05518Masatake YAMATO 179682107053968402da7afca7e82e2c6281d05518Masatake YAMATO$STRACE -h | grep '^-k' > /dev/null || 189682107053968402da7afca7e82e2c6281d05518Masatake YAMATO skip_ 'strace -k is not available' 199682107053968402da7afca7e82e2c6281d05518Masatake YAMATO 20e4113974893293c82f177fe4195cac0a5b70465aDmitry V. Levinargs="-e getpid -k ./stack-fcall" 219682107053968402da7afca7e82e2c6281d05518Masatake YAMATO$STRACE $args > $LOG 2>&1 || { 229682107053968402da7afca7e82e2c6281d05518Masatake YAMATO cat $LOG 239682107053968402da7afca7e82e2c6281d05518Masatake YAMATO fail_ "$STRACE $args failed" 249682107053968402da7afca7e82e2c6281d05518Masatake YAMATO} 259682107053968402da7afca7e82e2c6281d05518Masatake YAMATO 26c588b205be19f84f757dec6f2e6ed2a157750f97Dmitry V. Levinexpected='getpid f3 f2 f1 f0 main ' 279682107053968402da7afca7e82e2c6281d05518Masatake YAMATOresult=$(sed -n '1,/(main+0x[a-f0-9]\+) .*/ s/^.*(\([^+]\+\)+0x[a-f0-9]\+) .*/\1/p' $LOG | 289682107053968402da7afca7e82e2c6281d05518Masatake YAMATO tr '\n' ' ') 299682107053968402da7afca7e82e2c6281d05518Masatake YAMATO 309682107053968402da7afca7e82e2c6281d05518Masatake YAMATOtest "$result" = "$expected" || { 319682107053968402da7afca7e82e2c6281d05518Masatake YAMATO cat $LOG 329682107053968402da7afca7e82e2c6281d05518Masatake YAMATO echo "expected: \"$expected\"" 339682107053968402da7afca7e82e2c6281d05518Masatake YAMATO echo "result: \"$result\"" 349682107053968402da7afca7e82e2c6281d05518Masatake YAMATO fail_ "unexpected output from $STRACE $args" 359682107053968402da7afca7e82e2c6281d05518Masatake YAMATO} 369682107053968402da7afca7e82e2c6281d05518Masatake YAMATO 379682107053968402da7afca7e82e2c6281d05518Masatake YAMATOexit 0 38