Index: contrib/sendmail/include/sm/os/sm_os_freebsd.h
===================================================================
--- contrib/sendmail/include/sm/os/sm_os_freebsd.h
+++ contrib/sendmail/include/sm/os/sm_os_freebsd.h
@@ -34,7 +34,7 @@
 # define SM_CONF_SHM	1
 #endif /* SM_CONF_SHM */
 #ifndef SM_CONF_SEM
-# define SM_CONF_SEM	1
+# define SM_CONF_SEM	2
 #endif /* SM_CONF_SEM */
 #ifndef SM_CONF_MSG
 # define SM_CONF_MSG	1
Index: lib/libc/gen/semctl.c
===================================================================
--- lib/libc/gen/semctl.c
+++ lib/libc/gen/semctl.c
@@ -34,6 +34,7 @@
 #ifndef NO_COMPAT7
 #define _WANT_SEMUN_OLD
 #endif
+#define _WANT_SEMUN
 
 #include <sys/types.h>
 #include <sys/ipc.h>
Index: lib/libc/sys/msgctl.2
===================================================================
--- lib/libc/sys/msgctl.2
+++ lib/libc/sys/msgctl.2
@@ -63,8 +63,8 @@
 .Bd -literal
 struct msqid_ds {
 	struct	ipc_perm msg_perm;	/* msg queue permission bits */
-	struct	msg *msg_first;	/* first message in the queue */
-	struct	msg *msg_last;	/* last message in the queue */
+	struct	msg *kmsg_first;	/* kernel data, don't use */
+	struct	msg *kmsg_last;	/* kernel data, don't use */
 	msglen_t msg_cbytes;	/* number of bytes in use on the queue */
 	msgqnum_t msg_qnum;	/* number of msgs in the queue */
 	msglen_t msg_qbytes;	/* max # of bytes on the queue */
Index: lib/libc/sys/semctl.2
===================================================================
--- lib/libc/sys/semctl.2
+++ lib/libc/sys/semctl.2
@@ -145,7 +145,7 @@
 .Bd -literal
 struct semid_ds {
         struct  ipc_perm sem_perm;      /* operation permission struct */
-        struct  sem *sem_base;  /* pointer to first semaphore in set */
+        struct  sem *ksem_base;  /* kernel data, don't use */
         u_short sem_nsems;      /* number of sems in set */
         time_t  sem_otime;      /* last operation time */
         time_t  sem_ctime;      /* last change time */
Index: sys/compat/freebsd32/freebsd32_ipc.h
===================================================================
--- sys/compat/freebsd32/freebsd32_ipc.h
+++ sys/compat/freebsd32/freebsd32_ipc.h
@@ -43,7 +43,7 @@
 
 struct semid_ds32 {
 	struct ipc_perm32 sem_perm;
-	uint32_t	sem_base;
+	uint32_t	ksem_base;
 	unsigned short	sem_nsems;
 	int32_t		sem_otime;
 	int32_t		sem_ctime;
@@ -57,8 +57,8 @@
 
 struct msqid_ds32 {
 	struct ipc_perm32 msg_perm;
-	uint32_t	msg_first;
-	uint32_t	msg_last;
+	uint32_t	kmsg_first;
+	uint32_t	kmsg_last;
 	uint32_t	msg_cbytes;
 	uint32_t	msg_qnum;
 	uint32_t	msg_qbytes;
@@ -111,7 +111,7 @@
 
 struct semid_ds32_old {
 	struct ipc_perm32_old sem_perm;
-	uint32_t	sem_base;
+	uint32_t	ksem_base;
 	unsigned short	sem_nsems;
 	int32_t		sem_otime;
 	int32_t		sem_pad1;
@@ -122,8 +122,8 @@
 
 struct msqid_ds32_old {
 	struct ipc_perm32_old msg_perm;
-	uint32_t	msg_first;
-	uint32_t	msg_last;
+	uint32_t	kmsg_first;
+	uint32_t	kmsg_last;
 	uint32_t	msg_cbytes;
 	uint32_t	msg_qnum;
 	uint32_t	msg_qbytes;
Index: sys/compat/linux/linux_ipc.c
===================================================================
--- sys/compat/linux/linux_ipc.c
+++ sys/compat/linux/linux_ipc.c
@@ -160,8 +160,8 @@
 
 struct l_msqid_ds {
 	struct l_ipc_perm	msg_perm;
-	l_uintptr_t		msg_first;	/* first message on queue,unused */
-	l_uintptr_t		msg_last;	/* last message in queue,unused */
+	l_uintptr_t		kmsg_first;	/* first message on queue,unused */
+	l_uintptr_t		kmsg_last;	/* last message in queue,unused */
 	l_time_t		msg_stime;	/* last msgsnd time */
 	l_time_t		msg_rtime;	/* last msgrcv time */
 	l_time_t		msg_ctime;	/* last change time */
@@ -178,7 +178,7 @@
 	struct l_ipc_perm	sem_perm;
 	l_time_t		sem_otime;
 	l_time_t		sem_ctime;
-	l_uintptr_t		sem_base;
+	l_uintptr_t		ksem_base;
 	l_uintptr_t		sem_pending;
 	l_uintptr_t		sem_pending_last;
 	l_uintptr_t		undo;
Index: sys/i386/ibcs2/ibcs2_ipc.h
===================================================================
--- sys/i386/ibcs2/ibcs2_ipc.h
+++ sys/i386/ibcs2/ibcs2_ipc.h
@@ -45,8 +45,8 @@
 
 struct ibcs2_msqid_ds {
 	struct ibcs2_ipc_perm msg_perm;
-	struct msg *msg_first;
-	struct msg *msg_last;
+	struct msg *kmsg_first;
+	struct msg *kmsg_last;
 	u_short msg_cbytes;
 	u_short msg_qnum;
 	u_short msg_qbytes;
@@ -59,7 +59,7 @@
 
 struct ibcs2_semid_ds {
         struct ibcs2_ipc_perm sem_perm;
-	struct ibcs2_sem *sem_base;
+	struct ibcs2_sem *ksem_base;
 	u_short sem_nsems;
 	ibcs2_time_t sem_otime;
 	ibcs2_time_t sem_ctime;
Index: sys/i386/ibcs2/ibcs2_ipc.c
===================================================================
--- sys/i386/ibcs2/ibcs2_ipc.c
+++ sys/i386/ibcs2/ibcs2_ipc.c
@@ -74,8 +74,8 @@
 struct ibcs2_msqid_ds *ibp;
 {
 	cvt_perm2iperm(&bp->msg_perm, &ibp->msg_perm);
-	ibp->msg_first = bp->msg_first;
-	ibp->msg_last = bp->msg_last;
+	ibp->kmsg_first = bp->kmsg_first;
+	ibp->kmsg_last = bp->kmsg_last;
 	ibp->msg_cbytes = (u_short)bp->msg_cbytes;
 	ibp->msg_qnum = (u_short)bp->msg_qnum;
 	ibp->msg_qbytes = (u_short)bp->msg_qbytes;
@@ -93,8 +93,8 @@
 struct msqid_ds *bp;
 {
 	cvt_iperm2perm(&ibp->msg_perm, &bp->msg_perm);
-	bp->msg_first = ibp->msg_first;
-	bp->msg_last = ibp->msg_last;
+	bp->kmsg_first = ibp->kmsg_first;
+	bp->kmsg_last = ibp->kmsg_last;
 	bp->msg_cbytes = ibp->msg_cbytes;
 	bp->msg_qnum = ibp->msg_qnum;
 	bp->msg_qbytes = ibp->msg_qbytes;
@@ -284,7 +284,7 @@
 struct ibcs2_semid_ds *ibp;
 {
 	cvt_perm2iperm(&bp->sem_perm, &ibp->sem_perm);
-	ibp->sem_base = (struct ibcs2_sem *)bp->sem_base;
+	ibp->ksem_base = (struct ibcs2_sem *)bp->ksem_base;
 	ibp->sem_nsems = bp->sem_nsems;
 	ibp->sem_otime = bp->sem_otime;
 	ibp->sem_ctime = bp->sem_ctime;
@@ -297,7 +297,7 @@
 struct semid_ds *bp;
 {
 	cvt_iperm2perm(&ibp->sem_perm, &bp->sem_perm);
-	bp->sem_base = (struct sem *)ibp->sem_base;
+	bp->ksem_base = (struct sem *)ibp->ksem_base;
 	bp->sem_nsems = ibp->sem_nsems;
 	bp->sem_otime = ibp->sem_otime;
 	bp->sem_ctime = ibp->sem_ctime;
Index: sys/kern/sysv_msg.c
===================================================================
--- sys/kern/sysv_msg.c
+++ sys/kern/sysv_msg.c
@@ -425,7 +425,7 @@
 	msqkptr->cred = NULL;
 
 	/* Free the message headers */
-	msghdr = msqkptr->u.msg_first;
+	msghdr = msqkptr->u.kmsg_first;
 	while (msghdr != NULL) {
 		struct msg *msghdr_tmp;
 
@@ -573,7 +573,7 @@
 		 * thread cannot free a certain msghdr.  The msq will get
 		 * into an inconsistent state.
 		 */
-		for (msghdr = msqkptr->u.msg_first; msghdr != NULL;
+		for (msghdr = msqkptr->u.kmsg_first; msghdr != NULL;
 		    msghdr = msghdr->msg_next) {
 			error = mac_sysvmsq_check_msgrmid(td->td_ucred, msghdr);
 			if (error != 0)
@@ -731,8 +731,8 @@
 		msqkptr->cred = crhold(cred);
 		/* Make sure that the returned msqid is unique */
 		msqkptr->u.msg_perm.seq = (msqkptr->u.msg_perm.seq + 1) & 0x7fff;
-		msqkptr->u.msg_first = NULL;
-		msqkptr->u.msg_last = NULL;
+		msqkptr->u.kmsg_first = NULL;
+		msqkptr->u.kmsg_last = NULL;
 		msqkptr->u.msg_cbytes = 0;
 		msqkptr->u.msg_qnum = 0;
 		msqkptr->u.msg_qbytes = msginfo.msgmnb;
@@ -1079,14 +1079,14 @@
 	/*
 	 * Put the message into the queue
 	 */
-	if (msqkptr->u.msg_first == NULL) {
-		msqkptr->u.msg_first = msghdr;
-		msqkptr->u.msg_last = msghdr;
+	if (msqkptr->u.kmsg_first == NULL) {
+		msqkptr->u.kmsg_first = msghdr;
+		msqkptr->u.kmsg_last = msghdr;
 	} else {
-		msqkptr->u.msg_last->msg_next = msghdr;
-		msqkptr->u.msg_last = msghdr;
+		msqkptr->u.kmsg_last->msg_next = msghdr;
+		msqkptr->u.kmsg_last = msghdr;
 	}
-	msqkptr->u.msg_last->msg_next = NULL;
+	msqkptr->u.kmsg_last->msg_next = NULL;
 
 	msqkptr->u.msg_cbytes += msghdr->msg_ts;
 	msqkptr->u.msg_qnum++;
@@ -1194,7 +1194,7 @@
 	msghdr = NULL;
 	while (msghdr == NULL) {
 		if (msgtyp == 0) {
-			msghdr = msqkptr->u.msg_first;
+			msghdr = msqkptr->u.kmsg_first;
 			if (msghdr != NULL) {
 				if (msgsz < msghdr->msg_ts &&
 				    (msgflg & MSG_NOERROR) == 0) {
@@ -1210,21 +1210,21 @@
 				if (error != 0)
 					goto done2;
 #endif
-				if (msqkptr->u.msg_first == msqkptr->u.msg_last) {
-					msqkptr->u.msg_first = NULL;
-					msqkptr->u.msg_last = NULL;
+				if (msqkptr->u.kmsg_first == msqkptr->u.kmsg_last) {
+					msqkptr->u.kmsg_first = NULL;
+					msqkptr->u.kmsg_last = NULL;
 				} else {
-					msqkptr->u.msg_first = msghdr->msg_next;
-					if (msqkptr->u.msg_first == NULL)
+					msqkptr->u.kmsg_first = msghdr->msg_next;
+					if (msqkptr->u.kmsg_first == NULL)
 						panic("msg_first/last screwed up #1");
 				}
 			}
 		} else {
 			struct msg *previous;
 			struct msg **prev;
 
 			previous = NULL;
-			prev = &(msqkptr->u.msg_first);
+			prev = &(msqkptr->u.kmsg_first);
 			while ((msghdr = *prev) != NULL) {
 				/*
 				 * Is this message's type an exact match or is
@@ -1256,20 +1256,20 @@
 						goto done2;
 #endif
 					*prev = msghdr->msg_next;
-					if (msghdr == msqkptr->u.msg_last) {
+					if (msghdr == msqkptr->u.kmsg_last) {
 						if (previous == NULL) {
 							if (prev !=
-							    &msqkptr->u.msg_first)
-								panic("msg_first/last screwed up #2");
-							msqkptr->u.msg_first =
+							    &msqkptr->u.kmsg_first)
+								panic("kmsg_first/last screwed up #2");
+							msqkptr->u.kmsg_first =
 							    NULL;
-							msqkptr->u.msg_last =
+							msqkptr->u.kmsg_last =
 							    NULL;
 						} else {
 							if (prev ==
-							    &msqkptr->u.msg_first)
-								panic("msg_first/last screwed up #3");
-							msqkptr->u.msg_last =
+							    &msqkptr->u.kmsg_first)
+								panic("kmsg_first/last screwed up #3");
+							msqkptr->u.kmsg_last =
 							    previous;
 						}
 					}
@@ -1674,8 +1674,8 @@
 		if (error)
 			return (error);
 		freebsd32_ipcperm_old_in(&msqbuf32.msg_perm, &msqbuf.msg_perm);
-		PTRIN_CP(msqbuf32, msqbuf, msg_first);
-		PTRIN_CP(msqbuf32, msqbuf, msg_last);
+		PTRIN_CP(msqbuf32, msqbuf, kmsg_first);
+		PTRIN_CP(msqbuf32, msqbuf, kmsg_last);
 		CP(msqbuf32, msqbuf, msg_cbytes);
 		CP(msqbuf32, msqbuf, msg_qnum);
 		CP(msqbuf32, msqbuf, msg_qbytes);
@@ -1691,8 +1691,8 @@
 	if (uap->cmd == IPC_STAT) {
 		bzero(&msqbuf32, sizeof(msqbuf32));
 		freebsd32_ipcperm_old_out(&msqbuf.msg_perm, &msqbuf32.msg_perm);
-		PTROUT_CP(msqbuf, msqbuf32, msg_first);
-		PTROUT_CP(msqbuf, msqbuf32, msg_last);
+		PTROUT_CP(msqbuf, msqbuf32, kmsg_first);
+		PTROUT_CP(msqbuf, msqbuf32, kmsg_last);
 		CP(msqbuf, msqbuf32, msg_cbytes);
 		CP(msqbuf, msqbuf32, msg_qnum);
 		CP(msqbuf, msqbuf32, msg_qbytes);
@@ -1719,8 +1719,8 @@
 		if (error)
 			return (error);
 		freebsd32_ipcperm_in(&msqbuf32.msg_perm, &msqbuf.msg_perm);
-		PTRIN_CP(msqbuf32, msqbuf, msg_first);
-		PTRIN_CP(msqbuf32, msqbuf, msg_last);
+		PTRIN_CP(msqbuf32, msqbuf, kmsg_first);
+		PTRIN_CP(msqbuf32, msqbuf, kmsg_last);
 		CP(msqbuf32, msqbuf, msg_cbytes);
 		CP(msqbuf32, msqbuf, msg_qnum);
 		CP(msqbuf32, msqbuf, msg_qbytes);
@@ -1735,8 +1735,8 @@
 		return (error);
 	if (uap->cmd == IPC_STAT) {
 		freebsd32_ipcperm_out(&msqbuf.msg_perm, &msqbuf32.msg_perm);
-		PTROUT_CP(msqbuf, msqbuf32, msg_first);
-		PTROUT_CP(msqbuf, msqbuf32, msg_last);
+		PTROUT_CP(msqbuf, msqbuf32, kmsg_first);
+		PTROUT_CP(msqbuf, msqbuf32, kmsg_last);
 		CP(msqbuf, msqbuf32, msg_cbytes);
 		CP(msqbuf, msqbuf32, msg_qnum);
 		CP(msqbuf, msqbuf32, msg_qbytes);
@@ -1844,8 +1844,8 @@
 		if (error)
 			return (error);
 		ipcperm_old2new(&msqold.msg_perm, &msqbuf.msg_perm);
-		CP(msqold, msqbuf, msg_first);
-		CP(msqold, msqbuf, msg_last);
+		CP(msqold, msqbuf, kmsg_first);
+		CP(msqold, msqbuf, kmsg_last);
 		CP(msqold, msqbuf, msg_cbytes);
 		CP(msqold, msqbuf, msg_qnum);
 		CP(msqold, msqbuf, msg_qbytes);
@@ -1861,8 +1861,8 @@
 	if (uap->cmd == IPC_STAT) {
 		bzero(&msqold, sizeof(msqold));
 		ipcperm_new2old(&msqbuf.msg_perm, &msqold.msg_perm);
-		CP(msqbuf, msqold, msg_first);
-		CP(msqbuf, msqold, msg_last);
+		CP(msqbuf, msqold, kmsg_first);
+		CP(msqbuf, msqold, kmsg_last);
 		CP(msqbuf, msqold, msg_cbytes);
 		CP(msqbuf, msqold, msg_qnum);
 		CP(msqbuf, msqold, msg_qbytes);
Index: sys/kern/sysv_sem.c
===================================================================
--- sys/kern/sysv_sem.c
+++ sys/kern/sysv_sem.c
@@ -286,7 +286,7 @@
 	semu = malloc(seminfo.semmnu * seminfo.semusz, M_SEM, M_WAITOK);
 
 	for (i = 0; i < seminfo.semmni; i++) {
-		sema[i].u.sem_base = 0;
+		sema[i].u.ksem_base = 0;
 		sema[i].u.sem_perm.mode = 0;
 		sema[i].u.sem_perm.seq = 0;
 #ifdef MAC
@@ -575,15 +575,15 @@
 	wakeup(semakptr);
 	for (i = 0; i < seminfo.semmni; i++) {
 		if ((sema[i].u.sem_perm.mode & SEM_ALLOC) &&
-		    sema[i].u.sem_base > semakptr->u.sem_base)
+		    sema[i].u.ksem_base > semakptr->u.ksem_base)
 			mtx_lock_flags(&sema_mtx[i], LOP_DUPOK);
 	}
-	for (i = semakptr->u.sem_base - sem; i < semtot; i++)
+	for (i = semakptr->u.ksem_base - sem; i < semtot; i++)
 		sem[i] = sem[i + semakptr->u.sem_nsems];
 	for (i = 0; i < seminfo.semmni; i++) {
 		if ((sema[i].u.sem_perm.mode & SEM_ALLOC) &&
-		    sema[i].u.sem_base > semakptr->u.sem_base) {
-			sema[i].u.sem_base -= semakptr->u.sem_nsems;
+		    sema[i].u.ksem_base > semakptr->u.ksem_base) {
+			sema[i].u.ksem_base -= semakptr->u.sem_nsems;
 			mtx_unlock(&sema_mtx[i]);
 		}
 	}
@@ -801,7 +801,7 @@
 			error = EINVAL;
 			goto done2;
 		}
-		*rval = semakptr->u.sem_base[semnum].semncnt;
+		*rval = semakptr->u.ksem_base[semnum].semncnt;
 		break;
 
 	case GETPID:
@@ -813,7 +813,7 @@
 			error = EINVAL;
 			goto done2;
 		}
-		*rval = semakptr->u.sem_base[semnum].sempid;
+		*rval = semakptr->u.ksem_base[semnum].sempid;
 		break;
 
 	case GETVAL:
@@ -825,7 +825,7 @@
 			error = EINVAL;
 			goto done2;
 		}
-		*rval = semakptr->u.sem_base[semnum].semval;
+		*rval = semakptr->u.ksem_base[semnum].semval;
 		break;
 
 	case GETALL:
@@ -859,7 +859,7 @@
 		if ((error = ipcperm(td, &semakptr->u.sem_perm, IPC_R)))
 			goto done2;
 		for (i = 0; i < semakptr->u.sem_nsems; i++)
-			array[i] = semakptr->u.sem_base[i].semval;
+			array[i] = semakptr->u.ksem_base[i].semval;
 		mtx_unlock(sema_mtxp);
 		error = copyout(array, arg->array, count * sizeof(*array));
 		mtx_lock(sema_mtxp);
@@ -874,7 +874,7 @@
 			error = EINVAL;
 			goto done2;
 		}
-		*rval = semakptr->u.sem_base[semnum].semzcnt;
+		*rval = semakptr->u.ksem_base[semnum].semzcnt;
 		break;
 
 	case SETVAL:
@@ -890,7 +890,7 @@
 			error = ERANGE;
 			goto done2;
 		}
-		semakptr->u.sem_base[semnum].semval = arg->val;
+		semakptr->u.ksem_base[semnum].semval = arg->val;
 		SEMUNDO_LOCK();
 		semundo_clear(semidx, semnum);
 		SEMUNDO_UNLOCK();
@@ -920,7 +920,7 @@
 				error = ERANGE;
 				break;
 			}
-			semakptr->u.sem_base[i].semval = usval;
+			semakptr->u.ksem_base[i].semval = usval;
 		}
 		SEMUNDO_LOCK();
 		semundo_clear(semidx, -1);
@@ -1051,16 +1051,16 @@
 		sema[semid].u.sem_nsems = nsems;
 		sema[semid].u.sem_otime = 0;
 		sema[semid].u.sem_ctime = time_second;
-		sema[semid].u.sem_base = &sem[semtot];
+		sema[semid].u.ksem_base = &sem[semtot];
 		semtot += nsems;
-		bzero(sema[semid].u.sem_base,
-		    sizeof(sema[semid].u.sem_base[0])*nsems);
+		bzero(sema[semid].u.ksem_base,
+		    sizeof(sema[semid].u.ksem_base[0])*nsems);
 #ifdef MAC
 		mac_sysvsem_create(cred, &sema[semid]);
 #endif
 		mtx_unlock(&sema_mtx[semid]);
 		DPRINTF(("sembase = %p, next = %p\n",
-		    sema[semid].u.sem_base, &sem[semtot]));
+		    sema[semid].u.ksem_base, &sem[semtot]));
 	} else {
 		DPRINTF(("didn't find it and wasn't asked to create it\n"));
 		error = ENOENT;
@@ -1203,12 +1203,12 @@
 
 		for (i = 0; i < nsops; i++) {
 			sopptr = &sops[i];
-			semptr = &semakptr->u.sem_base[sopptr->sem_num];
+			semptr = &semakptr->u.ksem_base[sopptr->sem_num];
 
 			DPRINTF((
-			    "semop:  semakptr=%p, sem_base=%p, "
+			    "semop:  semakptr=%p, ksem_base=%p, "
 			    "semptr=%p, sem[%d]=%d : op=%d, flag=%s\n",
-			    semakptr, semakptr->u.sem_base, semptr,
+			    semakptr, semakptr->u.ksem_base, semptr,
 			    sopptr->sem_num, semptr->semval, sopptr->sem_op,
 			    (sopptr->sem_flg & IPC_NOWAIT) ?
 			    "nowait" : "wait"));
@@ -1250,7 +1250,7 @@
 		 */
 		DPRINTF(("semop:  rollback 0 through %d\n", i-1));
 		for (j = 0; j < i; j++)
-			semakptr->u.sem_base[sops[j].sem_num].semval -=
+			semakptr->u.ksem_base[sops[j].sem_num].semval -=
 			    sops[j].sem_op;
 
 		/* If we detected an error, return it */
@@ -1289,10 +1289,10 @@
 
 		/*
 		 * Renew the semaphore's pointer after wakeup since
-		 * during msleep sem_base may have been modified and semptr
+		 * during msleep ksem_base may have been modified and semptr
 		 * is not valid any more
 		 */
-		semptr = &semakptr->u.sem_base[sopptr->sem_num];
+		semptr = &semakptr->u.ksem_base[sopptr->sem_num];
 
 		/*
 		 * The semaphore is still alive.  Readjust the count of
@@ -1361,7 +1361,7 @@
 			}
 
 			for (j = 0; j < nsops; j++)
-				semakptr->u.sem_base[sops[j].sem_num].semval -=
+				semakptr->u.ksem_base[sops[j].sem_num].semval -=
 				    sops[j].sem_op;
 
 			DPRINTF(("error = %d from semundo_adjust\n", error));
@@ -1374,7 +1374,7 @@
 	/* We're definitely done - set the sempid's and time */
 	for (i = 0; i < nsops; i++) {
 		sopptr = &sops[i];
-		semptr = &semakptr->u.sem_base[sopptr->sem_num];
+		semptr = &semakptr->u.ksem_base[sopptr->sem_num];
 		semptr->sempid = td->td_proc->p_pid;
 	}
 	semakptr->u.sem_otime = time_second;
@@ -1457,13 +1457,13 @@
 			    suptr->un_proc, suptr->un_ent[ix].un_id,
 			    suptr->un_ent[ix].un_num,
 			    suptr->un_ent[ix].un_adjval,
-			    semakptr->u.sem_base[semnum].semval));
+			    semakptr->u.ksem_base[semnum].semval));
 
-			if (adjval < 0 && semakptr->u.sem_base[semnum].semval <
+			if (adjval < 0 && semakptr->u.ksem_base[semnum].semval <
 			    -adjval)
-				semakptr->u.sem_base[semnum].semval = 0;
+				semakptr->u.ksem_base[semnum].semval = 0;
 			else
-				semakptr->u.sem_base[semnum].semval += adjval;
+				semakptr->u.ksem_base[semnum].semval += adjval;
 
 			wakeup(semakptr);
 			DPRINTF(("semexit:  back from wakeup\n"));
@@ -1764,7 +1764,7 @@
 		if (error)
 			return (error);
 		ipcperm_old2new(&dsold.sem_perm, &dsbuf.sem_perm);
-		CP(dsold, dsbuf, sem_base);
+		CP(dsold, dsbuf, ksem_base);
 		CP(dsold, dsbuf, sem_nsems);
 		CP(dsold, dsbuf, sem_otime);
 		CP(dsold, dsbuf, sem_ctime);
@@ -1789,7 +1789,7 @@
 	case IPC_STAT:
 		bzero(&dsold, sizeof(dsold));
 		ipcperm_new2old(&dsbuf.sem_perm, &dsold.sem_perm);
-		CP(dsbuf, dsold, sem_base);
+		CP(dsbuf, dsold, ksem_base);
 		CP(dsbuf, dsold, sem_nsems);
 		CP(dsbuf, dsold, sem_otime);
 		CP(dsbuf, dsold, sem_ctime);
@@ -1861,7 +1861,7 @@
 		if (error)
 			return (error);
 		freebsd32_ipcperm_old_in(&dsbuf32.sem_perm, &dsbuf.sem_perm);
-		PTRIN_CP(dsbuf32, dsbuf, sem_base);
+		PTRIN_CP(dsbuf32, dsbuf, ksem_base);
 		CP(dsbuf32, dsbuf, sem_nsems);
 		CP(dsbuf32, dsbuf, sem_otime);
 		CP(dsbuf32, dsbuf, sem_ctime);
@@ -1886,7 +1886,7 @@
 	case IPC_STAT:
 		bzero(&dsbuf32, sizeof(dsbuf32));
 		freebsd32_ipcperm_old_out(&dsbuf.sem_perm, &dsbuf32.sem_perm);
-		PTROUT_CP(dsbuf, dsbuf32, sem_base);
+		PTROUT_CP(dsbuf, dsbuf32, ksem_base);
 		CP(dsbuf, dsbuf32, sem_nsems);
 		CP(dsbuf, dsbuf32, sem_otime);
 		CP(dsbuf, dsbuf32, sem_ctime);
@@ -1933,7 +1933,7 @@
 		if (error)
 			return (error);
 		freebsd32_ipcperm_in(&dsbuf32.sem_perm, &dsbuf.sem_perm);
-		PTRIN_CP(dsbuf32, dsbuf, sem_base);
+		PTRIN_CP(dsbuf32, dsbuf, ksem_base);
 		CP(dsbuf32, dsbuf, sem_nsems);
 		CP(dsbuf32, dsbuf, sem_otime);
 		CP(dsbuf32, dsbuf, sem_ctime);
@@ -1958,7 +1958,7 @@
 	case IPC_STAT:
 		bzero(&dsbuf32, sizeof(dsbuf32));
 		freebsd32_ipcperm_out(&dsbuf.sem_perm, &dsbuf32.sem_perm);
-		PTROUT_CP(dsbuf, dsbuf32, sem_base);
+		PTROUT_CP(dsbuf, dsbuf32, ksem_base);
 		CP(dsbuf, dsbuf32, sem_nsems);
 		CP(dsbuf, dsbuf32, sem_otime);
 		CP(dsbuf, dsbuf32, sem_ctime);
Index: sys/sys/msg.h
===================================================================
--- sys/sys/msg.h
+++ sys/sys/msg.h
@@ -63,8 +63,8 @@
     defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD7)
 struct msqid_ds_old {
 	struct	ipc_perm_old msg_perm;	/* msg queue permission bits */
-	struct	msg *msg_first;	/* first message in the queue */
-	struct	msg *msg_last;	/* last message in the queue */
+	struct	msg *kmsg_first;	/* first message in the queue */
+	struct	msg *kmsg_last;	/* last message in the queue */
 	msglen_t msg_cbytes;	/* number of bytes in use on the queue */
 	msgqnum_t msg_qnum;	/* number of msgs in the queue */
 	msglen_t msg_qbytes;	/* max # of bytes on the queue */
@@ -88,8 +88,8 @@
 
 struct msqid_ds {
 	struct	ipc_perm msg_perm;	/* msg queue permission bits */
-	struct	msg *msg_first;	/* first message in the queue */
-	struct	msg *msg_last;	/* last message in the queue */
+	struct	msg *kmsg_first;	/* first message in the queue */
+	struct	msg *kmsg_last;	/* last message in the queue */
 	msglen_t msg_cbytes;	/* number of bytes in use on the queue */
 	msgqnum_t msg_qnum;	/* number of msgs in the queue */
 	msglen_t msg_qbytes;	/* max # of bytes on the queue */
@@ -100,23 +100,6 @@
 	time_t	msg_ctime;	/* time of last msgctl() */
 };
 
-#if __BSD_VISIBLE
-/*
- * Structure describing a message.  The SVID doesn't suggest any
- * particular name for this structure.  There is a reference in the
- * msgop man page that reads "The structure mymsg is an example of what
- * this user defined buffer might look like, and includes the following
- * members:".  This sentence is followed by two lines equivalent
- * to the mtype and mtext field declarations below.  It isn't clear
- * if "mymsg" refers to the name of the structure type or the name of an
- * instance of the structure...
- */
-struct mymsg {
-	long	mtype;		/* message type (+ve integer) */
-	char	mtext[1];	/* message body */
-};
-#endif
-
 #ifdef _KERNEL
 
 struct msg {
Index: sys/sys/sem.h
===================================================================
--- sys/sys/sem.h
+++ sys/sys/sem.h
@@ -31,7 +31,7 @@
     defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD7)
 struct semid_ds_old {
 	struct ipc_perm_old sem_perm;	/* operation permission struct */
-	struct sem	*sem_base;	/* pointer to first semaphore in set */
+	struct sem	*ksem_base;	/* pointer to first semaphore in set */
 	unsigned short	sem_nsems;	/* number of sems in set */
 	time_t		sem_otime;	/* last operation time */
 	long		sem_pad1;	/* SVABI/386 says I need this here */
@@ -45,7 +45,7 @@
 
 struct semid_ds {
 	struct ipc_perm	sem_perm;	/* operation permission struct */
-	struct sem	*sem_base;	/* pointer to first semaphore in set */
+	struct sem	*ksem_base;	/* pointer to first semaphore in set */
 	unsigned short	sem_nsems;	/* number of sems in set */
 	time_t		sem_otime;	/* last operation time */
 	time_t		sem_ctime;	/* last change time */
@@ -73,14 +73,16 @@
 };
 #endif
 
+#if defined(_KERNEL) || defined(_WANT_SEMUN)
 /*
  * semctl's arg parameter structure
  */
 union semun {
 	int		val;		/* value for SETVAL */
 	struct		semid_ds *buf;	/* buffer for IPC_STAT & IPC_SET */
 	unsigned short	*array;		/* array for GETALL & SETALL */
 };
+#endif
 
 /*
  * commands for semctl
Index: usr.bin/svn/lib/libapr/apr.h
===================================================================
--- usr.bin/svn/lib/libapr/apr.h
+++ usr.bin/svn/lib/libapr/apr.h
@@ -261,7 +261,7 @@
 #define APR_HAVE_STRSTR         1
 #define APR_HAVE_MEMCHR         1
 #define APR_HAVE_STRUCT_RLIMIT  1
-#define APR_HAVE_UNION_SEMUN    1
+#define APR_HAVE_UNION_SEMUN    0
 #define APR_HAVE_SCTP           1
 #define APR_HAVE_IOVEC          1