strace-k.test revision c588b205be19f84f757dec6f2e6ed2a157750f97
10ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong#!/bin/sh
20ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
30ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong# Ensure that strace -k works.
40ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
50ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong. "${srcdir=.}/init.sh"
60ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
70ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong# strace -k is implemented using /proc/$pid/maps
80ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong[ -f /proc/self/maps ] ||
90ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong	framework_skip_ '/proc/self/maps is not available'
100ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
110ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongcheck_prog sed
120ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongcheck_prog tr
130ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
140ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong./stack-fcall ||
150ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong	fail_ 'stack-fcall failed'
160ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
170ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong$STRACE -h | grep '^-k' > /dev/null ||
180ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong	skip_ 'strace -k is not available'
190ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
200ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongargs="-e getpid -k ./stack-fcall"
210ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong$STRACE $args > $LOG 2>&1 || {
220ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong	cat $LOG
230ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong	fail_ "$STRACE $args failed"
240ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong}
250ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
260ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongexpected='getpid f3 f2 f1 f0 main '
270ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongresult=$(sed -n '1,/(main+0x[a-f0-9]\+) .*/ s/^.*(\([^+]\+\)+0x[a-f0-9]\+) .*/\1/p' $LOG |
280ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong	tr '\n' ' ')
290ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
300ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongtest "$result" = "$expected" || {
310ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong	cat $LOG
320ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong	echo "expected: \"$expected\""
330ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong	echo "result: \"$result\""
340ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong	fail_ "unexpected output from $STRACE $args"
350ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong}
360ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong
370ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kongexit 0
380ae28bd5885b5daa526898fcf7c323dc2c3e1963Angus Kong