tests: add personality.test

* tests/personality.c: New file.
* tests/personality.test: New test.
* tests/Makefile.am (check_PROGRAMS): Add personality.
(TESTS): Add personality.test.
* tests/.gitignore: Add personality.
diff --git a/tests/.gitignore b/tests/.gitignore
index bfd34b4..b4d1df9 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -57,6 +57,7 @@
 newfstatat
 oldselect
 pc
+personality
 pipe
 ppoll
 pselect6
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 0f23b4b..c54fdf3 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -91,6 +91,7 @@
 	newfstatat \
 	oldselect \
 	pc \
+	personality \
 	pipe \
 	ppoll \
 	pselect6 \
@@ -216,6 +217,7 @@
 	newfstatat.test \
 	oldselect.test \
 	pc.test \
+	personality.test \
 	pipe.test \
 	ppoll.test \
 	pselect6.test \
diff --git a/tests/personality.c b/tests/personality.c
new file mode 100644
index 0000000..82200fa
--- /dev/null
+++ b/tests/personality.c
@@ -0,0 +1,20 @@
+#include <stdio.h>
+#include <sys/personality.h>
+
+int main(void)
+{
+	const unsigned int test_pers =
+		SHORT_INODE | WHOLE_SECONDS | STICKY_TIMEOUTS;
+	const unsigned int saved_pers = personality(0);
+
+	printf("personality\\(PER_LINUX\\) = %#x \\([^)]*\\)\n", saved_pers);
+	personality(test_pers);
+	puts("personality\\(SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS\\)"
+	     " = 0 \\(PER_LINUX\\)");
+	personality(saved_pers);
+	printf("personality\\([^)]*\\) = %#x"
+	       " \\(SHORT_INODE\\|WHOLE_SECONDS\\|STICKY_TIMEOUTS\\)\n",
+	       test_pers);
+
+	return 0;
+}
diff --git a/tests/personality.test b/tests/personality.test
new file mode 100755
index 0000000..b4329c0
--- /dev/null
+++ b/tests/personality.test
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+# Check personality syscall decoding.
+
+. "${srcdir=.}/init.sh"
+
+run_prog > /dev/null
+OUT="$LOG.out"
+run_strace -a22 -epersonality $args > "$OUT"
+match_grep "$LOG" "$OUT"
+rm -f "$OUT"
+
+exit 0