summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/.gitignore16
-rw-r--r--tests/Makefile.am16
-rw-r--r--tests/gen_tests.in16
-rw-r--r--tests/spu_create-success-P-Xabbrev.c2
-rw-r--r--tests/spu_create-success-P-Xraw.c2
-rw-r--r--tests/spu_create-success-P-Xverbose.c2
-rw-r--r--tests/spu_create-success-P.c2
-rw-r--r--tests/spu_create-success-Xabbrev.c2
-rw-r--r--tests/spu_create-success-Xraw.c2
-rw-r--r--tests/spu_create-success-Xverbose.c2
-rw-r--r--tests/spu_create-success-y-P-Xabbrev.c3
-rw-r--r--tests/spu_create-success-y-P-Xraw.c2
-rw-r--r--tests/spu_create-success-y-P-Xverbose.c2
-rw-r--r--tests/spu_create-success-y-P.c2
-rw-r--r--tests/spu_create-success-y-Xabbrev.c3
-rw-r--r--tests/spu_create-success-y-Xraw.c2
-rw-r--r--tests/spu_create-success-y-Xverbose.c2
-rw-r--r--tests/spu_create-success-y.c6
-rw-r--r--tests/spu_create-success.c168
19 files changed, 252 insertions, 0 deletions
diff --git a/tests/.gitignore b/tests/.gitignore
index 62c0844be..f654f2551 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -981,6 +981,22 @@ sockopt-sol_socket-success-Xraw
sockopt-sol_socket-success-Xverbose
sockopt-timestamp
splice
+spu_create-success
+spu_create-success-Xabbrev
+spu_create-success-Xraw
+spu_create-success-Xverbose
+spu_create-success-P
+spu_create-success-P-Xabbrev
+spu_create-success-P-Xraw
+spu_create-success-P-Xverbose
+spu_create-success-y
+spu_create-success-y-Xabbrev
+spu_create-success-y-Xraw
+spu_create-success-y-Xverbose
+spu_create-success-y-P
+spu_create-success-y-P-Xabbrev
+spu_create-success-y-P-Xraw
+spu_create-success-y-P-Xverbose
stack-fcall
stack-fcall-attach
stack-fcall-mangled
diff --git a/tests/Makefile.am b/tests/Makefile.am
index d61419974..3c5f8e2e6 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -364,6 +364,22 @@ check_PROGRAMS = $(PURE_EXECUTABLES) \
sockopt-sol_socket-success-Xabbrev \
sockopt-sol_socket-success-Xraw \
sockopt-sol_socket-success-Xverbose \
+ spu_create-success \
+ spu_create-success-Xabbrev \
+ spu_create-success-Xraw \
+ spu_create-success-Xverbose \
+ spu_create-success-P \
+ spu_create-success-P-Xabbrev \
+ spu_create-success-P-Xraw \
+ spu_create-success-P-Xverbose \
+ spu_create-success-y \
+ spu_create-success-y-Xabbrev \
+ spu_create-success-y-Xraw \
+ spu_create-success-y-Xverbose \
+ spu_create-success-y-P \
+ spu_create-success-y-P-Xabbrev \
+ spu_create-success-y-P-Xraw \
+ spu_create-success-y-P-Xverbose \
stack-fcall \
stack-fcall-attach \
stack-fcall-mangled \
diff --git a/tests/gen_tests.in b/tests/gen_tests.in
index 5a7074dd8..b0e1d7620 100644
--- a/tests/gen_tests.in
+++ b/tests/gen_tests.in
@@ -959,6 +959,22 @@ sockopt-sol_socket-success-Xraw -einject=getsockopt,setsockopt:retval=42 -etrac
sockopt-sol_socket-success-Xverbose -einject=getsockopt,setsockopt:retval=42 -etrace=getsockopt,setsockopt -Xverbose
sockopt-timestamp -e trace=recvmsg
splice
+spu_create-success -einject=spu_create:retval=7 -etrace=spu_create -a23 </dev/null 7>/dev/full
+spu_create-success-Xabbrev -einject=spu_create:retval=7 -etrace=spu_create -a23 -Xabbrev </dev/null 7>/dev/full
+spu_create-success-Xraw -einject=spu_create:retval=7 -etrace=spu_create -a23 -Xraw </dev/null 7>/dev/full
+spu_create-success-Xverbose -einject=spu_create:retval=7 -etrace=spu_create -a23 -Xverbose </dev/null 7>/dev/full
+spu_create-success-P -einject=spu_create:retval=7 -etrace=spu_create -a23 -P/dev/full </dev/null 7>/dev/full
+spu_create-success-P-Xabbrev -einject=spu_create:retval=7 -etrace=spu_create -a23 -P/dev/full -Xabbrev </dev/null 7>/dev/full
+spu_create-success-P-Xraw -einject=spu_create:retval=7 -etrace=spu_create -a23 -P/dev/full -Xraw </dev/null 7>/dev/full
+spu_create-success-P-Xverbose -einject=spu_create:retval=7 -etrace=spu_create -a23 -P/dev/full -Xverbose </dev/null 7>/dev/full
+spu_create-success-y -einject=spu_create:retval=7 -etrace=spu_create -a23 -y </dev/null 7>/dev/full
+spu_create-success-y-Xabbrev -einject=spu_create:retval=23 -etrace=spu_create -a23 -y -Xabbrev </dev/null 7>/dev/full
+spu_create-success-y-Xraw -einject=spu_create:retval=7 -etrace=spu_create -a23 -y -Xraw </dev/null 7>/dev/full
+spu_create-success-y-Xverbose -einject=spu_create:retval=7 -etrace=spu_create -a23 -y -Xverbose </dev/null 7>/dev/full
+spu_create-success-y-P -einject=spu_create:retval=7 -etrace=spu_create -a23 -y -P/dev/full </dev/null 7>/dev/full
+spu_create-success-y-P-Xabbrev -einject=spu_create:retval=23 -etrace=spu_create -a23 -y -P/dev/full -Xabbrev </dev/null 7>/dev/full
+spu_create-success-y-P-Xraw -einject=spu_create:retval=7 -etrace=spu_create -a23 -y -P/dev/full -Xraw </dev/null 7>/dev/full
+spu_create-success-y-P-Xverbose -einject=spu_create:retval=7 -etrace=spu_create -a23 -y -P/dev/full -Xverbose </dev/null 7>/dev/full
stat -a30 --no-abbrev --trace-path=stat.sample --trace-path=/dev/full
stat64 -a32 --no-abbrev --trace-path=stat.sample --trace-path=/dev/full
statfs -a17
diff --git a/tests/spu_create-success-P-Xabbrev.c b/tests/spu_create-success-P-Xabbrev.c
new file mode 100644
index 000000000..df2222f2e
--- /dev/null
+++ b/tests/spu_create-success-P-Xabbrev.c
@@ -0,0 +1,2 @@
+#define XLAT_ABBREV 1
+#include "spu_create-success-P.c"
diff --git a/tests/spu_create-success-P-Xraw.c b/tests/spu_create-success-P-Xraw.c
new file mode 100644
index 000000000..a8b2657b0
--- /dev/null
+++ b/tests/spu_create-success-P-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "spu_create-success-P.c"
diff --git a/tests/spu_create-success-P-Xverbose.c b/tests/spu_create-success-P-Xverbose.c
new file mode 100644
index 000000000..a976b27ab
--- /dev/null
+++ b/tests/spu_create-success-P-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "spu_create-success-P.c"
diff --git a/tests/spu_create-success-P.c b/tests/spu_create-success-P.c
new file mode 100644
index 000000000..ab3827082
--- /dev/null
+++ b/tests/spu_create-success-P.c
@@ -0,0 +1,2 @@
+#define PATH_FILTER 1
+#include "spu_create-success.c"
diff --git a/tests/spu_create-success-Xabbrev.c b/tests/spu_create-success-Xabbrev.c
new file mode 100644
index 000000000..1b5b2e68c
--- /dev/null
+++ b/tests/spu_create-success-Xabbrev.c
@@ -0,0 +1,2 @@
+#define XLAT_ABBREV 1
+#include "spu_create-success.c"
diff --git a/tests/spu_create-success-Xraw.c b/tests/spu_create-success-Xraw.c
new file mode 100644
index 000000000..ee1291328
--- /dev/null
+++ b/tests/spu_create-success-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "spu_create-success.c"
diff --git a/tests/spu_create-success-Xverbose.c b/tests/spu_create-success-Xverbose.c
new file mode 100644
index 000000000..d2e71f853
--- /dev/null
+++ b/tests/spu_create-success-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "spu_create-success.c"
diff --git a/tests/spu_create-success-y-P-Xabbrev.c b/tests/spu_create-success-y-P-Xabbrev.c
new file mode 100644
index 000000000..40f86758d
--- /dev/null
+++ b/tests/spu_create-success-y-P-Xabbrev.c
@@ -0,0 +1,3 @@
+#define XLAT_ABBREV 1
+#define RVAL_STR ""
+#include "spu_create-success-y-P.c"
diff --git a/tests/spu_create-success-y-P-Xraw.c b/tests/spu_create-success-y-P-Xraw.c
new file mode 100644
index 000000000..7c4354ac6
--- /dev/null
+++ b/tests/spu_create-success-y-P-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "spu_create-success-y-P.c"
diff --git a/tests/spu_create-success-y-P-Xverbose.c b/tests/spu_create-success-y-P-Xverbose.c
new file mode 100644
index 000000000..46f84e946
--- /dev/null
+++ b/tests/spu_create-success-y-P-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "spu_create-success-y-P.c"
diff --git a/tests/spu_create-success-y-P.c b/tests/spu_create-success-y-P.c
new file mode 100644
index 000000000..2c01cc49d
--- /dev/null
+++ b/tests/spu_create-success-y-P.c
@@ -0,0 +1,2 @@
+#define PATH_FILTER 1
+#include "spu_create-success-y.c"
diff --git a/tests/spu_create-success-y-Xabbrev.c b/tests/spu_create-success-y-Xabbrev.c
new file mode 100644
index 000000000..1352601a3
--- /dev/null
+++ b/tests/spu_create-success-y-Xabbrev.c
@@ -0,0 +1,3 @@
+#define XLAT_ABBREV 1
+#define RVAL_STR ""
+#include "spu_create-success-y.c"
diff --git a/tests/spu_create-success-y-Xraw.c b/tests/spu_create-success-y-Xraw.c
new file mode 100644
index 000000000..b86ab1ab2
--- /dev/null
+++ b/tests/spu_create-success-y-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "spu_create-success-y.c"
diff --git a/tests/spu_create-success-y-Xverbose.c b/tests/spu_create-success-y-Xverbose.c
new file mode 100644
index 000000000..8011a2075
--- /dev/null
+++ b/tests/spu_create-success-y-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "spu_create-success-y.c"
diff --git a/tests/spu_create-success-y.c b/tests/spu_create-success-y.c
new file mode 100644
index 000000000..7c63e3cf4
--- /dev/null
+++ b/tests/spu_create-success-y.c
@@ -0,0 +1,6 @@
+#define FD0_STR "<" FD0_PATH ">"
+#define FD7_STR "<" FD7_PATH ">"
+#ifndef RVAL_STR
+# define RVAL_STR FD7_STR
+#endif
+#include "spu_create-success.c"
diff --git a/tests/spu_create-success.c b/tests/spu_create-success.c
new file mode 100644
index 000000000..0fe15a9d5
--- /dev/null
+++ b/tests/spu_create-success.c
@@ -0,0 +1,168 @@
+/*
+ * Check decoding of spu_create syscall.
+ *
+ * Copyright (c) 2022 Eugene Syromyatnikov <evgsyr@gmail.com>.
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "tests.h"
+#include "scno.h"
+
+#ifdef __NR_spu_create
+
+# include <fcntl.h>
+# include <inttypes.h>
+# include <stdint.h>
+# include <stdio.h>
+# include <string.h>
+# include <unistd.h>
+
+# define ARR_ITEM(arr_, idx_) ((arr_)[(idx_) % ARRAY_SIZE(arr_)])
+
+# define FD0_PATH "/dev/null"
+# define FD7_PATH "/dev/full"
+
+# define PATH2_STR "0123456789abcdefghijklmnopqrstuvwxyz"
+
+# ifndef FD0_STR
+# define FD0_STR ""
+# endif
+
+# ifndef FD7_STR
+# define FD7_STR ""
+# endif
+
+# ifndef RVAL_STR
+# define RVAL_STR ""
+# endif
+
+# ifndef PATH_FILTER
+# define PATH_FILTER 0
+# endif
+
+struct valstrflag {
+ unsigned int val;
+ const char *str;
+ bool flag;
+};
+
+enum { CLOSED_FD = 23 };
+
+static const char *errstr;
+
+static long
+sys_spu_create(const void *const pathname, const unsigned int flags,
+ const unsigned short mode, const int neighbor_fd)
+{
+ static const kernel_ulong_t fill =
+ (kernel_ulong_t) 0xbeefface00000000ULL;
+ kernel_ulong_t arg1 = (uintptr_t) pathname;
+ kernel_ulong_t arg2 = fill | flags;
+ kernel_ulong_t arg3 = fill | 0xdead0000U | mode;
+ kernel_ulong_t arg4 = fill | (unsigned int) neighbor_fd;
+ kernel_ulong_t arg5 = fill | 0xdecaffed;
+ kernel_ulong_t arg6 = fill | 0xdeefaced;
+
+ long rc = syscall(__NR_spu_create, arg1, arg2, arg3, arg4, arg5, arg6);
+ errstr = sprintrc(rc);
+ return rc;
+}
+
+int
+main(void)
+{
+ close(CLOSED_FD);
+
+ /* NULL/zero args */
+ sys_spu_create(NULL, 0, 0, 0);
+ if (!PATH_FILTER) {
+ printf("spu_create(NULL, 0, 000) = %s" RVAL_STR " (INJECTED)\n",
+ errstr);
+ }
+
+ static const struct valstrflag flags[] = {
+ { ARG_STR(0) },
+ { ARG_STR(0x1) NRAW(" /* SPU_CREATE_EVENTS_ENABLED */") },
+ { ARG_STR(0x10) NRAW(" /* SPU_CREATE_AFFINITY_SPU */"), true },
+ { ARG_STR(0x40) NRAW(" /* SPU_CREATE_??? */") },
+ { ARG_STR(0xbeef) NRAW(" /* SPU_CREATE_EVENTS_ENABLED"
+ "|SPU_CREATE_GANG|SPU_CREATE_NOSCHED"
+ "|SPU_CREATE_ISOLATE"
+ "|SPU_CREATE_AFFINITY_MEM|0xbec0 */") },
+ { ARG_STR(0xcafe) NRAW(" /* SPU_CREATE_GANG|SPU_CREATE_NOSCHED"
+ "|SPU_CREATE_ISOLATE"
+ "|SPU_CREATE_AFFINITY_SPU"
+ "|SPU_CREATE_AFFINITY_MEM|0xcac0 */"),
+ true },
+ { ARG_STR(0xfacedec0) NRAW(" /* SPU_CREATE_??? */") },
+ };
+ static const struct strval16 modes[] = {
+ { ARG_STR(000) },
+ { ARG_STR(0755) },
+ { ARG_STR(04000) },
+ };
+ static const struct valstrflag fds[] = {
+ { 0, FD0_STR },
+ { 7, FD7_STR, true },
+ { CLOSED_FD, "" },
+ { 0xdeadbeef, "" },
+ };
+
+ TAIL_ALLOC_OBJECT_VAR_ARR(char, path0, 1);
+ TAIL_ALLOC_OBJECT_VAR_ARR(char, path1, 3);
+ TAIL_ALLOC_OBJECT_VAR_ARR(char, path2, 37);
+ TAIL_ALLOC_OBJECT_VAR_ARR(char, path3, sizeof(FD7_PATH));
+
+ path0[0] = '\0';
+ memcpy(path1, "\r\n\t", 3);
+ memcpy(path2, PATH2_STR, 37);
+ strcpy(path3, FD7_PATH);
+
+ const struct {
+ const char *val;
+ const char *str;
+ bool flag;
+ } paths[] = {
+ { path0 + 1, NULL },
+ { path0, "\"\"" },
+ { path1, NULL },
+ { path2, "\"" PATH2_STR "\"" },
+ { path3, "\"" FD7_PATH "\"", true },
+ };
+ const size_t iters = 4 * MAX(MAX(MAX(ARRAY_SIZE(flags), ARRAY_SIZE(fds)),
+ ARRAY_SIZE(modes)), ARRAY_SIZE(paths));
+
+ for (size_t i = 0; i < iters; i++) {
+ sys_spu_create(ARR_ITEM(paths, i).val, ARR_ITEM(flags, i).val,
+ ARR_ITEM(modes, i).val, ARR_ITEM(fds, i).val);
+
+ if (PATH_FILTER && !ARR_ITEM(paths, i).flag
+ && (!ARR_ITEM(flags, i).flag || !ARR_ITEM(fds, i).flag))
+ continue;
+
+ printf("spu_create(");
+ if (ARR_ITEM(paths, i).str)
+ printf("%s", ARR_ITEM(paths, i).str);
+ else
+ printf("%p", ARR_ITEM(paths, i).val);
+ printf(", %s, %s",
+ ARR_ITEM(flags, i).str, ARR_ITEM(modes, i).str);
+ if (ARR_ITEM(flags, i).flag) {
+ printf(", %d%s",
+ ARR_ITEM(fds, i).val, ARR_ITEM(fds, i).str);
+ }
+ printf(") = %s" RVAL_STR " (INJECTED)\n", errstr);
+ }
+
+ puts("+++ exited with 0 +++");
+
+ return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_spu_create")
+
+#endif