From: Eugene Syromyatnikov Date: Sun, 20 May 2018 01:14:08 +0000 (+0200) Subject: tests: add basic checks for personality designation support X-Git-Tag: v4.23~12 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=be8985d45501225e84a33f71aa14b0341c503671;p=strace 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. --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 5814d87f..34b08a9f 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 fcee324e..62d5e783 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 00000000..05ea7771 --- /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 00000000..e69de29b diff --git a/tests/trace_personality_32.in b/tests/trace_personality_32.in new file mode 100644 index 00000000..9da47c1a --- /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 00000000..9da47c1a --- /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 00000000..864de290 --- /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 00000000..864de290 --- /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 00000000..864de290 --- /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 00000000..9da47c1a --- /dev/null +++ b/tests/trace_personality_x32.in @@ -0,0 +1 @@ +getcwd -a18