* 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


------------------------------------------------------------------------------
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to