]> granicus.if.org Git - strace/commitdiff
tests: check stack unwinding for signals
authorEugene Syromyatnikov <evgsyr@gmail.com>
Fri, 31 Aug 2018 14:04:16 +0000 (16:04 +0200)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 3 Sep 2018 12:05:48 +0000 (12:05 +0000)
* tests/stack-fcall-3.c: Include <signal.h>.
(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 <ldv@altlinux.org>
tests/stack-fcall-3.c
tests/stack-fcall.c
tests/strace-k-demangle.expected
tests/strace-k.expected
tests/strace-k.test

index 98726d8f3f22acfee4bd1de3cfbde130cbce5a1f..d2abe610500c17db7def49c656832e22186928b2 100644 (file)
@@ -1,7 +1,18 @@
+#include <signal.h>
 #include <unistd.h>
+
 #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;
+       }
+
 }
index e0ec3b1ae3b62824f75d2976654785e31a558138..cfa904ca6f1782f59c5342b27a432a9687729158 100644 (file)
@@ -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;
 }
index e42e78fc81eb59b6737bf83efa169c4ac631730e..54c6f50c4e242fd00c22da46ec4b35e4c0e7cfe9 100644 (file)
@@ -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
index 840d648f990d20efcb582fb0a354129655c69709..e83ac955db34fa0077309e29fb387f228ebf15ac 100644 (file)
@@ -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
index fb1e2b3e768dba703b5ef2c17b4496b4ee98c474..50c431ad34db3e473f1957e275734b806d06386e 100755 (executable)
@@ -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=