svn commit: r329348 - in head: sys/sys usr.bin/ipcrm usr.bin/ipcs

Brooks Davis brooks at FreeBSD.org
Fri Feb 16 01:33:02 UTC 2018


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;


More information about the svn-src-head mailing list