summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Syromyatnikov <evgsyr@gmail.com>2018-05-20 03:14:08 +0200
committerDmitry V. Levin <ldv@altlinux.org>2018-06-13 15:05:09 +0000
commitbe8985d45501225e84a33f71aa14b0341c503671 (patch)
tree41e304e8a9445df09140df431feac8991d6cb717
parent380d205bb8faba4553f67a0e0a5d1fb094b8c33a (diff)
downloadstrace-be8985d45501225e84a33f71aa14b0341c503671.tar.gz
tests: add basic checks for personality designation support
* 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.
-rw-r--r--tests/Makefile.am8
-rw-r--r--tests/gen_tests.in6
-rw-r--r--tests/qualify_personality.sh69
-rw-r--r--tests/qualify_personality_empty.in0
-rw-r--r--tests/trace_personality_32.in1
-rw-r--r--tests/trace_personality_64.in1
-rwxr-xr-xtests/trace_personality_regex_32.in3
-rwxr-xr-xtests/trace_personality_regex_64.in3
-rwxr-xr-xtests/trace_personality_regex_x32.in3
-rw-r--r--tests/trace_personality_x32.in1
10 files changed, 95 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 5814d87f1..34b08a9f7 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -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 \
diff --git a/tests/gen_tests.in b/tests/gen_tests.in
index fcee324ed..62d5e783f 100644
--- a/tests/gen_tests.in
+++ b/tests/gen_tests.in
@@ -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
index 000000000..05ea77715
--- /dev/null
+++ b/tests/qualify_personality.sh
@@ -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
index 000000000..e69de29bb
--- /dev/null
+++ b/tests/qualify_personality_empty.in
diff --git a/tests/trace_personality_32.in b/tests/trace_personality_32.in
new file mode 100644
index 000000000..9da47c1a3
--- /dev/null
+++ b/tests/trace_personality_32.in
@@ -0,0 +1 @@
+getcwd -a18
diff --git a/tests/trace_personality_64.in b/tests/trace_personality_64.in
new file mode 100644
index 000000000..9da47c1a3
--- /dev/null
+++ b/tests/trace_personality_64.in
@@ -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
index 000000000..864de290b
--- /dev/null
+++ b/tests/trace_personality_regex_32.in
@@ -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
index 000000000..864de290b
--- /dev/null
+++ b/tests/trace_personality_regex_64.in
@@ -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
index 000000000..864de290b
--- /dev/null
+++ b/tests/trace_personality_regex_x32.in
@@ -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
index 000000000..9da47c1a3
--- /dev/null
+++ b/tests/trace_personality_x32.in
@@ -0,0 +1 @@
+getcwd -a18