Author: brooks
Date: Fri Feb 16 01:33:01 2018
New Revision: 329348
URL: https://svnweb.freebsd.org/changeset/base/329348

Log:
  Get rid of the requirement to include SysV IPC headers with _KERNEL
  defined in ipcrm by introducing _WANT_SYSVxxx_INTERNALS defines.
  
  Reviewed by:  jhb
  Sponsored by: DARPA, AFRL
  Differential Revision:        https://reviews.freebsd.org/D14271

Modified:
  head/sys/sys/ipc.h
  head/sys/sys/msg.h
  head/sys/sys/sem.h
  head/sys/sys/shm.h
  head/usr.bin/ipcrm/ipcrm.c
  head/usr.bin/ipcs/ipc.h

Modified: head/sys/sys/ipc.h
==============================================================================
--- head/sys/sys/ipc.h  Fri Feb 16 01:08:32 2018        (r329347)
+++ head/sys/sys/ipc.h  Fri Feb 16 01:33:01 2018        (r329348)
@@ -119,12 +119,14 @@ struct ipc_perm {
 #define        IPC_INFO        3       /* get info */
 #endif
 
-#ifdef _KERNEL
+#if defined(_KERNEL) || defined(_WANT_SYSVIPC_INTERNALS)
 /* Macros to convert between ipc ids and array indices or sequence ids */
 #define        IPCID_TO_IX(id)         ((id) & 0xffff)
 #define        IPCID_TO_SEQ(id)        (((id) >> 16) & 0xffff)
 #define        IXSEQ_TO_IPCID(ix,perm) (((perm.seq) << 16) | (ix & 0xffff))
+#endif
 
+#ifdef _KERNEL
 struct thread;
 struct proc;
 struct vmspace;

Modified: head/sys/sys/msg.h
==============================================================================
--- head/sys/sys/msg.h  Fri Feb 16 01:08:32 2018        (r329347)
+++ head/sys/sys/msg.h  Fri Feb 16 01:33:01 2018        (r329348)
@@ -25,6 +25,9 @@
 
 #include <sys/cdefs.h>
 #include <sys/_types.h>
+#ifdef _WANT_SYSVMSG_INTERNALS
+#define        _WANT_SYSVIPC_INTERNALS
+#endif
 #include <sys/ipc.h>
 
 /*
@@ -116,7 +119,6 @@ struct mymsg {
 #endif
 
 #ifdef _KERNEL
-
 struct msg {
        struct  msg *msg_next;  /* next msg in the chain */
        long    msg_type;       /* type of this message */
@@ -126,7 +128,9 @@ struct msg {
        short   msg_spot;       /* location of start of msg in buffer */
        struct  label *label;   /* MAC Framework label */
 };
+#endif
 
+#if defined(_KERNEL) || defined(_WANT_SYSVMSG_INTERNALS)
 /*
  * Based on the configuration parameters described in an SVR2 (yes, two)
  * config(1m) man page.
@@ -145,7 +149,6 @@ struct msginfo {
        int     msgssz;         /* size of a message segment (see note) */
        int     msgseg;         /* number of message segments */
 };
-extern struct msginfo  msginfo;
 
 /*
  * Kernel wrapper for the user-level structure.
@@ -162,10 +165,13 @@ struct msqid_kernel {
        struct  label *label;   /* MAC label */
        struct  ucred *cred;    /* creator's credentials */
 };
+#endif
 
-#endif /* _KERNEL */
+#ifdef _KERNEL
+extern struct msginfo  msginfo;
 
-#if !defined(_KERNEL) || defined(_WANT_MSG_PROTOTYPES)
+#else /* _KERNEL */
+
 __BEGIN_DECLS
 int msgctl(int, int, struct msqid_ds *);
 int msgget(key_t, int);
@@ -175,7 +181,6 @@ int msgsnd(int, const void *, size_t, int);
 int msgsys(int, ...);
 #endif
 __END_DECLS
-
-#endif /* !_KERNEL || _WANT_MSG_PROTOTYPES  */
+#endif /* !_KERNEL */
 
 #endif /* !_SYS_MSG_H_ */

Modified: head/sys/sys/sem.h
==============================================================================
--- head/sys/sys/sem.h  Fri Feb 16 01:08:32 2018        (r329347)
+++ head/sys/sys/sem.h  Fri Feb 16 01:33:01 2018        (r329348)
@@ -10,6 +10,9 @@
 #ifndef _SYS_SEM_H_
 #define _SYS_SEM_H_
 
+#ifdef _WANT_SYSVSEM_INTERNALS
+#define        _WANT_SYSVIPC_INTERNALS
+#endif
 #include <sys/ipc.h>
 
 #ifndef _PID_T_DECLARED
@@ -101,8 +104,7 @@ union semun {
 #define SEM_A          IPC_W   /* alter permission */
 #define SEM_R          IPC_R   /* read permission */
 
-#ifdef _KERNEL
-
+#if defined(_KERNEL) || defined(_WANT_SYSVSEM_INTERNALS)
 /*
  * semaphore info struct
  */
@@ -117,7 +119,6 @@ struct seminfo {
        int     semvmx;         /* semaphore maximum value */
        int     semaem;         /* adjust on exit max value */
 };
-extern struct seminfo  seminfo;
 
 /*
  * Kernel wrapper for the user-level structure
@@ -131,15 +132,17 @@ struct semid_kernel {
 /* internal "mode" bits */
 #define        SEM_ALLOC       01000   /* semaphore is allocated */
 #define        SEM_DEST        02000   /* semaphore will be destroyed on last 
detach */
+#endif
 
+#ifdef _KERNEL
+extern struct seminfo  seminfo;
 /*
  * Process sem_undo vectors at proc exit.
  */
 void   semexit(struct proc *p);
 
-#endif /* _KERNEL */
+#else /* !_KERNEL */
 
-#if !defined(_KERNEL) || defined(_WANT_SEM_PROTOTYPES)
 __BEGIN_DECLS
 #if __BSD_VISIBLE
 int semsys(int, ...);
@@ -149,6 +152,6 @@ int semget(key_t, int, int);
 int semop(int, struct sembuf *, size_t);
 __END_DECLS
 
-#endif /* !_KERNEL || _WANT_SEM_PROTOTYPES */
+#endif /* !_KERNEL */
 
 #endif /* !_SYS_SEM_H_ */

Modified: head/sys/sys/shm.h
==============================================================================
--- head/sys/sys/shm.h  Fri Feb 16 01:08:32 2018        (r329347)
+++ head/sys/sys/shm.h  Fri Feb 16 01:33:01 2018        (r329348)
@@ -42,6 +42,9 @@
 #define _SYS_SHM_H_
 
 #include <sys/cdefs.h>
+#ifdef _WANT_SYSVSHM_INTERNALS
+#define        _WANT_SYSVIPC_INTERNALS
+#endif
 #include <sys/ipc.h>
 #include <sys/_types.h>
 
@@ -107,9 +110,7 @@ struct shmid_ds {
        time_t          shm_ctime;      /* time of last change by shmctl() */
 };
 
-#ifdef _KERNEL
-#include <vm/vm.h>
-
+#if defined(_KERNEL) || defined(_WANT_SYSVSHM_INTERNALS)
 /*
  * System 5 style catch-all structure for shared memory constants that
  * might be of interest to user programs.  Do we really want/need this?
@@ -122,19 +123,20 @@ struct shminfo {
        u_long  shmall;         /* max amount of shared memory (pages) */
 };
 
+struct vm_object;
+
 /* 
  * Add a kernel wrapper to the shmid_ds struct so that private info (like the
  * MAC label) can be added to it, without changing the user interface.
  */
 struct shmid_kernel {
        struct shmid_ds u;
-       vm_object_t object;
+       struct vm_object *object;
        struct label *label;    /* MAC label */
        struct ucred *cred;     /* creator's credendials */
 };
+#endif
 
-extern struct shminfo  shminfo;
-
 struct shm_info {
        int used_ids;
        unsigned long shm_tot;
@@ -144,15 +146,17 @@ struct shm_info {
        unsigned long swap_successes;
 };
 
-struct thread;
+#ifdef _KERNEL
 struct proc;
 struct vmspace;
 
+extern struct shminfo  shminfo;
+
 void   shmexit(struct vmspace *);
 void   shmfork(struct proc *, struct proc *);
-#endif /* _KERNEL */
 
-#if !defined(_KERNEL) || defined(_WANT_SHM_PROTOTYPES)
+#else /* !_KERNEL */
+
 #include <sys/cdefs.h>
 
 #ifndef _SIZE_T_DECLARED
@@ -170,6 +174,6 @@ int shmctl(int, int, struct shmid_ds *);
 int shmdt(const void *);
 __END_DECLS
 
-#endif /* _KERNEL || _WANT_SHM_PROTOTYPES */
+#endif /* _KERNEL */
 
 #endif /* !_SYS_SHM_H_ */

Modified: head/usr.bin/ipcrm/ipcrm.c
==============================================================================
--- head/usr.bin/ipcrm/ipcrm.c  Fri Feb 16 01:08:32 2018        (r329347)
+++ head/usr.bin/ipcrm/ipcrm.c  Fri Feb 16 01:33:01 2018        (r329348)
@@ -36,14 +36,12 @@
 __FBSDID("$FreeBSD$");
 
 #include <sys/param.h>
-#define _WANT_MSG_PROTOTYPES
-#define _WANT_SEM_PROTOTYPES
-#define _WANT_SHM_PROTOTYPES
-#define _KERNEL
+#define        _WANT_SYSVMSG_INTERNALS
+#include <sys/msg.h>
+#define        _WANT_SYSVSEM_INTERNALS
 #include <sys/sem.h>
+#define        _WANT_SYSVSHM_INTERNALS
 #include <sys/shm.h>
-#include <sys/msg.h>
-#undef _KERNEL
 
 #include <ctype.h>
 #include <err.h>

Modified: head/usr.bin/ipcs/ipc.h
==============================================================================
--- head/usr.bin/ipcs/ipc.h     Fri Feb 16 01:08:32 2018        (r329347)
+++ head/usr.bin/ipcs/ipc.h     Fri Feb 16 01:33:01 2018        (r329348)
@@ -68,3 +68,6 @@ extern kvm_t *kd;
 extern struct semid_kernel     *sema;
 extern struct msqid_kernel     *msqids;
 extern struct shmid_kernel     *shmsegs;
+extern struct seminfo           seminfo;
+extern struct msginfo           msginfo;
+extern struct shminfo           shminfo;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to