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