move IPC_64 from public bits/ipc.h to syscall_arch.h
authorRich Felker <dalias@aerifal.cx>
Tue, 30 Jul 2019 17:07:55 +0000 (13:07 -0400)
committerRich Felker <dalias@aerifal.cx>
Tue, 30 Jul 2019 18:23:56 +0000 (14:23 -0400)
the definition of the IPC_64 macro controls the interface between libc
and the kernel through syscalls; it's not a public API. the meaning is
rather obscure. long ago, Linux's sysvipc *id_ds structures used
16-bit uids/gids and wrong types for a few other fields. this was in
the libc5 era, before glibc. the IPC_64 flag (64 is a misnomer; it's
more like 32) tells the kernel to use the modern[-ish] versions of the
structures.

the definition of IPC_64 has nothing to do with whether the arch is
32- or 64-bit. rather, due to either historical accident or
intentional obnoxiousness, the kernel only accepts and masks off the
0x100 IPC_64 flag conditional on CONFIG_ARCH_WANT_IPC_PARSE_VERSION,
i.e. for archs that want to provide, or that accidentally provided,
both. for archs which don't define this option, no masking is
performed and commands with the 0x100 bit set will fail as invalid. so
ultimately, the definition is just a matter of matching an arbitrary
switch defined per-arch in the kernel.

16 files changed:
arch/aarch64/bits/ipc.h
arch/aarch64/syscall_arch.h
arch/generic/bits/ipc.h
arch/mips64/bits/ipc.h
arch/or1k/bits/ipc.h
arch/or1k/syscall_arch.h
arch/powerpc/bits/ipc.h
arch/powerpc64/bits/ipc.h
arch/riscv64/bits/ipc.h
arch/riscv64/syscall_arch.h
arch/s390x/bits/ipc.h
arch/x32/bits/ipc.h
arch/x32/syscall_arch.h
arch/x86_64/bits/ipc.h
arch/x86_64/syscall_arch.h
src/ipc/ipc.h

index 6f3328a86a1f7cc10702aecff83ac270d11c8376..ef39a0ca7153cd9e0ec212c8b1f3c26ba2d807bc 100644 (file)
@@ -10,5 +10,3 @@ struct ipc_perm {
        unsigned long __pad1;
        unsigned long __pad2;
 };
-
-#define IPC_64 0
index 25f5ce670ff84a7410d5120141b488cdab0c7b6e..504983aa276a641a4be60ea12733c752b9b49ea1 100644 (file)
@@ -74,3 +74,5 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
 #define VDSO_USEFUL
 #define VDSO_CGT_SYM "__kernel_clock_gettime"
 #define VDSO_CGT_VER "LINUX_2.6.39"
+
+#define IPC_64 0
index 779c42fd7bf5249d1e936f657974e8689ca1b531..40d6f3a2587cf475469eb65b19af5a85e1a11d7f 100644 (file)
@@ -9,5 +9,3 @@ struct ipc_perm {
        long __pad1;
        long __pad2;
 };
-
-#define IPC_64 0x100
index 43a8314e22141145529132788aa84781a3efa41d..df2271686a1c1e1ff1a75a37d2755cd56d1eb3e4 100644 (file)
@@ -10,5 +10,3 @@ struct ipc_perm {
        unsigned long __unused1;
        unsigned long __unused2;
 };
-
-#define IPC_64 0x100
index 3d894e30035c4529987f67765adb11e9faeb689f..40d6f3a2587cf475469eb65b19af5a85e1a11d7f 100644 (file)
@@ -9,5 +9,3 @@ struct ipc_perm {
        long __pad1;
        long __pad2;
 };
-
-#define IPC_64 0
index 5a9b074a02b409a958751f4f22e2d1e375261723..21738ce07e2f44d104162f681ee4be8a1c94ed80 100644 (file)
@@ -111,3 +111,5 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
                                "r23", "r25", "r27", "r29", "r31");
        return r11;
 }
+
+#define IPC_64 0
index 3f2ede07b6d4d4435897b8068be5d34051e5938f..a388d56b5b3e36b7b8f5d2c7b3ac2e34bb6815ad 100644 (file)
@@ -10,6 +10,3 @@ struct ipc_perm {
        long long __pad2;
        long long __pad3;
 };
-
-#define IPC_64 0x100
-
index 3f2ede07b6d4d4435897b8068be5d34051e5938f..a388d56b5b3e36b7b8f5d2c7b3ac2e34bb6815ad 100644 (file)
@@ -10,6 +10,3 @@ struct ipc_perm {
        long long __pad2;
        long long __pad3;
 };
-
-#define IPC_64 0x100
-
index 6f3328a86a1f7cc10702aecff83ac270d11c8376..ef39a0ca7153cd9e0ec212c8b1f3c26ba2d807bc 100644 (file)
@@ -10,5 +10,3 @@ struct ipc_perm {
        unsigned long __pad1;
        unsigned long __pad2;
 };
-
-#define IPC_64 0
index 3e0804efe37fe8413081e54005e0d8638935f8a2..7fd042cd4ad37695f84d87372ff830cf5aa3b22b 100644 (file)
@@ -74,3 +74,5 @@ static inline long __syscall6(long n, long a, long b, long c, long d, long e, lo
 /* We don't have a clock_gettime function.
 #define VDSO_CGT_SYM "__vdso_clock_gettime"
 #define VDSO_CGT_VER "LINUX_2.6" */
+
+#define IPC_64 0
index 4710c12b151d6dc62e228cd739e2e9863a084107..b71be9ec18376c093322094dfb9c9d00368ef864 100644 (file)
@@ -10,5 +10,3 @@ struct ipc_perm {
        unsigned long __pad2;
        unsigned long __pad3;
 };
-
-#define IPC_64 0x100
index 55d2e41a4da4d85716812638d16fc1fb8ba5d0b5..a12380f638dc672080978eb48149b30bddc7ce3e 100644 (file)
@@ -9,5 +9,3 @@ struct ipc_perm {
        long long __pad1;
        long long __pad2;
 };
-
-#define IPC_64 0
index 81d1d0df5e5d0d7d257c83722dee8669c5efe0e8..e0a2216067d27cae5c1f8c4c45a6406e8f3c9f08 100644 (file)
@@ -87,3 +87,5 @@ static __inline long __syscall6(long long n, long long a1, long long a2, long lo
 #define SYS_rt_sigtimedwait_time64 SYS_rt_sigtimedwait
 #define SYS_futex_time64 SYS_futex
 #define SYS_sched_rr_get_interval_time64 SYS_sched_rr_get_interval
+
+#define IPC_64 0
index 3d894e30035c4529987f67765adb11e9faeb689f..40d6f3a2587cf475469eb65b19af5a85e1a11d7f 100644 (file)
@@ -9,5 +9,3 @@ struct ipc_perm {
        long __pad1;
        long __pad2;
 };
-
-#define IPC_64 0
index 54e05ff653527bd52c5e109eb9a74a3cab6e0634..92d5c179217b25418e257b2fd1b563abeeff6f65 100644 (file)
@@ -66,3 +66,5 @@ static __inline long __syscall6(long n, long a1, long a2, long a3, long a4, long
 #define VDSO_CGT_VER "LINUX_2.6"
 #define VDSO_GETCPU_SYM "__vdso_getcpu"
 #define VDSO_GETCPU_VER "LINUX_2.6"
+
+#define IPC_64 0
index 30ab939ad6b9a2c4e4c9ebca7ec8cf3c6fc3cc38..36f3e2132455cc86ddeabbd1d33755df496d921b 100644 (file)
@@ -1,3 +1,5 @@
+#include "syscall.h"
+
 #define IPCOP_semop      1
 #define IPCOP_semget     2
 #define IPCOP_semctl     3
@@ -10,3 +12,7 @@
 #define IPCOP_shmdt     22
 #define IPCOP_shmget    23
 #define IPCOP_shmctl    24
+
+#ifndef IPC_64
+#define IPC_64 0x100
+#endif