From: Eugene Syromyatnikov Date: Fri, 31 Aug 2018 14:04:16 +0000 (+0200) Subject: tests: check stack unwinding for signals X-Git-Tag: v4.25~21 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=750cdcba9c13cadba82fc9a121f1e1c6b03650b8;p=strace tests: check stack unwinding for signals * tests/stack-fcall-3.c: Include . (f3): Call getpid or kill depending on the argument, store getpid result. * tests/stack-fcall.c (main): Remove arguments, call f0(0) and f0(1). * tests/strace-k-demangle.expected: Update expected output. * tests/strace-k.expected: Likewise. * tests/strace-k.test: Rewrite pattern matching code. Co-Authored-by: Dmitry V. Levin --- diff --git a/tests/stack-fcall-3.c b/tests/stack-fcall-3.c index 98726d8f..d2abe610 100644 --- a/tests/stack-fcall-3.c +++ b/tests/stack-fcall-3.c @@ -1,7 +1,18 @@ +#include #include + #include "stack-fcall.h" int f3(int i) { - return getpid() + i; + static int pid; + + switch (i) { + case 1: + return kill(pid, SIGURG); + + default: + return (pid = getpid()) + i; + } + } diff --git a/tests/stack-fcall.c b/tests/stack-fcall.c index e0ec3b1a..cfa904ca 100644 --- a/tests/stack-fcall.c +++ b/tests/stack-fcall.c @@ -1,7 +1,8 @@ #include "stack-fcall.h" -int main(int argc, char **argv) +int main(void) { - f0(argc); + f0(0); + f0(1); return 0; } diff --git a/tests/strace-k-demangle.expected b/tests/strace-k-demangle.expected index e42e78fc..54c6f50c 100644 --- a/tests/strace-k-demangle.expected +++ b/tests/strace-k-demangle.expected @@ -1 +1,2 @@ -(__kernel_vsyscall )?(__)?getpid ns::f3\(int\) ns::f2\(int\) ns::f1\(int\) ns::f0\(int\) main +^getpid .*(__kernel_vsyscall )?(__)?getpid ns::f3\(int\) ns::f2\(int\) ns::f1\(int\) ns::f0\(int\) main +^SIGURG .*(__kernel_vsyscall )?(__)?kill ns::f3\(int\) ns::f2\(int\) ns::f1\(int\) ns::f0\(int\) main diff --git a/tests/strace-k.expected b/tests/strace-k.expected index 840d648f..e83ac955 100644 --- a/tests/strace-k.expected +++ b/tests/strace-k.expected @@ -1 +1,2 @@ -(__kernel_vsyscall )?(__)?getpid f3 f2 f1 f0 main +^getpid .*(__kernel_vsyscaln )?(__)?getpid f3 f2 f1 f0 main +^SIGURG .*(__kernel_vsyscaln )?(__)?kill f3 f2 f1 f0 main diff --git a/tests/strace-k.test b/tests/strace-k.test index fb1e2b3e..50c431ad 100755 --- a/tests/strace-k.test +++ b/tests/strace-k.test @@ -43,13 +43,38 @@ run_prog "${test_prog=../stack-fcall}" run_strace -e getpid -k $args expected="$srcdir/$NAME.expected" -sed -r -n '1,/\(main\+0x[a-f0-9]+\) .*/ s/^[^(]+\(([^+]+)\+0x[a-f0-9]+\) .*/\1/p' "$LOG" | - tr '\n' ' ' |sed 's/ $//' > "$OUT" +awk ' +/^[^ ]/ { + if (out != "") + print out + + syscall = gensub(/^([[:alnum:]_]+)\(.*/, "\\1", 1) + signal = gensub(/^--- ([A-Z]+) .*/, "\\1", 1) + + if (syscall != $0) { + out = syscall + stop = 0 + } else if (signal != $0) { + out = signal + stop = 0 + } else { + out = "" + } +} + +/^ >[^(]+\(([^+]+)\+0x[a-f0-9]+\) / && !stop { + sym = gensub(/^ >[^(]+\(([^+]+)\+0x[a-f0-9]+\) .*$/, "\\1", 1) + out = out " " sym + if (sym == "main") + stop = 1 +}' "$LOG" > "$OUT" LC_ALL=C grep -E -x -f "$expected" < "$OUT" > /dev/null || { cat >&2 <<__EOF__ -Failed pattern of expected output: $(cat "$expected") -Actual output: $(cat "$OUT") +Failed pattern of expected output: +$(cat "$expected") +Actual output: +$(cat "$OUT") __EOF__ pattern=