From: Iain Buclaw Date: Sun, 16 Dec 2018 23:18:25 +0000 (+0000) Subject: libphobos: Merge common version blocks for core.sys.posix.sys.msg. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3b26756ba22b18d9c3d5ef571772bdd283b2fbe2;p=gcc.git libphobos: Merge common version blocks for core.sys.posix.sys.msg. This is a continuation of simplifying C bindings so there aren't dozens of duplicated code for each architecture. For this particular module, it now more closely resembles how glibc arranges msq.h, fixing a couple of targets in the process, notably X32. Backport from upstream druntime 2.084. Reviewed-on: https://github.com/dlang/druntime/pull/2362 From-SVN: r267192 --- diff --git a/libphobos/libdruntime/core/sys/posix/sys/msg.d b/libphobos/libdruntime/core/sys/posix/sys/msg.d index 637df206cce..1957debbda7 100644 --- a/libphobos/libdruntime/core/sys/posix/sys/msg.d +++ b/libphobos/libdruntime/core/sys/posix/sys/msg.d @@ -6,421 +6,200 @@ module core.sys.posix.sys.msg; +import core.sys.posix.config; import core.sys.posix.sys.ipc; -public import core.sys.posix.sys.types; -public import core.stdc.config; +import core.sys.posix.sys.types; +import core.stdc.config; version (CRuntime_Glibc): // Some of these may be from linux kernel headers. extern (C): -public enum MSG_STAT = 11; -public enum MSG_INFO = 12; +version (ARM) version = ARM_Any; +version (AArch64) version = ARM_Any; +version (HPPA) version = HPPA_Any; +version (HPPA64) version = HPPA_Any; +version (MIPS32) version = MIPS_Any; +version (MIPS64) version = MIPS_Any; +version (PPC) version = PPC_Any; +version (PPC64) version = PPC_Any; +version (RISCV32) version = RISCV_Any; +version (RISCV64) version = RISCV_Any; +version (S390) version = IBMZ_Any; +version (SPARC) version = SPARC_Any; +version (SPARC64) version = SPARC_Any; +version (SystemZ) version = IBMZ_Any; + +version (linux) +{ + enum MSG_STAT = 11; + enum MSG_INFO = 12; + + enum MSG_NOERROR = 1 << 12; // octal!10000 + enum MSG_EXCEPT = 2 << 12; // octal!20000 + enum MSG_COPY = 4 << 12; // octal!40000 + + struct msginfo + { + int msgpool; + int msgmap; + int msgmax; + int msgmnb; + int msgmni; + int msgssz; + int msgtql; + ushort msgseg; + } + + version (Alpha) version = GENERICMSQ; + version (ARM_Any) version = GENERICMSQ; + version (IA64) version = GENERICMSQ; + version (IBMZ_Any) version = GENERICMSQ; + version (RISCV_Any) version = GENERICMSQ; + + version (GENERICMSQ) + { + // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/bits/msq-pad.h + private enum MSQ_PAD_AFTER_TIME = (__WORDSIZE == 32); + private enum MSQ_PAD_BEFORE_TIME = false; + } + else version (HPPA_Any) + { + // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/hppa/bits/msq-pad.h + private enum MSQ_PAD_AFTER_TIME = false; + private enum MSQ_PAD_BEFORE_TIME = (__WORDSIZE == 32); + } + else version (MIPS_Any) + { + // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/mips/bits/msq-pad.h + version (LittleEndian) + { + private enum MSQ_PAD_AFTER_TIME = (__WORDSIZE == 32); + private enum MSQ_PAD_BEFORE_TIME = false; + } + else + { + private enum MSQ_PAD_AFTER_TIME = false; + private enum MSQ_PAD_BEFORE_TIME = (__WORDSIZE == 32); + } + } + else version (PPC_Any) + { + // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/powerpc/bits/msq-pad.h + private enum MSQ_PAD_AFTER_TIME = false; + private enum MSQ_PAD_BEFORE_TIME = (__WORDSIZE == 32); + } + else version (SPARC_Any) + { + // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sparc/bits/msq-pad.h + private enum MSQ_PAD_AFTER_TIME = false; + private enum MSQ_PAD_BEFORE_TIME = (__WORDSIZE == 32); + } + else version (X86) + { + // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/x86/bits/msq-pad.h + private enum MSQ_PAD_AFTER_TIME = true; + private enum MSQ_PAD_BEFORE_TIME = false; + } + else version (X86_64) + { + // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/x86/bits/msq-pad.h + private enum MSQ_PAD_AFTER_TIME = false; + private enum MSQ_PAD_BEFORE_TIME = false; + } + else + static assert(0, "unimplemented"); + + // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/bits/msq.h + alias msgqnum_t = ulong_t; + alias msglen_t = ulong_t; + + static if (MSQ_PAD_BEFORE_TIME) + { + struct msqid_ds + { + ipc_perm msg_perm; + c_ulong __glibc_reserved1; + time_t msg_stime; + c_ulong __glibc_reserved2; + time_t msg_rtime; + c_ulong __glibc_reserved3; + time_t msg_ctime; + ulong_t __msg_cbytes; + msgqnum_t msg_qnum; + msglen_t msg_qbytes; + pid_t msg_lspid; + pid_t msg_lrpid; + ulong_t __glibc_reserved4; + ulong_t __glibc_reserved5; + } + } + else static if (MSQ_PAD_AFTER_TIME) + { + struct msqid_ds + { + ipc_perm msg_perm; + time_t msg_stime; + c_ulong __glibc_reserved1; + time_t msg_rtime; + c_ulong __glibc_reserved2; + time_t msg_ctime; + c_ulong __glibc_reserved3; + ulong_t __msg_cbytes; + msgqnum_t msg_qnum; + msglen_t msg_qbytes; + pid_t msg_lspid; + pid_t msg_lrpid; + ulong_t __glibc_reserved4; + ulong_t __glibc_reserved5; + } + } + else + { + struct msqid_ds + { + ipc_perm msg_perm; + time_t msg_stime; + time_t msg_rtime; + time_t msg_ctime; + ulong_t __msg_cbytes; + msgqnum_t msg_qnum; + msglen_t msg_qbytes; + pid_t msg_lspid; + pid_t msg_lrpid; + ulong_t __glibc_reserved4; + ulong_t __glibc_reserved5; + } + } +} +else +{ + // https://sourceware.org/git/?p=glibc.git;a=blob;f=bits/msq.h + enum MSG_NOERROR = 1 << 12; // octal!10000 + + alias msgqnum_t = ushort; + alias msglen_t = ushort; -public enum MSG_NOERROR = 1 << 12; // octal!10000 -public enum MSG_EXCEPT = 2 << 12; // octal!20000 -public enum MSG_COPY = 4 << 12; // octal!40000 - -struct msgbuf -{ - c_long mtype; - char[1] mtext; -} - -struct msginfo -{ - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - ushort msgseg; -} - -version (Alpha) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/alpha/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - struct msqid_ds - { - ipc_perm msg_perm; - time_t msg_stime; - time_t msg_rtime; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved1; - c_ulong __glibc_reserved2; - } -} -else version (HPPA) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/hppa/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - // Assuming word size is 32 - struct msqid_ds - { - ipc_perm msg_perm; - c_ulong __pad1; - time_t msg_stime; - c_ulong __pad2; - time_t msg_rtime; - c_ulong __pad3; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved1; - c_ulong __glibc_reserved2; - } - -} -else version (MIPS32) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/mips/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - struct msqid_ds - { - ipc_perm msg_perm; - version (BigEndian) c_ulong __glibc_reserved1; - time_t msg_stime; - version (LittleEndian) c_ulong __glibc_reserved1; - version (BigEndian) c_ulong __glibc_reserved2; - time_t msg_rtime; - version (LittleEndian) c_ulong __glibc_reserved2; - version (BigEndian) c_ulong __glibc_reserved3; - time_t msg_ctime; - version (LittleEndian) c_ulong __glibc_reserved3; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved4; - c_ulong __glibc_reserved5; - } -} -else version (MIPS64) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/mips/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - struct msqid_ds - { - ipc_perm msg_perm; - time_t msg_stime; - time_t msg_rtime; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved4; - c_ulong __glibc_reserved5; - } -} -else version (PPC) -{ - - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/powerpc/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - struct msqid_ds - { - ipc_perm msg_perm; - c_ulong __glibc_reserved1; - time_t msg_stime; - c_ulong __glibc_reserved2; - time_t msg_rtime; - c_ulong __glibc_reserved3; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved4; - c_ulong __glibc_reserved5; - } -} -else version (PPC64) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/powerpc/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - struct msqid_ds - { - ipc_perm msg_perm; - time_t msg_stime; - time_t msg_rtime; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved4; - c_ulong __glibc_reserved5; - } -} -else version (RISCV32) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/generic/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - struct msqid_ds - { - ipc_perm msg_perm; - c_ulong __glibc_reserved1; - time_t msg_stime; - c_ulong __glibc_reserved2; - time_t msg_rtime; - c_ulong __glibc_reserved3; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved4; - c_ulong __glibc_reserved5; - } -} -else version (RISCV64) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/generic/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - struct msqid_ds - { - ipc_perm msg_perm; - time_t msg_stime; - time_t msg_rtime; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved4; - c_ulong __glibc_reserved5; - } -} -else version (S390) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/s390/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - // Assuming wordsize != 64 - struct msqid_ds - { - ipc_perm msg_perm; - c_ulong __glibc_reserved1; - time_t msg_stime; - c_ulong __glibc_reserved2; - time_t msg_rtime; - c_ulong __glibc_reserved3; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved4; - c_ulong __glibc_reserved5; - } -} -else version (SystemZ) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/s390/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - // Assuming wordsize == 64 struct msqid_ds { ipc_perm msg_perm; time_t msg_stime; time_t msg_rtime; time_t msg_ctime; - c_ulong __msg_cbytes; msgqnum_t msg_qnum; msglen_t msg_qbytes; pid_t msg_lspid; pid_t msg_lrpid; - c_ulong __glibc_reserved4; - c_ulong __glibc_reserved5; } } -else version (SPARC) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sparc/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - // Assuming word size is 32 - struct msqid_ds - { - ipc_perm msg_perm; - c_ulong __pad1; - time_t msg_stime; - c_ulong __pad2; - time_t msg_rtime; - c_ulong __pad3; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved1; - c_ulong __glibc_reserved2; - } -} -else version (SPARC64) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sparc/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - // Assuming word size is 32 - struct msqid_ds - { - ipc_perm msg_perm; - c_ulong __pad1; - time_t msg_stime; - c_ulong __pad2; - time_t msg_rtime; - c_ulong __pad3; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved1; - c_ulong __glibc_reserved2; - } -} -else version (X86) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/x86/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - struct msqid_ds - { - ipc_perm msg_perm; - time_t msg_stime; - time_t msg_rtime; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved4; - c_ulong __glibc_reserved5; - } -} -else version (X86_64) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/x86/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - struct msqid_ds - { - ipc_perm msg_perm; - c_ulong __glibc_reserved1; - time_t msg_stime; - c_ulong __glibc_reserved2; - time_t msg_rtime; - c_ulong __glibc_reserved3; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved4; - c_ulong __glibc_reserved5; - } -} -else version (AArch64) +struct msgbuf { - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/generic/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - struct msqid_ds - { - ipc_perm msg_perm; - time_t msg_stime; - time_t msg_rtime; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved4; - c_ulong __glibc_reserved5; - } + c_long mtype; + char[1] mtext; } -else version (ARM) -{ - // https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/generic/bits/msq.h - alias c_ulong msgqnum_t; - alias c_ulong msglen_t; - - struct msqid_ds - { - ipc_perm msg_perm; - c_ulong __glibc_reserved1; - time_t msg_stime; - c_ulong __glibc_reserved2; - time_t msg_rtime; - c_ulong __glibc_reserved3; - time_t msg_ctime; - c_ulong __msg_cbytes; - msgqnum_t msg_qnum; - msglen_t msg_qbytes; - pid_t msg_lspid; - pid_t msg_lrpid; - c_ulong __glibc_reserved4; - c_ulong __glibc_reserved5; - } -} else - static assert(0, "unimplemented"); - - -public enum MSG_MEM_SCALE = 32; -public enum MSGMNI = 16; -public enum MSGMAX = 8192; -public enum MSGMNB = 16384; -int msgctl (int msqid, int cmd, msqid_ds *__buf); -int msgget ( key_t key, int msgflg ); -ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, c_long msgtyp, int msgflg); -int msgsnd ( int msqid, msgbuf *msgp, int msgsz, int msgflg ); +int msgctl(int msqid, int cmd, msqid_ds* __buf); +int msgget(key_t key, int msgflg); +ssize_t msgrcv(int msqid, void* msgp, size_t msgsz, c_long msgtyp, int msgflg); +int msgsnd(int msqid, msgbuf* msgp, int msgsz, int msgflg);