]> granicus.if.org Git - strace/commitdiff
tests: add basic checks for personality designation support
authorEugene Syromyatnikov <evgsyr@gmail.com>
Sun, 20 May 2018 01:14:08 +0000 (03:14 +0200)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 13 Jun 2018 15:05:09 +0000 (15:05 +0000)
* tests/qualify_personality.sh: New file.
* tests/qualify_personality_empty.in: Likewise.
* tests/trace_personality_32.in: Likewise.
* tests/trace_personality_64.in: Likewise.
* tests/trace_personality_regex_32.in: Likewise.
* tests/trace_personality_regex_64.in: Likewise.
* tests/trace_personality_regex_x32.in: Likewise.
* tests/trace_personality_x32.in: Likewise.
* tests/Makefile.am (EXTRA_DIST): Add them.
* tests/gen_tests.in (trace_personality_32, trace_personality_64,
trace_personality_x32, trace_personality_regex_32,
trace_personality_regex_64, trace_personality_regex_x32): New tests.

tests/Makefile.am
tests/gen_tests.in
tests/qualify_personality.sh [new file with mode: 0644]
tests/qualify_personality_empty.in [new file with mode: 0644]
tests/trace_personality_32.in [new file with mode: 0644]
tests/trace_personality_64.in [new file with mode: 0644]
tests/trace_personality_regex_32.in [new file with mode: 0755]
tests/trace_personality_regex_64.in [new file with mode: 0755]
tests/trace_personality_regex_x32.in [new file with mode: 0755]
tests/trace_personality_x32.in [new file with mode: 0644]

index 5814d87f19877279a3dd97fcd9b9cc0d753e7b0e..34b08a9f78f78120e9e16abe4f70bea029ad4360 100644 (file)
@@ -399,6 +399,8 @@ EXTRA_DIST = \
        qual_fault-exit_group.expected \
        qual_inject-error-signal.expected \
        qual_inject-signal.expected \
+       qualify_personality.sh \
+       qualify_personality_empty.in \
        quotactl.h \
        regex.in \
        rt_sigaction.awk \
@@ -427,6 +429,12 @@ EXTRA_DIST = \
        trace_fstat.in \
        trace_fstatfs.in \
        trace_lstat.in \
+       trace_personality_32.in \
+       trace_personality_64.in \
+       trace_personality_x32.in \
+       trace_personality_regex_32.in \
+       trace_personality_regex_64.in \
+       trace_personality_regex_x32.in \
        trace_question.in \
        trace_stat.in \
        trace_stat_like.in \
index fcee324ed587ecd002aa86e5c94e304e123b4799..62d5e783fae2bc97cd811b1d75a621fb52b45b94 100644 (file)
@@ -453,6 +453,12 @@ times-fail -a12 -e trace=times
 trace_fstat    test_trace_expr '' -e%fstat -v -P stat.sample -P /dev/full
 trace_fstatfs  test_trace_expr '' -e%fstatfs
 trace_lstat    test_trace_expr '' -e%lstat -v -P stat.sample -P /dev/full
+trace_personality_32   +qualify_personality.sh 32 'getcwd' 'fsync-y'
+trace_personality_64   +qualify_personality.sh 64 'getcwd' 'fsync-y'
+trace_personality_x32  +qualify_personality.sh x32 'getcwd' 'fsync-y'
+trace_personality_regex_32     +qualify_personality.sh 32 '/clock.*' 'times|fcntl.*'
+trace_personality_regex_64     +qualify_personality.sh 64 '/clock.*' 'times|fcntl.*'
+trace_personality_regex_x32    +qualify_personality.sh x32 '/clock.*' 'times|fcntl.*'
 trace_question test_trace_expr '' -e?osf_utimes,?/^pkey_.*
 trace_stat     test_trace_expr '' -e%stat -v -P stat.sample -P /dev/full
 trace_stat_like        test_trace_expr '' -e%%stat -v -P stat.sample -P /dev/full
diff --git a/tests/qualify_personality.sh b/tests/qualify_personality.sh
new file mode 100644 (file)
index 0000000..05ea777
--- /dev/null
@@ -0,0 +1,69 @@
+#! /bin/sh -efu
+
+# Common code for per-personality qualification tests
+
+. "${srcdir=.}/init.sh"
+
+[ 2 -le "$#" ] ||
+       fail_ 'No personality designation ("64", "32", "x32") specified'
+
+pers="$1"
+shift
+trace_expr="$1"
+shift
+skip="${1-}"
+
+case "$STRACE_NATIVE_ARCH" in
+x86_64)
+       supported_pers='64 32 x32'
+       ;;
+x32)
+       supported_pers='x32 32'
+       ;;
+aarch64|powerpc64|riscv|s390x|sparc64|tile)
+       supported_pers='64 32'
+       ;;
+*)
+       supported_pers="$(($SIZEOF_LONG * 8))"
+       ;;
+esac
+
+# Detect current personality designation
+if [ "x$STRACE_NATIVE_ARCH" = "x$STRACE_ARCH" ]; then
+       case "$STRACE_NATIVE_ARCH" in
+       x32)
+               cur_pers=x32
+               ;;
+       *)
+               cur_pers="$(($SIZEOF_LONG * 8))"
+               ;;
+       esac
+else
+       if [ "x$SIZEOF_KERNEL_LONG_T" = "x$SIZEOF_LONG" ]; then
+               [ 4 -eq "$SIZEOF_LONG" ] ||
+                       fail_ "sizeof(long) = $SIZEOF_LONG != 4"
+               cur_pers=32
+       else
+               [ 8 -eq "$SIZEOF_KERNEL_LONG_T" ] ||
+                       fail_ "sizeof(kernel_long_t) = $SIZEOF_KERNEL_LONG_T != 8"
+               [ 4 -eq "$SIZEOF_LONG" ] ||
+                       fail_ "sizeof(long) = $SIZEOF_LONG != 4"
+               cur_pers=x32
+       fi
+fi
+
+pers_found=0
+set -- $supported_pers
+for i; do
+       [ "x$pers" != "x$i" ] || pers_found=1
+done
+
+[ "$pers_found" = 1 ] ||
+       skip_ "Personality '$pers' is not supported on architecture" \
+             "'$STRACE_NATIVE_ARCH' (supported personalities: $supported_pers)"
+
+# If tested personality is not equivalent to current personality, reset $NAME,
+# so "$NAME.in", which is used by test_trace_expr, points to an empty file.
+[ "x$pers" = "x$cur_pers" ] || NAME=qualify_personality_empty
+
+test_trace_expr "$skip" -e trace="${trace_expr}@${pers}"
diff --git a/tests/qualify_personality_empty.in b/tests/qualify_personality_empty.in
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/trace_personality_32.in b/tests/trace_personality_32.in
new file mode 100644 (file)
index 0000000..9da47c1
--- /dev/null
@@ -0,0 +1 @@
+getcwd -a18
diff --git a/tests/trace_personality_64.in b/tests/trace_personality_64.in
new file mode 100644 (file)
index 0000000..9da47c1
--- /dev/null
@@ -0,0 +1 @@
+getcwd -a18
diff --git a/tests/trace_personality_regex_32.in b/tests/trace_personality_regex_32.in
new file mode 100755 (executable)
index 0000000..864de29
--- /dev/null
@@ -0,0 +1,3 @@
+clock_adjtime  -a37
+clock_nanosleep
+clock_xettime  -a36
diff --git a/tests/trace_personality_regex_64.in b/tests/trace_personality_regex_64.in
new file mode 100755 (executable)
index 0000000..864de29
--- /dev/null
@@ -0,0 +1,3 @@
+clock_adjtime  -a37
+clock_nanosleep
+clock_xettime  -a36
diff --git a/tests/trace_personality_regex_x32.in b/tests/trace_personality_regex_x32.in
new file mode 100755 (executable)
index 0000000..864de29
--- /dev/null
@@ -0,0 +1,3 @@
+clock_adjtime  -a37
+clock_nanosleep
+clock_xettime  -a36
diff --git a/tests/trace_personality_x32.in b/tests/trace_personality_x32.in
new file mode 100644 (file)
index 0000000..9da47c1
--- /dev/null
@@ -0,0 +1 @@
+getcwd -a18