diff --git a/tests/.gitignore b/tests/.gitignore
index 7fa97ba..c7be68d 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -62,6 +62,7 @@
 ftruncate
 ftruncate64
 futimesat
+get_mempolicy
 getcwd
 getdents
 getdents64
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 4846d13..67afd0f 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -117,6 +117,7 @@
 	ftruncate \
 	ftruncate64 \
 	futimesat \
+	get_mempolicy \
 	getcwd \
 	getdents \
 	getdents64 \
@@ -390,6 +391,7 @@
 	ftruncate.test \
 	ftruncate64.test \
 	futimesat.test \
+	get_mempolicy.test \
 	getcwd.test \
 	getdents.test \
 	getdents64.test \
diff --git a/tests/get_mempolicy.c b/tests/get_mempolicy.c
new file mode 100644
index 0000000..dbecc8d
--- /dev/null
+++ b/tests/get_mempolicy.c
@@ -0,0 +1,138 @@
+/*
+ * Check decoding of get_mempolicy syscall.
+ *
+ * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <sys/syscall.h>
+
+#ifdef __NR_get_mempolicy
+
+# include <stdio.h>
+# include <unistd.h>
+
+# include "xlat.h"
+# include "xlat/policies.h"
+
+# define MAX_STRLEN 3
+# define NLONGS(n) ((n + 8 * sizeof(long) - 2) \
+		      / (8 * sizeof(long)))
+
+static void
+print_nodes(unsigned long maxnode)
+{
+	unsigned long *const nodemask =
+		tail_alloc(sizeof(*nodemask) * NLONGS(maxnode));
+	(void) tail_alloc(1);
+
+	if (syscall(__NR_get_mempolicy, 0, nodemask, maxnode, 0, 0)) {
+		printf("get_mempolicy(NULL, %p, %lu, NULL, 0) = -1 %s (%m)\n",
+		       nodemask, maxnode, errno2name());
+		return;
+	}
+
+	printf("get_mempolicy(NULL, [");
+
+	unsigned int nlongs = NLONGS(maxnode);
+	unsigned int i;
+	for (i = 0; i < nlongs; ++i) {
+		if (i)
+			fputs(", ", stdout);
+		if (i >= MAX_STRLEN) {
+			fputs("...", stdout);
+			break;
+		}
+		printf("%#0*lx", (int) sizeof(*nodemask) * 2 + 2, nodemask[i]);
+	}
+
+	printf("], %lu, NULL, 0) = 0\n", maxnode);
+}
+
+int
+main(void)
+{
+	long rc;
+
+	if (syscall(__NR_get_mempolicy, 0, 0, 0, 0, 0))
+		perror_msg_and_skip("get_mempolicy");
+	puts("get_mempolicy(NULL, NULL, 0, NULL, 0) = 0");
+
+	int *mode = (void *) 0xdefaced1baddeed2;
+	unsigned long maxnode = (unsigned long) 0xcafef00dbadc0ded;
+	const unsigned long *nodemask = (void *) 0xfacedad3bebefed4;
+	const unsigned long addr = (unsigned long) 0xfacefeeddeadbeef;
+	const unsigned long flags = -1U;
+	rc = syscall(__NR_get_mempolicy, mode, nodemask, maxnode, addr, flags);
+	printf("get_mempolicy(%p, %p, %lu, %#lx, %s|%#lx) = %ld %s (%m)\n",
+	       mode, nodemask, maxnode, addr,
+	       "MPOL_F_NODE|MPOL_F_ADDR",
+	       flags & ~3, rc, errno2name());
+
+	(void) tail_alloc(1);
+	mode = tail_alloc(sizeof(*mode));
+	(void) tail_alloc(1);
+
+	rc = syscall(__NR_get_mempolicy, mode, 0, 0, 0, 0);
+	printf("get_mempolicy([");
+	printxval(policies, (unsigned) *mode, "MPOL_???");
+	printf("], NULL, 0, NULL, 0) = %ld\n", rc);
+
+	*mode = -1;
+	rc = syscall(__NR_get_mempolicy, mode, 0, 0, mode - 1, 2);
+	printf("get_mempolicy([");
+	printxval(policies, (unsigned) *mode, "MPOL_???");
+	printf("], NULL, 0, %p, MPOL_F_ADDR) = %ld\n", mode - 1, rc);
+
+	maxnode = get_page_size() * 8;
+
+	print_nodes(maxnode);
+	print_nodes(maxnode + 1);
+	print_nodes(maxnode + 2);
+
+	maxnode = sizeof(*nodemask) * 8;
+	print_nodes(maxnode - 1);
+	print_nodes(maxnode    );
+	print_nodes(maxnode + 1);
+	print_nodes(maxnode + 2);
+	print_nodes(maxnode * 2 - 1);
+	print_nodes(maxnode * 2    );
+	print_nodes(maxnode * 2 + 1);
+	print_nodes(maxnode * 2 + 2);
+	print_nodes(maxnode * 3 - 1);
+	print_nodes(maxnode * 3    );
+	print_nodes(maxnode * 3 + 1);
+	print_nodes(maxnode * 3 + 2);
+
+	puts("+++ exited with 0 +++");
+	return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_get_mempolicy")
+
+#endif
diff --git a/tests/get_mempolicy.test b/tests/get_mempolicy.test
new file mode 100755
index 0000000..9227097
--- /dev/null
+++ b/tests/get_mempolicy.test
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# Check get_mempolicy syscall decoding.
+
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -s3 -a38
