[PATCH 03/11] tests: check decoding of getcpu syscall
Eugene Syromyatnikov
evgsyr at gmail.com
Wed Sep 21 21:21:01 UTC 2016
* tests/getcpu.c: New file.
* tests/getcpu.test: New test.
* tests/.gitignore: Add getcpu.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(DECODER_TESTS): Add getcpu.test.
---
tests/.gitignore | 1 +
tests/Makefile.am | 2 ++
tests/getcpu.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
tests/getcpu.test | 6 ++++++
4 files changed, 57 insertions(+)
create mode 100644 tests/getcpu.c
create mode 100755 tests/getcpu.test
diff --git a/tests/.gitignore b/tests/.gitignore
index 2820b2b..bdb2d9a 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -70,6 +70,7 @@ ftruncate64
futex
futimesat
get_mempolicy
+getcpu
getcwd
getdents
getdents64
diff --git a/tests/Makefile.am b/tests/Makefile.am
index f6f980a..ac579c7 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -129,6 +129,7 @@ check_PROGRAMS = \
futex \
futimesat \
get_mempolicy \
+ getcpu \
getcwd \
getdents \
getdents64 \
@@ -465,6 +466,7 @@ DECODER_TESTS = \
futex.test \
futimesat.test \
get_mempolicy.test \
+ getcpu.test \
getcwd.test \
getdents.test \
getdents64.test \
diff --git a/tests/getcpu.c b/tests/getcpu.c
new file mode 100644
index 0000000..a96fd49
--- /dev/null
+++ b/tests/getcpu.c
@@ -0,0 +1,48 @@
+#include "tests.h"
+
+#include <asm/unistd.h>
+
+#ifdef __NR_getcpu
+
+# include <stdio.h>
+# include <unistd.h>
+
+int
+main(void)
+{
+ static const unsigned *bogus_cpu =
+ (unsigned *) (unsigned long) 0xfffffeedfffffaceULL;
+ static const unsigned *bogus_node =
+ (unsigned *) (unsigned long) 0xfffffca7ffffc0deULL;
+ static const unsigned *bogus_tcache =
+ (unsigned *) (unsigned long) 0xffffda7affffdeadULL;
+
+ long res;
+ unsigned *cpu = tail_alloc(sizeof(*cpu));
+ unsigned *node = tail_alloc(sizeof(*node));
+ long * tcache = tail_alloc(128);
+
+ res = syscall(__NR_getcpu, NULL, NULL, NULL);
+ printf("getcpu(NULL, NULL, NULL) = %s\n", sprintrc(res));
+
+ res = syscall(__NR_getcpu, bogus_cpu, bogus_node, bogus_tcache);
+ printf("getcpu(%p, %p, %p) = %s\n",
+ bogus_cpu, bogus_node, bogus_tcache, sprintrc(res));
+
+ res = syscall(__NR_getcpu, cpu, node, tcache);
+ if (res != 0)
+ perror_msg_and_skip("getcpu");
+
+ printf("getcpu([%u], [%u], %p) = 0\n",
+ *cpu, *node, tcache);
+
+ puts("+++ exited with 0 +++");
+
+ return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_getcpu");
+
+#endif
diff --git a/tests/getcpu.test b/tests/getcpu.test
new file mode 100755
index 0000000..3dbe5e0
--- /dev/null
+++ b/tests/getcpu.test
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# Check getcwd syscall decoding.
+
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a25
--
1.7.10.4
More information about the Strace-devel
mailing list