]> sourceware.org Git - glibc.git/commitdiff
Refactor Linux ipc_priv header
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 7 Nov 2016 19:29:30 +0000 (17:29 -0200)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 28 Dec 2016 22:28:56 +0000 (20:28 -0200)
Some architectures support the old-style IPC and require IPC_64 equal to
0x100 to be passed along SysV IPC syscalls, while new architectures should
default to new IPC version (without the flags being set).

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.

* 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
sysdeps/unix/sysv/linux/aarch64/ipc_priv.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/alpha/ipc_priv.h
sysdeps/unix/sysv/linux/ipc_ops.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/ipc_priv.h
sysdeps/unix/sysv/linux/mips/ipc_priv.h [deleted file]
sysdeps/unix/sysv/linux/mips/mips64/ipc_priv.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/powerpc/ipc_priv.h
sysdeps/unix/sysv/linux/sparc/sparc64/ipc_priv.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/x86_64/ipc_priv.h [new file with mode: 0644]

index e942c298f38b9ef526e95ea6101a697d8e3353c0..4ba8fee56a6bcfdc640cc753cba13259741aa49b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2016-12-28  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
+       * 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_DIRECT_SYSVIPC_SYSCALLS): 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 (file)
index 0000000..f73530c
--- /dev/null
@@ -0,0 +1,21 @@
+/* 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
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sys/ipc.h>  /* For __key_t  */
+
+#define __IPC_64       0x0
index 67883be101ff62bb4b8938c4cd79ac6be3bec674..06444fc322f51b12a13d0070e42d4778935fd5ad 100644 (file)
@@ -1 +1,32 @@
-#include <sysdeps/unix/sysv/linux/powerpc/ipc_priv.h>
+/* 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
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sys/ipc.h>  /* 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 (file)
index 0000000..ea3028c
--- /dev/null
@@ -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
+   <http://www.gnu.org/licenses/>.  */
+
+#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
index 7ded4638a3d33d2b6cd8ae12fcb87f6f01a40df5..9b97f002613fa300f122413a85c600b5ade7392a 100644 (file)
@@ -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
    <http://www.gnu.org/licenses/>.  */
 
-#include <sys/ipc.h>
+#include <sys/ipc.h>  /* 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 <ipc_ops.h>
diff --git a/sysdeps/unix/sysv/linux/mips/ipc_priv.h b/sysdeps/unix/sysv/linux/mips/ipc_priv.h
deleted file mode 100644 (file)
index 67883be..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/powerpc/ipc_priv.h>
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 (file)
index 0000000..9f47d89
--- /dev/null
@@ -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
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sys/ipc.h>
+
+#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.  */
+};
index baae7ab882b793f404b02b3f60d16718279e87dc..4f72f58a09c1180519fdc0b3eb023d76a1e4c522 100644 (file)
@@ -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
    <http://www.gnu.org/licenses/>.  */
 
-#include <sys/ipc.h>
+#include <sys/ipc.h>  /* 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 <ipc_ops.h>
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 (file)
index 0000000..386ff8a
--- /dev/null
@@ -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
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sys/ipc.h>  /* 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 <ipc_ops.h>
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 (file)
index 0000000..d39db53
--- /dev/null
@@ -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
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sys/ipc.h>  /* 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.  */
+};
This page took 0.177966 seconds and 5 git commands to generate.