From: Dmitry V. Levin Date: Tue, 18 Aug 2015 19:21:36 +0000 (+0000) Subject: tests: add a test for get_robust_list and set_robust_list decoding X-Git-Tag: v4.11~273 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=41b9facc2ada45812bbdfb748d16fa562995ac03;p=strace tests: add a test for get_robust_list and set_robust_list decoding * tests/xet_robust_list.c: New file. * tests/xet_robust_list.test: New test. * tests/Makefile.am (check_PROGRAMS): Add xet_robust_list. (TESTS): Add xet_robust_list.test. * tests/.gitignore: Add xet_robust_list. --- diff --git a/tests/.gitignore b/tests/.gitignore index f709d7f2..9cf3d9b6 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -49,6 +49,7 @@ umovestr2 unix-pair-send-recv utime xattr +xet_robust_list *.log *.log.* *.o diff --git a/tests/Makefile.am b/tests/Makefile.am index 6fa46d3a..45e3ded0 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -59,7 +59,9 @@ check_PROGRAMS = \ umovestr2 \ unix-pair-send-recv \ utime \ - xattr + xattr \ + xet_robust_list \ + # end of check_PROGRAMS filter_unavailable_LDADD = -lpthread mmap64_CFLAGS = $(AM_CFLAGS) -D_FILE_OFFSET_BITS=64 @@ -126,6 +128,7 @@ TESTS = \ uio.test \ utime.test \ xattr.test \ + xet_robust_list.test \ count.test \ detach-sleeping.test \ detach-stopped.test \ diff --git a/tests/xet_robust_list.c b/tests/xet_robust_list.c new file mode 100644 index 00000000..ddcdd505 --- /dev/null +++ b/tests/xet_robust_list.c @@ -0,0 +1,55 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +#if defined __NR_get_robust_list && defined __NR_set_robust_list + +int +main(void) +{ + const size_t page_len = sysconf(_SC_PAGESIZE); + const pid_t pid = getpid(); + const long long_pid = (unsigned long) (0xdeadbeef00000000LL | pid); + + void *p = mmap(NULL, page_len * 4, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (p == MAP_FAILED || + mprotect(p + page_len, page_len, PROT_NONE) || + mprotect(p + page_len * 3, page_len, PROT_NONE)) + return 77; + + void **p_head = p + page_len - sizeof(void *); + size_t *p_len = p + page_len * 3 - sizeof(size_t); + + if (syscall(__NR_get_robust_list, long_pid, p_head, p_len)) + return 77; + printf("get_robust_list\\(%d, \\[%#lx\\], \\[%lu\\]\\) += 0\n", + (int) pid, (unsigned long) *p_head, (unsigned long) *p_len); + + if (syscall(__NR_set_robust_list, p, *p_len)) + return 77; + printf("set_robust_list\\(%#lx, %lu\\) += 0\n", + (unsigned long) p, (unsigned long) *p_len); + + if (syscall(__NR_get_robust_list, long_pid, p_head, p_len)) + return 77; + printf("get_robust_list\\(%d, \\[%#lx\\], \\[%lu\\]\\) += 0\n", + (int) pid, (unsigned long) *p_head, (unsigned long) *p_len); + + return 0; +} + +#else + +int +main(void) +{ + return 77; +} + +#endif diff --git a/tests/xet_robust_list.test b/tests/xet_robust_list.test new file mode 100755 index 00000000..9568c1d1 --- /dev/null +++ b/tests/xet_robust_list.test @@ -0,0 +1,13 @@ +#!/bin/sh + +# Check get_robust_list and set_robust_list syscalls decoding. + +. "${srcdir=.}/init.sh" + +run_prog > /dev/null +OUT="$LOG.out" +run_strace -eget_robust_list,set_robust_list $args > "$OUT" +match_grep "$LOG" "$OUT" +rm -f "$OUT" + +exit 0