ipc: prefer SYS_ipc when it is defined
authorSzabolcs Nagy <nsz@port70.net>
Thu, 9 May 2019 22:49:28 +0000 (22:49 +0000)
committerRich Felker <dalias@aerifal.cx>
Mon, 1 Jul 2019 18:17:59 +0000 (14:17 -0400)
Linux v5.1 introduced ipc syscalls on targets where previously only
SYS_ipc was available, change the logic such that the ipc code keeps
using SYS_ipc which works backward compatibly on older kernels.

This changes behaviour on microblaze which had both mechanisms, now
SYS_ipc will be used instead of separate syscalls.

12 files changed:
src/ipc/msgctl.c
src/ipc/msgget.c
src/ipc/msgrcv.c
src/ipc/msgsnd.c
src/ipc/semctl.c
src/ipc/semget.c
src/ipc/semop.c
src/ipc/semtimedop.c
src/ipc/shmat.c
src/ipc/shmctl.c
src/ipc/shmdt.c
src/ipc/shmget.c

index ea9b23377e47dad684ae1e7cc72df2cab81faf4c..868197f61738ed9ead09929be86197926ae492ad 100644 (file)
@@ -17,7 +17,7 @@ int msgctl(int q, int cmd, struct msqid_ds *buf)
                buf = &tmp;
        }
 #endif
-#ifdef SYS_msgctl
+#ifndef SYS_ipc
        int r = __syscall(SYS_msgctl, q, cmd | IPC_64, buf);
 #else
        int r = __syscall(SYS_ipc, IPCOP_msgctl, q, cmd | IPC_64, 0, buf, 0);
index 9dfbc4eabc4b9d6017f6f48585143ae9433a6280..30a4b42b854c2f257de28587db2e7b9efd805131 100644 (file)
@@ -4,7 +4,7 @@
 
 int msgget(key_t k, int flag)
 {
-#ifdef SYS_msgget
+#ifndef SYS_ipc
        return syscall(SYS_msgget, k, flag);
 #else
        return syscall(SYS_ipc, IPCOP_msgget, k, flag);
index 0a344e5677a251ca464911c1393ad4de9b9c0425..9d1034b145012cd76e2613d5d7e7f55ab0c3787a 100644 (file)
@@ -4,7 +4,7 @@
 
 ssize_t msgrcv(int q, void *m, size_t len, long type, int flag)
 {
-#ifdef SYS_msgrcv
+#ifndef SYS_ipc
        return syscall_cp(SYS_msgrcv, q, m, len, type, flag);
 #else
        return syscall_cp(SYS_ipc, IPCOP_msgrcv, q, len, flag, ((long[]){ (long)m, type }));
index e1abde3abc3211e8f239d4696bc4ebf37f57019a..99bb17e94acab0e1c9afd07f452d1ca88b4dff16 100644 (file)
@@ -4,7 +4,7 @@
 
 int msgsnd(int q, const void *m, size_t len, int flag)
 {
-#ifdef SYS_msgsnd
+#ifndef SYS_ipc
        return syscall_cp(SYS_msgsnd, q, m, len, flag);
 #else
        return syscall_cp(SYS_ipc, IPCOP_msgsnd, q, len, flag, m);
index 941e28136adb5f25b3ad289e3fd541b057e0a3ad..ce1fb164fa8114bee5511c554b12ab0edd557aa3 100644 (file)
@@ -33,7 +33,7 @@ int semctl(int id, int num, int cmd, ...)
                arg.buf = &tmp;
        }
 #endif
-#ifdef SYS_semctl
+#ifndef SYS_ipc
        int r = __syscall(SYS_semctl, id, num, cmd | IPC_64, arg.buf);
 #else
        int r = __syscall(SYS_ipc, IPCOP_semctl, id, num, cmd | IPC_64, &arg.buf);
index c4a559db1b0ec1316dc2fa9bc47a538ea552d94a..2cdf626b500239d8a7427b23f284698aeea6cbea 100644 (file)
@@ -11,7 +11,7 @@ int semget(key_t key, int n, int fl)
         * n fits in the correct (per POSIX) userspace type, so
         * we have to check here. */
        if (n > USHRT_MAX) return __syscall_ret(-EINVAL);
-#ifdef SYS_semget
+#ifndef SYS_ipc
        return syscall(SYS_semget, key, n, fl);
 #else
        return syscall(SYS_ipc, IPCOP_semget, key, n, fl);
index 8046e43714d08698af71fb698d7796b90d6020fa..5f0c7deaf308a38723726139bebc4ad03f3576dd 100644 (file)
@@ -4,7 +4,7 @@
 
 int semop(int id, struct sembuf *buf, size_t n)
 {
-#ifdef SYS_semop
+#ifndef SYS_ipc
        return syscall(SYS_semop, id, buf, n);
 #else
        return syscall(SYS_ipc, IPCOP_semop, id, n, 0, buf);
index b0c4cf9f82a79cd8b532c19246d7b315fac91b3e..51e70805314f196238ce29e979f0061df2287d04 100644 (file)
@@ -5,7 +5,7 @@
 
 int semtimedop(int id, struct sembuf *buf, size_t n, const struct timespec *ts)
 {
-#ifdef SYS_semtimedop
+#ifndef SYS_ipc
        return syscall(SYS_semtimedop, id, buf, n, ts);
 #else
        return syscall(SYS_ipc, IPCOP_semtimedop, id, n, 0, buf, ts);
index 38db92f9511486fa5ff69001040678e45579e2d3..8c7407d13f6d8f0a0cb906bc27140c0dabbb2fbd 100644 (file)
@@ -2,7 +2,7 @@
 #include "syscall.h"
 #include "ipc.h"
 
-#ifdef SYS_shmat
+#ifndef SYS_ipc
 void *shmat(int id, const void *addr, int flag)
 {
        return (void *)syscall(SYS_shmat, id, addr, flag);
index c951a58156c92446510e2a98e64ea7a558e2eb83..c2b2bb0d4c44fe68e9b2b4f5797e06573f0f2cd3 100644 (file)
@@ -17,7 +17,7 @@ int shmctl(int id, int cmd, struct shmid_ds *buf)
                buf = &tmp;
        }
 #endif
-#ifdef SYS_shmctl
+#ifndef SYS_ipc
        int r = __syscall(SYS_shmctl, id, cmd | IPC_64, buf);
 #else
        int r = __syscall(SYS_ipc, IPCOP_shmctl, id, cmd | IPC_64, 0, buf, 0);
index d4fac8f183a12281c76280377132de08a965059c..572381378e1d4365255b9015749400645adfa3d8 100644 (file)
@@ -4,7 +4,7 @@
 
 int shmdt(const void *addr)
 {
-#ifdef SYS_shmdt
+#ifndef SYS_ipc
        return syscall(SYS_shmdt, addr);
 #else
        return syscall(SYS_ipc, IPCOP_shmdt, 0, 0, 0, addr);
index b44f9d680a75ad430e12d857d7b9314bc3089fd9..7521b5fa3fcab7ed55260bcca5b7cbe9d6b77482 100644 (file)
@@ -6,7 +6,7 @@
 int shmget(key_t key, size_t size, int flag)
 {
        if (size > PTRDIFF_MAX) size = SIZE_MAX;
-#ifdef SYS_shmget
+#ifndef SYS_ipc
        return syscall(SYS_shmget, key, size, flag);
 #else
        return syscall(SYS_ipc, IPCOP_shmget, key, size, flag);