Index: amd64/linux32/linux32_dummy.c
===================================================================
RCS file: /home/ncvs/src/sys/amd64/linux32/linux32_dummy.c,v
retrieving revision 1.12
diff -u -r1.12 linux32_dummy.c
--- amd64/linux32/linux32_dummy.c	23 Apr 2008 15:56:33 -0000	1.12
+++ amd64/linux32/linux32_dummy.c	26 Apr 2008 11:25:30 -0000
@@ -98,8 +98,6 @@
 DUMMY(pselect6);
 DUMMY(ppoll);
 DUMMY(unshare);
-DUMMY(set_robust_list);
-DUMMY(get_robust_list);
 DUMMY(splice);
 DUMMY(sync_file_range);
 DUMMY(tee);
Index: amd64/linux32/linux32_proto.h
===================================================================
RCS file: /home/ncvs/src/sys/amd64/linux32/linux32_proto.h,v
retrieving revision 1.36
diff -u -r1.36 linux32_proto.h
--- amd64/linux32/linux32_proto.h	16 Apr 2008 19:27:35 -0000	1.36
+++ amd64/linux32/linux32_proto.h	26 Apr 2008 11:26:07 -0000
@@ -2,7 +2,7 @@
  * System call prototypes.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/amd64/linux32/linux32_proto.h,v 1.36 2008/04/16 19:27:35 jkim Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.33 2008/04/16 19:25:38 jkim Exp 
  */
 
@@ -969,10 +969,13 @@
 	register_t dummy;
 };
 struct linux_set_robust_list_args {
-	register_t dummy;
+	char head_l_[PADL_(struct linux_robust_list_head *)]; struct linux_robust_list_head * head; char head_r_[PADR_(struct linux_robust_list_head *)];
+	char len_l_[PADL_(l_size_t)]; l_size_t len; char len_r_[PADR_(l_size_t)];
 };
 struct linux_get_robust_list_args {
-	register_t dummy;
+	char pid_l_[PADL_(l_int)]; l_int pid; char pid_r_[PADR_(l_int)];
+	char head_l_[PADL_(struct linux_robust_list_head *)]; struct linux_robust_list_head * head; char head_r_[PADR_(struct linux_robust_list_head *)];
+	char len_l_[PADL_(l_size_t *)]; l_size_t * len; char len_r_[PADR_(l_size_t *)];
 };
 struct linux_splice_args {
 	register_t dummy;
Index: amd64/linux32/linux32_syscall.h
===================================================================
RCS file: /home/ncvs/src/sys/amd64/linux32/linux32_syscall.h,v
retrieving revision 1.36
diff -u -r1.36 linux32_syscall.h
--- amd64/linux32/linux32_syscall.h	16 Apr 2008 19:27:35 -0000	1.36
+++ amd64/linux32/linux32_syscall.h	26 Apr 2008 11:26:07 -0000
@@ -2,7 +2,7 @@
  * System call numbers.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/amd64/linux32/linux32_syscall.h,v 1.36 2008/04/16 19:27:35 jkim Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.33 2008/04/16 19:25:38 jkim Exp 
  */
 
Index: amd64/linux32/linux32_sysent.c
===================================================================
RCS file: /home/ncvs/src/sys/amd64/linux32/linux32_sysent.c,v
retrieving revision 1.36
diff -u -r1.36 linux32_sysent.c
--- amd64/linux32/linux32_sysent.c	16 Apr 2008 19:27:35 -0000	1.36
+++ amd64/linux32/linux32_sysent.c	26 Apr 2008 11:26:07 -0000
@@ -2,7 +2,7 @@
  * System call switch table.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/amd64/linux32/linux32_sysent.c,v 1.36 2008/04/16 19:27:35 jkim Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.33 2008/04/16 19:25:38 jkim Exp 
  */
 
@@ -330,8 +330,8 @@
 	{ 0, (sy_call_t *)linux_pselect6, AUE_NULL, NULL, 0, 0 },	/* 308 = linux_pselect6 */
 	{ 0, (sy_call_t *)linux_ppoll, AUE_NULL, NULL, 0, 0 },	/* 309 = linux_ppoll */
 	{ 0, (sy_call_t *)linux_unshare, AUE_NULL, NULL, 0, 0 },	/* 310 = linux_unshare */
-	{ 0, (sy_call_t *)linux_set_robust_list, AUE_NULL, NULL, 0, 0 },	/* 311 = linux_set_robust_list */
-	{ 0, (sy_call_t *)linux_get_robust_list, AUE_NULL, NULL, 0, 0 },	/* 312 = linux_get_robust_list */
+	{ AS(linux_set_robust_list_args), (sy_call_t *)linux_set_robust_list, AUE_NULL, NULL, 0, 0 },	/* 311 = linux_set_robust_list */
+	{ AS(linux_get_robust_list_args), (sy_call_t *)linux_get_robust_list, AUE_NULL, NULL, 0, 0 },	/* 312 = linux_get_robust_list */
 	{ 0, (sy_call_t *)linux_splice, AUE_NULL, NULL, 0, 0 },	/* 313 = linux_splice */
 	{ 0, (sy_call_t *)linux_sync_file_range, AUE_NULL, NULL, 0, 0 },	/* 314 = linux_sync_file_range */
 	{ 0, (sy_call_t *)linux_tee, AUE_NULL, NULL, 0, 0 },		/* 315 = linux_tee */
Index: amd64/linux32/syscalls.master
===================================================================
RCS file: /home/ncvs/src/sys/amd64/linux32/syscalls.master,v
retrieving revision 1.33
diff -u -r1.33 syscalls.master
--- amd64/linux32/syscalls.master	16 Apr 2008 19:25:38 -0000	1.33
+++ amd64/linux32/syscalls.master	26 Apr 2008 11:25:58 -0000
@@ -493,8 +493,10 @@
 308	AUE_NULL	STD	{ int linux_pselect6(void); }
 309	AUE_NULL	STD	{ int linux_ppoll(void); }
 310	AUE_NULL	STD	{ int linux_unshare(void); }
-311	AUE_NULL	STD	{ int linux_set_robust_list(void); }
-312	AUE_NULL	STD	{ int linux_get_robust_list(void); }
+311	AUE_NULL	STD	{ int linux_set_robust_list(struct linux_robust_list_head *head, \
+					l_size_t len); }
+312	AUE_NULL	STD	{ int linux_get_robust_list(l_int pid, struct linux_robust_list_head *head, \
+					l_size_t *len); }
 313	AUE_NULL	STD	{ int linux_splice(void); }
 314	AUE_NULL	STD	{ int linux_sync_file_range(void); }
 315	AUE_NULL	STD	{ int linux_tee(void); }
Index: compat/linux/linux_emul.c
===================================================================
RCS file: /home/ncvs/src/sys/compat/linux/linux_emul.c,v
retrieving revision 1.20
diff -u -r1.20 linux_emul.c
--- compat/linux/linux_emul.c	2 Apr 2007 18:38:13 -0000	1.20
+++ compat/linux/linux_emul.c	29 Apr 2008 22:00:22 -0000
@@ -44,9 +44,6 @@
 #include <sys/sysproto.h>
 #include <sys/unistd.h>
 
-#include <compat/linux/linux_emul.h>
-#include <compat/linux/linux_futex.h>
-
 #ifdef COMPAT_LINUX32
 #include <machine/../linux32/linux.h>
 #include <machine/../linux32/linux32_proto.h>
@@ -55,6 +52,9 @@
 #include <machine/../linux/linux_proto.h>
 #endif
 
+#include <compat/linux/linux_emul.h>
+#include <compat/linux/linux_futex.h>
+
 struct sx	emul_shared_lock;
 struct mtx	emul_lock;
 
@@ -86,6 +86,7 @@
 		em = malloc(sizeof *em, M_LINUX, M_WAITOK | M_ZERO);
 		em->pid = child;
 		em->pdeath_signal = 0;
+		em->robust_futexes = NULL;
 		if (flags & LINUX_CLONE_THREAD) {
 			/* handled later in the code */
 		} else {
@@ -161,6 +162,8 @@
 	if (__predict_true(p->p_sysent != &elf_linux_sysvec))
 		return;
 
+	release_futexes(p);
+
 	/* find the emuldata */
 	em = em_find(p, EMUL_DOLOCK);
 
Index: compat/linux/linux_emul.h
===================================================================
RCS file: /home/ncvs/src/sys/compat/linux/linux_emul.h,v
retrieving revision 1.7
diff -u -r1.7 linux_emul.h
--- compat/linux/linux_emul.h	2 Apr 2007 18:38:13 -0000	1.7
+++ compat/linux/linux_emul.h	26 Apr 2008 08:52:09 -0000
@@ -31,6 +31,8 @@
 #ifndef _LINUX_EMUL_H_
 #define	_LINUX_EMUL_H_
 
+#include <compat/linux/linux_futex.h>
+
 struct linux_emuldata_shared {
 	int	refs;
 	pid_t	group_pid;
@@ -52,6 +54,8 @@
 
 	int	pdeath_signal;		/* parent death signal */
 
+	struct	linux_robust_list_head	*robust_futexes;
+
 	LIST_ENTRY(linux_emuldata) threads;	/* list of linux threads */
 };
 
Index: compat/linux/linux_futex.c
===================================================================
RCS file: /home/ncvs/src/sys/compat/linux/linux_futex.c,v
retrieving revision 1.12
diff -u -r1.12 linux_futex.c
--- compat/linux/linux_futex.c	20 Mar 2008 17:03:55 -0000	1.12
+++ compat/linux/linux_futex.c	29 Apr 2008 21:37:30 -0000
@@ -45,8 +45,11 @@
 #include <sys/systm.h>
 #include <sys/proc.h>
 #include <sys/queue.h>
+#include <sys/imgact.h>
 #include <sys/lock.h>
 #include <sys/mutex.h>
+#include <sys/priv.h>
+#include <sys/sched.h>
 #include <sys/sx.h>
 #include <sys/malloc.h>
 
@@ -57,6 +60,7 @@
 #include <machine/../linux/linux.h>
 #include <machine/../linux/linux_proto.h>
 #endif
+#include <compat/linux/linux_emul.h>
 #include <compat/linux/linux_futex.h>
 
 struct futex;
@@ -533,3 +537,157 @@
 		return (-ENOSYS);
 	}
 }
+
+int
+linux_set_robust_list(struct thread *td, struct linux_set_robust_list_args *args)
+{
+	struct linux_emuldata *em;
+
+#ifdef	DEBUG
+	if (ldebug(set_robust_list))
+		printf(ARGS(set_robust_list, ""));
+#endif
+	if (args->len != sizeof(struct linux_robust_list_head))
+		return (EINVAL);
+
+	em = em_find(td->td_proc, EMUL_DOLOCK);
+	em->robust_futexes = args->head;
+	EMUL_UNLOCK(&emul_lock);
+
+	return (0);	
+}
+
+int
+linux_get_robust_list(struct thread *td, struct linux_get_robust_list_args *args)
+{
+	struct linux_emuldata *em;
+	struct linux_robust_list_head *head;
+	l_size_t len = sizeof(struct linux_robust_list_head);
+	int error = 0;
+
+#ifdef	DEBUG
+	if (ldebug(get_robust_list))
+		printf(ARGS(get_robust_list, ""));
+#endif
+
+	if (!args->pid) {
+		em = em_find(td->td_proc, EMUL_DONTLOCK);
+		head = em->robust_futexes;		
+	} else {
+		struct proc *p;
+
+		p = pfind(args->pid);
+		if (p == NULL)
+			return (ESRCH);
+
+		em = em_find(p, EMUL_DONTLOCK);
+		/* XXX: ptrace? */
+		if (priv_check(td, PRIV_CRED_SETUID) || 
+		    priv_check(td, PRIV_CRED_SETEUID) ||
+		    p_candebug(td, p))
+			return (EPERM);
+		head = em->robust_futexes;
+		
+		PROC_UNLOCK(p);
+	}
+
+	error = copyout(&len, args->len, sizeof(l_size_t));
+	if (error)
+		return (EFAULT);
+
+	error = copyout(head, args->head, sizeof(struct linux_robust_list_head));
+
+	return (error);
+}
+
+static int
+handle_futex_death(void *uaddr, pid_t pid, int pi)
+{
+	int uval, nval, mval;
+	struct futex *f;
+
+retry:
+	if (copyin(uaddr, &uval, 4))
+		return (EFAULT);
+
+	if ((uval & FUTEX_TID_MASK) == pid) {
+		mval = (uval & FUTEX_WAITERS) | FUTEX_OWNER_DIED;
+		nval = casuword32(uaddr, uval, mval);
+
+		if (nval == -1)
+			return (EFAULT);
+
+		if (nval != uval)
+			goto retry;
+
+		if (!pi && (uval & FUTEX_WAITERS)) {
+			f = futex_get(uaddr, FUTEX_UNLOCKED);
+			futex_wake(f, 1, NULL, 0);
+		}
+	}
+
+	return (0);
+}
+
+static int
+fetch_robust_entry(struct linux_robust_list **entry,
+    struct linux_robust_list **head, int *pi)
+{
+	l_ulong uentry;
+
+	if (copyin((const void *)head, &uentry, sizeof(l_ulong)))
+		return (EFAULT);
+
+	*entry = (void *)(uentry & ~1UL);
+	*pi = uentry & 1;
+
+	return (0);
+}
+
+/* This walks the list of robust futexes releasing them. */
+void
+release_futexes(struct proc *p)
+{
+	struct linux_robust_list_head *head = NULL;
+	struct linux_robust_list *entry, *next_entry, *pending;
+	unsigned int limit = 2048, pi, next_pi, pip;
+	struct linux_emuldata *em;
+	l_ulong futex_offset;
+	int rc;
+
+	em = em_find(p, EMUL_DONTLOCK);
+	head = em->robust_futexes;
+
+	if (fetch_robust_entry(&entry, &head->list.next, &pi))
+		return;
+
+	if (copyin(&head->futex_offset, &futex_offset, sizeof(l_ulong)))
+		return;
+
+	if (fetch_robust_entry(&pending, &head->pending_list, &pip))
+		return;
+
+	while (entry != &head->list) {
+		rc = fetch_robust_entry(&next_entry, &entry->next, &next_pi);
+
+		if (entry != pending)
+			if (handle_futex_death((char *)entry + futex_offset,
+			    p->p_pid, pi))
+				return;
+
+		if (rc)
+			return;
+
+		entry = next_entry;
+		pi = next_pi;
+
+		if (!--limit)
+			break;
+
+		sched_relinquish(curthread);
+	}
+
+	if (pending)
+		handle_futex_death((char *) pending + futex_offset,
+		    p->p_pid, pip);
+}
Index: compat/linux/linux_futex.h
===================================================================
RCS file: /home/ncvs/src/sys/compat/linux/linux_futex.h,v
retrieving revision 1.3
diff -u -r1.3 linux_futex.h
--- compat/linux/linux_futex.h	20 Mar 2008 17:03:55 -0000	1.3
+++ compat/linux/linux_futex.h	26 Apr 2008 08:47:17 -0000
@@ -63,4 +63,22 @@
 #define FUTEX_OP_CMP_GT         4	/* if (oldval > CMPARG) wake */
 #define FUTEX_OP_CMP_GE         5	/* if (oldval >= CMPARG) wake */
 
+/* This is defined by Linux user-space */
+
+struct linux_robust_list {
+	struct linux_robust_list	*next;
+};
+
+struct linux_robust_list_head {
+	struct linux_robust_list	list;
+	l_ulong				futex_offset;
+	struct linux_robust_list	*pending_list;
+};
+
+#define	FUTEX_WAITERS		0x80000000
+#define	FUTEX_OWNER_DIED	0x40000000
+#define	FUTEX_TID_MASK		0x3fffffff
+
+void	release_futexes(struct proc *);
+
 #endif	/* !_LINUX_FUTEX_H */
Index: compat/linux/linux_misc.c
===================================================================
RCS file: /home/ncvs/src/sys/compat/linux/linux_misc.c,v
retrieving revision 1.220
diff -u -r1.220 linux_misc.c
--- compat/linux/linux_misc.c	8 Apr 2008 09:45:47 -0000	1.220
+++ compat/linux/linux_misc.c	26 Apr 2008 08:49:49 -0000
@@ -75,10 +75,6 @@
 #include <vm/vm_object.h>
 #include <vm/swap_pager.h>
 
-#include <compat/linux/linux_sysproto.h>
-#include <compat/linux/linux_emul.h>
-#include <compat/linux/linux_misc.h>
-
 #ifdef COMPAT_LINUX32
 #include <machine/../linux32/linux.h>
 #include <machine/../linux32/linux32_proto.h>
@@ -91,6 +87,9 @@
 #include <compat/linux/linux_mib.h>
 #include <compat/linux/linux_signal.h>
 #include <compat/linux/linux_util.h>
+#include <compat/linux/linux_sysproto.h>
+#include <compat/linux/linux_emul.h>
+#include <compat/linux/linux_misc.h>
 
 #ifdef __i386__
 #include <machine/cputypes.h>
Index: i386/conf/GENERIC
===================================================================
RCS file: /home/ncvs/src/sys/i386/conf/GENERIC,v
retrieving revision 1.485
diff -u -r1.485 GENERIC
--- i386/conf/GENERIC	20 Apr 2008 20:35:39 -0000	1.485
+++ i386/conf/GENERIC	22 Apr 2008 16:14:23 -0000
@@ -64,6 +64,7 @@
 options 	KBD_INSTALL_CDEV	# install a CDEV entry in /dev
 options 	STOP_NMI		# Stop CPUS using NMI instead of IPI
 options 	AUDIT			# Security event auditing
+options		COMPAT_LINUX
 
 # Debugging for use in -current
 options 	KDB			# Enable kernel debugger support.
Index: i386/linux/linux_dummy.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/linux/linux_dummy.c,v
retrieving revision 1.49
diff -u -r1.49 linux_dummy.c
--- i386/linux/linux_dummy.c	23 Apr 2008 15:56:33 -0000	1.49
+++ i386/linux/linux_dummy.c	26 Apr 2008 08:47:17 -0000
@@ -89,8 +89,6 @@
 DUMMY(pselect6);
 DUMMY(ppoll);
 DUMMY(unshare);
-DUMMY(set_robust_list);
-DUMMY(get_robust_list);
 DUMMY(splice);
 DUMMY(sync_file_range);
 DUMMY(tee);
Index: i386/linux/linux_proto.h
===================================================================
RCS file: /home/ncvs/src/sys/i386/linux/linux_proto.h,v
retrieving revision 1.98
diff -u -r1.98 linux_proto.h
--- i386/linux/linux_proto.h	16 Apr 2008 19:27:36 -0000	1.98
+++ i386/linux/linux_proto.h	26 Apr 2008 08:49:00 -0000
@@ -2,7 +2,7 @@
  * System call prototypes.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/i386/linux/linux_proto.h,v 1.98 2008/04/16 19:27:36 jkim Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.92 2008/04/16 19:25:39 jkim Exp 
  */
 
@@ -988,10 +988,13 @@
 	register_t dummy;
 };
 struct linux_set_robust_list_args {
-	register_t dummy;
+	char head_l_[PADL_(struct linux_robust_list_head *)]; struct linux_robust_list_head * head; char head_r_[PADR_(struct linux_robust_list_head *)];
+	char len_l_[PADL_(l_size_t)]; l_size_t len; char len_r_[PADR_(l_size_t)];
 };
 struct linux_get_robust_list_args {
-	register_t dummy;
+	char pid_l_[PADL_(l_int)]; l_int pid; char pid_r_[PADR_(l_int)];
+	char head_l_[PADL_(struct linux_robust_list_head **)]; struct linux_robust_list_head ** head; char head_r_[PADR_(struct linux_robust_list_head **)];
+	char len_l_[PADL_(l_size_t *)]; l_size_t * len; char len_r_[PADR_(l_size_t *)];
 };
 struct linux_splice_args {
 	register_t dummy;
Index: i386/linux/linux_syscall.h
===================================================================
RCS file: /home/ncvs/src/sys/i386/linux/linux_syscall.h,v
retrieving revision 1.90
diff -u -r1.90 linux_syscall.h
--- i386/linux/linux_syscall.h	16 Apr 2008 19:27:36 -0000	1.90
+++ i386/linux/linux_syscall.h	26 Apr 2008 08:49:00 -0000
@@ -2,7 +2,7 @@
  * System call numbers.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/i386/linux/linux_syscall.h,v 1.90 2008/04/16 19:27:36 jkim Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.92 2008/04/16 19:25:39 jkim Exp 
  */
 
Index: i386/linux/linux_sysent.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/linux/linux_sysent.c,v
retrieving revision 1.97
diff -u -r1.97 linux_sysent.c
--- i386/linux/linux_sysent.c	16 Apr 2008 19:27:36 -0000	1.97
+++ i386/linux/linux_sysent.c	26 Apr 2008 08:49:00 -0000
@@ -2,7 +2,7 @@
  * System call switch table.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/i386/linux/linux_sysent.c,v 1.97 2008/04/16 19:27:36 jkim Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/i386/linux/syscalls.master,v 1.92 2008/04/16 19:25:39 jkim Exp 
  */
 
@@ -329,8 +329,8 @@
 	{ 0, (sy_call_t *)linux_pselect6, AUE_NULL, NULL, 0, 0 },	/* 308 = linux_pselect6 */
 	{ 0, (sy_call_t *)linux_ppoll, AUE_NULL, NULL, 0, 0 },	/* 309 = linux_ppoll */
 	{ 0, (sy_call_t *)linux_unshare, AUE_NULL, NULL, 0, 0 },	/* 310 = linux_unshare */
-	{ 0, (sy_call_t *)linux_set_robust_list, AUE_NULL, NULL, 0, 0 },	/* 311 = linux_set_robust_list */
-	{ 0, (sy_call_t *)linux_get_robust_list, AUE_NULL, NULL, 0, 0 },	/* 312 = linux_get_robust_list */
+	{ AS(linux_set_robust_list_args), (sy_call_t *)linux_set_robust_list, AUE_NULL, NULL, 0, 0 },	/* 311 = linux_set_robust_list */
+	{ AS(linux_get_robust_list_args), (sy_call_t *)linux_get_robust_list, AUE_NULL, NULL, 0, 0 },	/* 312 = linux_get_robust_list */
 	{ 0, (sy_call_t *)linux_splice, AUE_NULL, NULL, 0, 0 },	/* 313 = linux_splice */
 	{ 0, (sy_call_t *)linux_sync_file_range, AUE_NULL, NULL, 0, 0 },	/* 314 = linux_sync_file_range */
 	{ 0, (sy_call_t *)linux_tee, AUE_NULL, NULL, 0, 0 },		/* 315 = linux_tee */
Index: i386/linux/syscalls.master
===================================================================
RCS file: /home/ncvs/src/sys/i386/linux/syscalls.master,v
retrieving revision 1.92
diff -u -r1.92 syscalls.master
--- i386/linux/syscalls.master	16 Apr 2008 19:25:39 -0000	1.92
+++ i386/linux/syscalls.master	26 Apr 2008 08:47:17 -0000
@@ -503,8 +503,10 @@
 308	AUE_NULL	STD	{ int linux_pselect6(void); }
 309	AUE_NULL	STD	{ int linux_ppoll(void); }
 310	AUE_NULL	STD	{ int linux_unshare(void); }
-311	AUE_NULL	STD	{ int linux_set_robust_list(void); }
-312	AUE_NULL	STD	{ int linux_get_robust_list(void); }
+311	AUE_NULL	STD	{ int linux_set_robust_list(struct linux_robust_list_head *head, \
+					l_size_t len); }
+312	AUE_NULL	STD	{ int linux_get_robust_list(l_int pid, struct linux_robust_list_head **head, \
+					l_size_t *len); }
 313	AUE_NULL	STD	{ int linux_splice(void); }
 314	AUE_NULL	STD	{ int linux_sync_file_range(void); }
 315	AUE_NULL	STD	{ int linux_tee(void); }
