about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/internal_recvmmsg.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/internal_recvmmsg.S')
-rw-r--r--sysdeps/unix/sysv/linux/internal_recvmmsg.S12
1 files changed, 11 insertions, 1 deletions
diff --git a/sysdeps/unix/sysv/linux/internal_recvmmsg.S b/sysdeps/unix/sysv/linux/internal_recvmmsg.S
index 66c1357940..6b776b9d6a 100644
--- a/sysdeps/unix/sysv/linux/internal_recvmmsg.S
+++ b/sysdeps/unix/sysv/linux/internal_recvmmsg.S
@@ -1,8 +1,18 @@
 #include <kernel-features.h>
 #include <sys/syscall.h>
+
+/* Do not use the recvmmsg syscall on socketcall architectures unless
+   it was added at the same time as the socketcall support or can be
+   assumed to be present.  */
+#if defined __ASSUME_SOCKETCALL \
+    && !defined __ASSUME_RECVMMSG_SYSCALL_WITH_SOCKETCALL \
+    && !defined __ASSUME_RECVMMSG_SYSCALL
+# undef __NR_recvmmsg
+#endif
+
 #if !defined __NR_recvmmsg && defined __NR_socketcall
 # define socket	recvmmsg
-# ifdef __ASSUME_RECVMMSG
+# ifdef __ASSUME_RECVMMSG_SOCKETCALL
 #  define __socket recvmmsg
 # else
 #  define __socket __internal_recvmmsg