[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