From patchwork Tue Nov 8 20:29:52 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 17306 Received: (qmail 124832 invoked by alias); 8 Nov 2016 20:30:41 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 124403 invoked by uid 89); 8 Nov 2016 20:30:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_LOW, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy=Owners, directions, 3017, sparc64 X-HELO: mail-ua0-f176.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=KZex2IhvmKtemO22ARHD+K/pA+f5J0r4D0iTQQrsjWw=; b=UAhJ5F73xp7gLwYX0To9Bz3hd8ICoUN1NL9Ofyi59GSA2e17ybtjSDwdRi/WMRacy3 1Llu9vZirz80hYUE+DXfs/2eFY9E3UsRtPdH32xMk3kuM+pkadO6pbON20pUJDIu6f9u XaevuHZ9yqfmxjfZwPmzGtTjWeqlLF9eXD5FNYUJSbTkJuqKhp2MNIpkZ0r3Q3rtBwNv P7/uKGRwogggrNrI97gIVwKI17dtzhTXrHC1U5B7To4LHxoh9ke3bfkU9hxVSvuYv8BQ rJIg+M3xU/dspjb1WiOq87u1/iq4MpXvN05PcQjCTSFBgKEGQni35FZXZ0qRxWYwylus Xveg== X-Gm-Message-State: ABUngvdflSjRa6bXPkc1+P7gFBbDw3fkFIE8KnG6g+qSoVHM7CIspbzI6j2xUsBZlJZO3Nzi X-Received: by 10.176.3.143 with SMTP id 15mr8049272uau.10.1478637022589; Tue, 08 Nov 2016 12:30:22 -0800 (PST) From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH v3 02/17] Refactor Linux ipc_priv header Date: Tue, 8 Nov 2016 18:29:52 -0200 Message-Id: <1478637007-31212-3-git-send-email-adhemerval.zanella@linaro.org> In-Reply-To: <1478637007-31212-1-git-send-email-adhemerval.zanella@linaro.org> References: <1478637007-31212-1-git-send-email-adhemerval.zanella@linaro.org> This patch refactor current ipc_priv.h Linux headers in two directions: - Remove cross platform references (for instance alpha including powerpc definition) and add required definition for each required port. The idea is to avoid tie one architecture definition with another and make platform change independent. - Move all common definitions (the ipc syscall commands) on a common header, ipc_ops.h. - Add all architecture ABI peculiarities to ipc_priv, including calling conventions and __IPC_64 value. Since current IPC_64 default now on kernel is 0x100, some architectures require it to 0 (for instance x86_64) while others continue to use a non zero default regardless (powerpc). * sysdeps/unix/sysv/linux/aarch64/ipc_priv.h: New file. * sysdeps/unix/sysv/linux/alpha/ipc_priv.h: Avoid included other arch definition and define its own. * sysdeps/unix/sysv/linux/ipc_ops.h: New file. * sysdeps/unix/sysv/linux/x86_64/ipc_priv.h: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h: Likewise. * sysdeps/unix/sysv/linux/mips/ipc_priv.h: Remove file. * sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h: New file. * sysdeps/unix/sysv/linux/ipc_priv.h: Move ipc syscall operation definitions to common header. * sysdeps/unix/sysv/linux/powerpc/ipc_priv.h: Use common syscall operation from ipc_ops.h. --- ChangeLog | 12 +++++++ sysdeps/unix/sysv/linux/aarch64/ipc_priv.h | 32 ++++++++++++++++++ sysdeps/unix/sysv/linux/alpha/ipc_priv.h | 33 ++++++++++++++++++- sysdeps/unix/sysv/linux/ipc_ops.h | 30 +++++++++++++++++ sysdeps/unix/sysv/linux/ipc_priv.h | 23 +++++-------- sysdeps/unix/sysv/linux/mips/ipc_priv.h | 1 - sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h | 32 ++++++++++++++++++ sysdeps/unix/sysv/linux/powerpc/ipc_priv.h | 23 +++++-------- sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h | 41 ++++++++++++++++++++++++ sysdeps/unix/sysv/linux/x86_64/ipc_priv.h | 32 ++++++++++++++++++ 10 files changed, 227 insertions(+), 32 deletions(-) create mode 100644 sysdeps/unix/sysv/linux/aarch64/ipc_priv.h create mode 100644 sysdeps/unix/sysv/linux/ipc_ops.h delete mode 100644 sysdeps/unix/sysv/linux/mips/ipc_priv.h create mode 100644 sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h create mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h create mode 100644 sysdeps/unix/sysv/linux/x86_64/ipc_priv.h diff --git a/ChangeLog b/ChangeLog index 77c94dc..8520a7b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 2016-11-08 Adhemerval Zanella + * sysdeps/unix/sysv/linux/aarch64/ipc_priv.h: New file. + * sysdeps/unix/sysv/linux/alpha/ipc_priv.h: Avoid included other arch + definition and define its own. + * sysdeps/unix/sysv/linux/ipc_ops.h: New file. + * sysdeps/unix/sysv/linux/x86_64/ipc_priv.h: Likewise. + * sysdeps/unix/sysv/linux/mips/ipc_priv.h: Remove file. + * sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h: New file. + * sysdeps/unix/sysv/linux/ipc_priv.h: Move ipc syscall operation + definitions to common header. + * sysdeps/unix/sysv/linux/powerpc/ipc_priv.h: Use common syscall + operation from ipc_ops.h. + * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_SYSVIPC_SYSCALL): New define. * sysdeps/unix/sysv/linux/i386/kernel-features.h diff --git a/sysdeps/unix/sysv/linux/aarch64/ipc_priv.h b/sysdeps/unix/sysv/linux/aarch64/ipc_priv.h new file mode 100644 index 0000000..1a31396 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ipc_priv.h @@ -0,0 +1,32 @@ +/* Old SysV permission definition for Linux. AArch64 version. + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include /* For __key_t */ + +#define __IPC_64 0x0 + +struct __old_ipc_perm +{ + __key_t __key; /* Key. */ + unsigned int uid; /* Owner's user ID. */ + unsigned int gid; /* Owner's group ID. */ + unsigned int cuid; /* Creator's user ID. */ + unsigned int cgid; /* Creator's group ID. */ + unsigned int mode; /* Read/write permission. */ + unsigned short int __seq; /* Sequence number. */ +}; diff --git a/sysdeps/unix/sysv/linux/alpha/ipc_priv.h b/sysdeps/unix/sysv/linux/alpha/ipc_priv.h index 67883be..06444fc 100644 --- a/sysdeps/unix/sysv/linux/alpha/ipc_priv.h +++ b/sysdeps/unix/sysv/linux/alpha/ipc_priv.h @@ -1 +1,32 @@ -#include +/* Old SysV permission definition for Linux. Alpha version. + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include /* For __key_t */ + +#define __IPC_64 0x100 + +struct __old_ipc_perm +{ + __key_t __key; /* Key. */ + unsigned int uid; /* Owner's user ID. */ + unsigned int gid; /* Owner's group ID. */ + unsigned int cuid; /* Creator's user ID. */ + unsigned int cgid; /* Creator's group ID. */ + unsigned int mode; /* Read/write permission. */ + unsigned short int __seq; /* Sequence number. */ +}; diff --git a/sysdeps/unix/sysv/linux/ipc_ops.h b/sysdeps/unix/sysv/linux/ipc_ops.h new file mode 100644 index 0000000..ea3028c --- /dev/null +++ b/sysdeps/unix/sysv/linux/ipc_ops.h @@ -0,0 +1,30 @@ +/* The codes for the functions to use the ipc syscall multiplexer. + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#define IPCOP_semop 1 +#define IPCOP_semget 2 +#define IPCOP_semctl 3 +#define IPCOP_semtimedop 4 +#define IPCOP_msgsnd 11 +#define IPCOP_msgrcv 12 +#define IPCOP_msgget 13 +#define IPCOP_msgctl 14 +#define IPCOP_shmat 21 +#define IPCOP_shmdt 22 +#define IPCOP_shmget 23 +#define IPCOP_shmctl 24 diff --git a/sysdeps/unix/sysv/linux/ipc_priv.h b/sysdeps/unix/sysv/linux/ipc_priv.h index 7ded463..9b97f00 100644 --- a/sysdeps/unix/sysv/linux/ipc_priv.h +++ b/sysdeps/unix/sysv/linux/ipc_priv.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1995-2016 Free Software Foundation, Inc. +/* Old SysV permission definition for Linux. Default version. + Copyright (C) 1995-2016 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -15,7 +16,7 @@ License along with the GNU C Library; if not, see . */ -#include +#include /* For __key_t */ #define __IPC_64 0x100 @@ -30,17 +31,9 @@ struct __old_ipc_perm unsigned short int __seq; /* Sequence number. */ }; +#define SEMCTL_ARG_ADDRESS(__arg) &__arg.array -/* The codes for the functions to use the ipc syscall multiplexer. */ -#define IPCOP_semop 1 -#define IPCOP_semget 2 -#define IPCOP_semctl 3 -#define IPCOP_semtimedop 4 -#define IPCOP_msgsnd 11 -#define IPCOP_msgrcv 12 -#define IPCOP_msgget 13 -#define IPCOP_msgctl 14 -#define IPCOP_shmat 21 -#define IPCOP_shmdt 22 -#define IPCOP_shmget 23 -#define IPCOP_shmctl 24 +#define MSGRCV_ARGS(__msgp, __msgtyp) \ + ((long int []){ (long int) __msgp, __msgtyp }) + +#include diff --git a/sysdeps/unix/sysv/linux/mips/ipc_priv.h b/sysdeps/unix/sysv/linux/mips/ipc_priv.h deleted file mode 100644 index 67883be..0000000 --- a/sysdeps/unix/sysv/linux/mips/ipc_priv.h +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h b/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h new file mode 100644 index 0000000..9f47d89 --- /dev/null +++ b/sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h @@ -0,0 +1,32 @@ +/* Old SysV permission definition for Linux. MIPS64 version. + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include + +#define __IPC_64 0x100 + +struct __old_ipc_perm +{ + __key_t __key; /* Key. */ + int uid; /* Owner's user ID. */ + int gid; /* Owner's group ID. */ + int cuid; /* Creator's user ID. */ + int cgid; /* Creator's group ID. */ + int mode; /* Read/write permission. */ + unsigned short int __seq; /* Sequence number. */ +}; diff --git a/sysdeps/unix/sysv/linux/powerpc/ipc_priv.h b/sysdeps/unix/sysv/linux/powerpc/ipc_priv.h index baae7ab..4f72f58 100644 --- a/sysdeps/unix/sysv/linux/powerpc/ipc_priv.h +++ b/sysdeps/unix/sysv/linux/powerpc/ipc_priv.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1995-2016 Free Software Foundation, Inc. +/* Old SysV permission definition for Linux. PowerPC version. + Copyright (C) 1995-2016 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -15,7 +16,7 @@ License along with the GNU C Library; if not, see . */ -#include +#include /* For __key_t */ #define __IPC_64 0x100 @@ -30,17 +31,9 @@ struct __old_ipc_perm unsigned short int __seq; /* Sequence number. */ }; +#define SEMCTL_ARG_ADDRESS(__arg) &__arg.array -/* The codes for the functions to use the ipc syscall multiplexer. */ -#define IPCOP_semop 1 -#define IPCOP_semget 2 -#define IPCOP_semctl 3 -#define IPCOP_semtimedop 4 -#define IPCOP_msgsnd 11 -#define IPCOP_msgrcv 12 -#define IPCOP_msgget 13 -#define IPCOP_msgctl 14 -#define IPCOP_shmat 21 -#define IPCOP_shmdt 22 -#define IPCOP_shmget 23 -#define IPCOP_shmctl 24 +#define MSGRCV_ARGS(__msgp, __msgtyp) \ + ((long int []){ (long int) __msgp, __msgtyp }) + +#include diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h b/sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h new file mode 100644 index 0000000..386ff8a --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h @@ -0,0 +1,41 @@ +/* Old SysV permission definition for Linux. x86_64 version. + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include /* For __key_t */ + +#define __IPC_64 0x0 + +struct __old_ipc_perm +{ + __key_t __key; /* Key. */ + unsigned int uid; /* Owner's user ID. */ + unsigned int gid; /* Owner's group ID. */ + unsigned int cuid; /* Creator's user ID. */ + unsigned int cgid; /* Creator's group ID. */ + unsigned int mode; /* Read/write permission. */ + unsigned short int __seq; /* Sequence number. */ +}; + +/* SPARC semctl multiplex syscall expects the union pointed address, not + the union address itself. */ +#define SEMCTL_ARG_ADDRESS(__arg) __arg.array + +/* Also for msgrcv it does not use the kludge on final 2 arguments. */ +#define MSGRCV_ARGS(__msgp, __msgtyp) __msgp, __msgtyp + +#include diff --git a/sysdeps/unix/sysv/linux/x86_64/ipc_priv.h b/sysdeps/unix/sysv/linux/x86_64/ipc_priv.h new file mode 100644 index 0000000..d39db53 --- /dev/null +++ b/sysdeps/unix/sysv/linux/x86_64/ipc_priv.h @@ -0,0 +1,32 @@ +/* Old SysV permission definition for Linux. x86_64 version. + Copyright (C) 2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include /* For __key_t */ + +#define __IPC_64 0x0 + +struct __old_ipc_perm +{ + __key_t __key; /* Key. */ + unsigned short uid; /* Owner's user ID. */ + unsigned short gid; /* Owner's group ID. */ + unsigned short cuid; /* Creator's user ID. */ + unsigned short cgid; /* Creator's group ID. */ + unsigned short mode; /* Read/write permission. */ + unsigned short int __seq; /* Sequence number. */ +};