From edf0518768523edc16492029fa9fece9700c022d Mon Sep 17 00:00:00 2001 From: Eugene Syromyatnikov Date: Wed, 10 Aug 2022 13:14:27 +0200 Subject: tests: add PR_SVE_[GS]ET_VL checks Re-purpose prct-sme.c for that, since these commands identical to PR_SME_[GS]ET_VL so far, save for s/SME/SVE/ in identifier names. Retain the original prct-sve.c to retain test coverage diversity. * tests/.gitignore: Add prctl-sve-Xabbrev, prctl-sve-Xraw, prctl-sve-Xverbose, prctl-sve-success, prctl-sve-success-Xabbrev, prctl-sve-success-Xraw, and prctl-sve-success-Xverbose. * tests/Makefile.am (check_PROGRAMS): Add prctl-sve-success, prctl-sve-success-Xabbrev, prctl-sve-success-Xraw, and prctl-sve-success-Xverbose. * tests/gen_tests.in (prctl-sve-Xabbrev, prctl-sve-Xraw, prctl-sve-Xverbose, prctl-sve-success, prctl-sve-success-Xabbrev, prctl-sve-success-Xraw, prctl-sve-success-Xverbose): New tests. * tests/prctl-sme.c [!EXT] (EXT): New macro. (EXT_STR, GLUE_, GLUE, _): New macros. (print_sme_vl_arg, main): Use _ and EXT_STR macros. * tests/prctl-sve-Xabbrev.c: New file. * tests/prctl-sve-Xraw.c: Likewise. * tests/prctl-sve-Xverbose.c: Likewise. * tests/prctl-sve-success-Xabbrev.c: Likewise. * tests/prctl-sve-success-Xraw.c: Likewise. * tests/prctl-sve-success-Xverbose.c: Likewise. * tests/prctl-sve-success.c: Likewise. * tests/pure_executables.list: Add prctl-sve-Xabbrev, prctl-sve-Xraw, and prctl-sve-Xverbose. --- tests/.gitignore | 7 ++++++ tests/Makefile.am | 4 ++++ tests/gen_tests.in | 7 ++++++ tests/prctl-sme.c | 44 ++++++++++++++++++++++++-------------- tests/prctl-sve-Xabbrev.c | 4 ++++ tests/prctl-sve-Xraw.c | 4 ++++ tests/prctl-sve-Xverbose.c | 4 ++++ tests/prctl-sve-success-Xabbrev.c | 2 ++ tests/prctl-sve-success-Xraw.c | 2 ++ tests/prctl-sve-success-Xverbose.c | 2 ++ tests/prctl-sve-success.c | 4 ++++ tests/pure_executables.list | 3 +++ 12 files changed, 71 insertions(+), 16 deletions(-) create mode 100644 tests/prctl-sve-Xabbrev.c create mode 100644 tests/prctl-sve-Xraw.c create mode 100644 tests/prctl-sve-Xverbose.c create mode 100644 tests/prctl-sve-success-Xabbrev.c create mode 100644 tests/prctl-sve-success-Xraw.c create mode 100644 tests/prctl-sve-success-Xverbose.c create mode 100644 tests/prctl-sve-success.c diff --git a/tests/.gitignore b/tests/.gitignore index 361f74655..62c0844be 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -749,6 +749,13 @@ prctl-sme-success-Xraw prctl-sme-success-Xverbose prctl-spec-inject prctl-sve +prctl-sve-Xabbrev +prctl-sve-Xraw +prctl-sve-Xverbose +prctl-sve-success +prctl-sve-success-Xabbrev +prctl-sve-success-Xraw +prctl-sve-success-Xverbose prctl-syscall-user-dispatch prctl-tagged-addr prctl-tagged-addr-Xabbrev diff --git a/tests/Makefile.am b/tests/Makefile.am index 7d08c0523..d61419974 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -310,6 +310,10 @@ check_PROGRAMS = $(PURE_EXECUTABLES) \ prctl-sme-success-Xraw \ prctl-sme-success-Xverbose \ prctl-spec-inject \ + prctl-sve-success \ + prctl-sve-success-Xabbrev \ + prctl-sve-success-Xraw \ + prctl-sve-success-Xverbose \ prctl-tagged-addr-success \ prctl-tagged-addr-success-Xabbrev \ prctl-tagged-addr-success-Xraw \ diff --git a/tests/gen_tests.in b/tests/gen_tests.in index 4bb63227f..5a7074dd8 100644 --- a/tests/gen_tests.in +++ b/tests/gen_tests.in @@ -748,6 +748,13 @@ prctl-sme-success-Xraw +prctl-success.sh PRCTL_INJECT_RETVALS="0 0xdead 0x10000 prctl-sme-success-Xverbose +prctl-success.sh PRCTL_INJECT_RETVALS="0 0xdead 0x10000 0x4ea57 0x20000 0xba90000 0xdec0ded" -a32 -Xverbose prctl-spec-inject +prctl-success.sh PRCTL_INJECT_RETVALS="error=ENOTTY 0 1 3 8 16 32 42" -a50 prctl-sve +prctl.sh -a21 +prctl-sve-Xabbrev +prctl.sh -a21 -Xabbrev +prctl-sve-Xraw +prctl.sh -a12 -Xraw +prctl-sve-Xverbose +prctl.sh -a32 -Xverbose +prctl-sve-success +prctl-success.sh PRCTL_INJECT_RETVALS="0 0xdead 0x10000 0x4ea57 0x20000 0xba9000 0xdec0ded" -a21 +prctl-sve-success-Xabbrev +prctl-success.sh PRCTL_INJECT_RETVALS="0 0xdead 0x10000 0x4ea57 0x20000 0xba90000 0xdec0ded" -a21 -Xabbrev +prctl-sve-success-Xraw +prctl-success.sh PRCTL_INJECT_RETVALS="0 0xdead 0x10000 0x4ea57 0x20000 0xba90000 0xdec0ded" -a12 -Xraw +prctl-sve-success-Xverbose +prctl-success.sh PRCTL_INJECT_RETVALS="0 0xdead 0x10000 0x4ea57 0x20000 0xba90000 0xdec0ded" -a32 -Xverbose prctl-syscall-user-dispatch +prctl.sh -a68 prctl-tagged-addr +prctl.sh -a43 prctl-tagged-addr-Xabbrev +prctl.sh -Xabbrev -a43 diff --git a/tests/prctl-sme.c b/tests/prctl-sme.c index f01749e1a..a2fa29082 100644 --- a/tests/prctl-sme.c +++ b/tests/prctl-sme.c @@ -20,32 +20,42 @@ # define INJ_STR "" #endif +#ifndef EXT +# define EXT SME +#endif + +#define EXT_STR STRINGIFY_VAL(EXT) +#define GLUE_(a_, b_, c_) a_ ## b_ ## c_ +#define GLUE(a_, b_, c_) GLUE_(a_, b_, c_) +#define _(pfx_, sfx_) GLUE(pfx_, EXT, sfx_) + #if !XLAT_RAW static void print_sme_vl_arg(kernel_ulong_t arg) { - kernel_ulong_t flags = arg & ~PR_SME_VL_LEN_MASK; + kernel_ulong_t flags = arg & ~_(PR_, _VL_LEN_MASK); if (arg < 0x10000) return; printf(" ("); - if (flags & PR_SME_SET_VL_ONEXEC) - printf("PR_SME_SET_VL_ONEXEC"); - if (flags & PR_SME_VL_INHERIT) { - printf("%sPR_SME_VL_INHERIT", - flags & PR_SME_SET_VL_ONEXEC ? "|" : ""); + if (flags & _(PR_, _SET_VL_ONEXEC)) + printf("PR_" EXT_STR "_SET_VL_ONEXEC"); + if (flags & _(PR_, _VL_INHERIT)) { + printf("%sPR_" EXT_STR "_VL_INHERIT", + flags & _(PR_, _SET_VL_ONEXEC) ? "|" : ""); } - kernel_ulong_t leftover = flags & ~(PR_SME_SET_VL_ONEXEC|PR_SME_VL_INHERIT); + kernel_ulong_t leftover = + flags & ~(_(PR_, _SET_VL_ONEXEC)|_(PR_, _VL_INHERIT)); if (leftover) { printf("%s%#llx", leftover == flags ? "" : "|", (unsigned long long) leftover); } - kernel_ulong_t lens = arg & PR_SME_VL_LEN_MASK; + kernel_ulong_t lens = arg & _(PR_, _VL_LEN_MASK); printf("%s%#llx", flags ? "|" : "", (unsigned long long) lens); printf(")"); @@ -94,10 +104,10 @@ main(int argc, char *argv[]) { ARG_STR(0) }, { ARG_STR(0xdead) }, { ARG_XLAT_KNOWN(0x10000, "0x10000|0") }, - { ARG_XLAT_KNOWN(0x2ea57, "PR_SME_VL_INHERIT|0xea57") }, - { ARG_XLAT_KNOWN(0x40000, "PR_SME_SET_VL_ONEXEC|0") }, - { ARG_XLAT_KNOWN(0xfacefeed, "PR_SME_SET_VL_ONEXEC" - "|PR_SME_VL_INHERIT" + { ARG_XLAT_KNOWN(0x2ea57, "PR_" EXT_STR "_VL_INHERIT|0xea57") }, + { ARG_XLAT_KNOWN(0x40000, "PR_" EXT_STR "_SET_VL_ONEXEC|0") }, + { ARG_XLAT_KNOWN(0xfacefeed, "PR_" EXT_STR "_SET_VL_ONEXEC" + "|PR_" EXT_STR "_VL_INHERIT" "|0xfac80000|0xfeed") }, { ARG_XLAT_KNOWN(0xbad00000, "0xbad00000|0") }, { ARG_XLAT_KNOWN(0xde90ded, "0xde90000|0xded") }, @@ -111,9 +121,10 @@ main(int argc, char *argv[]) }; for (i = 0; i < ARRAY_SIZE(args); i++) { - rc = syscall(__NR_prctl, PR_SME_SET_VL, args[i].val, 1, 2, 3); + rc = syscall(__NR_prctl, _(PR_, _SET_VL), args[i].val, 1, 2, 3); errstr = sprintrc(rc); - printf("prctl(" XLAT_KNOWN(0x3f, "PR_SME_SET_VL") ", %s) = ", + printf("prctl(" XLAT_FMT ", %s) = ", + XLAT_SEL(_(PR_, _SET_VL), "PR_" EXT_STR "_SET_VL"), args[i].str); if (rc >= 0) { printf("%#lx", rc); @@ -126,9 +137,10 @@ main(int argc, char *argv[]) } } - rc = syscall(__NR_prctl, PR_SME_GET_VL, 1, 2, 3, 4); + rc = syscall(__NR_prctl, _(PR_, _GET_VL), 1, 2, 3, 4); errstr = sprintrc(rc); - printf("prctl(" XLAT_KNOWN(0x40, "PR_SME_GET_VL") ") = "); + printf("prctl(" XLAT_FMT ") = ", + XLAT_SEL(_(PR_, _GET_VL), "PR_" EXT_STR "_GET_VL")); if (rc >= 0) { printf("%#lx", rc); #if !XLAT_RAW diff --git a/tests/prctl-sve-Xabbrev.c b/tests/prctl-sve-Xabbrev.c new file mode 100644 index 000000000..f16989532 --- /dev/null +++ b/tests/prctl-sve-Xabbrev.c @@ -0,0 +1,4 @@ +#define XLAT_ABBREV 1 +/* NB: prctl-sme.c supports both SVE and SME */ +#define EXT SVE +#include "prctl-sme.c" diff --git a/tests/prctl-sve-Xraw.c b/tests/prctl-sve-Xraw.c new file mode 100644 index 000000000..25c98723a --- /dev/null +++ b/tests/prctl-sve-Xraw.c @@ -0,0 +1,4 @@ +#define XLAT_RAW 1 +/* NB: prctl-sme.c supports both SVE and SME */ +#define EXT SVE +#include "prctl-sme.c" diff --git a/tests/prctl-sve-Xverbose.c b/tests/prctl-sve-Xverbose.c new file mode 100644 index 000000000..ca683675c --- /dev/null +++ b/tests/prctl-sve-Xverbose.c @@ -0,0 +1,4 @@ +#define XLAT_VERBOSE 1 +/* NB: prctl-sme.c supports both SVE and SME */ +#define EXT SVE +#include "prctl-sme.c" diff --git a/tests/prctl-sve-success-Xabbrev.c b/tests/prctl-sve-success-Xabbrev.c new file mode 100644 index 000000000..472f5be65 --- /dev/null +++ b/tests/prctl-sve-success-Xabbrev.c @@ -0,0 +1,2 @@ +#define XLAT_ABBREV 1 +#include "prctl-sve-success.c" diff --git a/tests/prctl-sve-success-Xraw.c b/tests/prctl-sve-success-Xraw.c new file mode 100644 index 000000000..407551c44 --- /dev/null +++ b/tests/prctl-sve-success-Xraw.c @@ -0,0 +1,2 @@ +#define XLAT_RAW 1 +#include "prctl-sve-success.c" diff --git a/tests/prctl-sve-success-Xverbose.c b/tests/prctl-sve-success-Xverbose.c new file mode 100644 index 000000000..4c79c5475 --- /dev/null +++ b/tests/prctl-sve-success-Xverbose.c @@ -0,0 +1,2 @@ +#define XLAT_VERBOSE 1 +#include "prctl-sve-success.c" diff --git a/tests/prctl-sve-success.c b/tests/prctl-sve-success.c new file mode 100644 index 000000000..cb2fa8fda --- /dev/null +++ b/tests/prctl-sve-success.c @@ -0,0 +1,4 @@ +#define INJECT_RETVAL +/* NB: prctl-sme.c supports both SVE and SME */ +#define EXT SVE +#include "prctl-sme.c" diff --git a/tests/pure_executables.list b/tests/pure_executables.list index 471a97e1e..e794602dc 100755 --- a/tests/pure_executables.list +++ b/tests/pure_executables.list @@ -529,6 +529,9 @@ prctl-sme-Xabbrev prctl-sme-Xraw prctl-sme-Xverbose prctl-sve +prctl-sve-Xabbrev +prctl-sve-Xraw +prctl-sve-Xverbose prctl-syscall-user-dispatch prctl-tagged-addr prctl-tagged-addr-Xabbrev -- cgit v1.2.1