| Revision 299215 |
| |
| MFC r298519: |
| Fix streams and svr4 module dependency. Both modules are complaining about |
| undefined symbol svr4_delete_socket which was moved from streams to the svr4 module |
| in r160558 that created a two-way dependency between them. |
| |
| MFC r298520: |
| Allow to build svr4 module with SYSV support separatelly from the kernel build. |
| |
| PR: 208464 |
| Reported by: Kristoffer Eriksson |
| |
| --- stable/10/sys/compat/svr4/svr4_ipc.c 2016/05/07 08:26:05 299214 |
| +++ stable/10/sys/compat/svr4/svr4_ipc.c 2016/05/07 08:30:21 299215 |
| @@ -86,14 +86,10 @@ |
| #include <compat/svr4/svr4_util.h> |
| #include <compat/svr4/svr4_ipc.h> |
| |
| -#if defined(SYSVMSG) || defined(SYSVSHM) || defined(SYSVSEM) |
| static void svr4_to_bsd_ipc_perm(const struct svr4_ipc_perm *, |
| struct ipc_perm *); |
| static void bsd_to_svr4_ipc_perm(const struct ipc_perm *, |
| struct svr4_ipc_perm *); |
| -#endif |
| - |
| -#ifdef SYSVSEM |
| static void bsd_to_svr4_semid_ds(const struct semid_ds *, |
| struct svr4_semid_ds *); |
| static void svr4_to_bsd_semid_ds(const struct svr4_semid_ds *, |
| @@ -101,9 +97,6 @@ |
| static int svr4_semop(struct thread *, void *); |
| static int svr4_semget(struct thread *, void *); |
| static int svr4_semctl(struct thread *, void *); |
| -#endif |
| - |
| -#ifdef SYSVMSG |
| static void bsd_to_svr4_msqid_ds(const struct msqid_ds *, |
| struct svr4_msqid_ds *); |
| static void svr4_to_bsd_msqid_ds(const struct svr4_msqid_ds *, |
| @@ -112,9 +105,6 @@ |
| static int svr4_msgrcv(struct thread *, void *); |
| static int svr4_msgget(struct thread *, void *); |
| static int svr4_msgctl(struct thread *, void *); |
| -#endif |
| - |
| -#ifdef SYSVSHM |
| static void bsd_to_svr4_shmid_ds(const struct shmid_ds *, |
| struct svr4_shmid_ds *); |
| static void svr4_to_bsd_shmid_ds(const struct svr4_shmid_ds *, |
| @@ -123,9 +113,6 @@ |
| static int svr4_shmdt(struct thread *, void *); |
| static int svr4_shmget(struct thread *, void *); |
| static int svr4_shmctl(struct thread *, void *); |
| -#endif |
| - |
| -#if defined(SYSVMSG) || defined(SYSVSHM) || defined(SYSVSEM) |
| |
| static void |
| svr4_to_bsd_ipc_perm(spp, bpp) |
| @@ -154,9 +141,7 @@ |
| spp->mode = bpp->mode; |
| spp->seq = bpp->seq; |
| } |
| -#endif |
| |
| -#ifdef SYSVSEM |
| static void |
| bsd_to_svr4_semid_ds(bds, sds) |
| const struct semid_ds *bds; |
| @@ -331,10 +316,7 @@ |
| } |
| } |
| |
| -MODULE_DEPEND(svr4elf, sysvsem, 1, 1, 1); |
| -#endif |
| |
| -#ifdef SYSVMSG |
| static void |
| bsd_to_svr4_msqid_ds(bds, sds) |
| const struct msqid_ds *bds; |
| @@ -421,7 +403,7 @@ |
| |
| return sys_msgrcv(td, &ap); |
| } |
| - |
| + |
| struct svr4_sys_msgget_args { |
| int what; |
| svr4_key_t key; |
| @@ -504,10 +486,6 @@ |
| } |
| } |
| |
| -MODULE_DEPEND(svr4elf, sysvmsg, 1, 1, 1); |
| -#endif |
| - |
| -#ifdef SYSVSHM |
| |
| static void |
| bsd_to_svr4_shmid_ds(bds, sds) |
| @@ -657,7 +635,7 @@ |
| default: |
| return (EINVAL); |
| } |
| - |
| + |
| error = kern_shmctl(td, uap->shmid, cmd, &bs, &bufsize); |
| if (error) |
| return (error); |
| @@ -697,4 +675,5 @@ |
| } |
| |
| MODULE_DEPEND(svr4elf, sysvshm, 1, 1, 1); |
| -#endif /* SYSVSHM */ |
| +MODULE_DEPEND(svr4elf, sysvmsg, 1, 1, 1); |
| +MODULE_DEPEND(svr4elf, sysvsem, 1, 1, 1); |
| --- stable/10/sys/compat/svr4/svr4_socket.c 2016/05/07 08:26:05 299214 |
| +++ stable/10/sys/compat/svr4/svr4_socket.c 2016/05/07 08:30:21 299215 |
| @@ -66,6 +66,7 @@ |
| #include <compat/svr4/svr4_signal.h> |
| #include <compat/svr4/svr4_sockmod.h> |
| #include <compat/svr4/svr4_proto.h> |
| +#include <compat/svr4/svr4_stropts.h> |
| |
| struct svr4_sockcache_entry { |
| struct proc *p; /* Process for the socket */ |
| @@ -168,6 +169,19 @@ |
| mtx_unlock(&svr4_sockcache_lock); |
| } |
| |
| +struct svr4_strm * |
| +svr4_stream_get(fp) |
| + struct file *fp; |
| +{ |
| + struct socket *so; |
| + |
| + if (fp == NULL || fp->f_type != DTYPE_SOCKET) |
| + return NULL; |
| + |
| + so = fp->f_data; |
| + return so->so_emuldata; |
| +} |
| + |
| void |
| svr4_purge_sockcache(arg, p) |
| void *arg; |
| --- stable/10/sys/compat/svr4/svr4_sysvec.c 2016/05/07 08:26:05 299214 |
| +++ stable/10/sys/compat/svr4/svr4_sysvec.c 2016/05/07 08:30:21 299215 |
| @@ -313,4 +313,4 @@ |
| 0 |
| }; |
| DECLARE_MODULE_TIED(svr4elf, svr4_elf_mod, SI_SUB_EXEC, SI_ORDER_ANY); |
| -MODULE_DEPEND(svr4elf, streams, 1, 1, 1); |
| +MODULE_VERSION(svr4elf, 1); |
| --- stable/10/sys/dev/streams/streams.c 2016/05/07 08:26:05 299214 |
| +++ stable/10/sys/dev/streams/streams.c 2016/05/07 08:30:21 299215 |
| @@ -176,6 +176,7 @@ |
| }; |
| DECLARE_MODULE(streams, streams_mod, SI_SUB_DRIVERS, SI_ORDER_ANY); |
| MODULE_VERSION(streams, 1); |
| +MODULE_DEPEND(streams, svr4elf, 1, 1, 1); |
| |
| /* |
| * We only need open() and close() routines. open() calls socreate() |
| @@ -329,19 +330,6 @@ |
| } |
| |
| |
| -struct svr4_strm * |
| -svr4_stream_get(fp) |
| - struct file *fp; |
| -{ |
| - struct socket *so; |
| - |
| - if (fp == NULL || fp->f_type != DTYPE_SOCKET) |
| - return NULL; |
| - |
| - so = fp->f_data; |
| - return so->so_emuldata; |
| -} |
| - |
| static int |
| svr4_soo_close(struct file *fp, struct thread *td) |
| { |
| --- stable/10/sys/modules/streams/Makefile 2016/05/07 08:26:05 299214 |
| +++ stable/10/sys/modules/streams/Makefile 2016/05/07 08:30:21 299215 |
| @@ -5,10 +5,6 @@ |
| KMOD= streams |
| SRCS= streams.c |
| |
| -EXPORT_SYMS= svr4_str_initialized \ |
| - svr4_stream_get \ |
| - svr4_delete_socket |
| - |
| .if defined(DEBUG) |
| CFLAGS+= -DDEBUG_SVR4 |
| .endif |
| --- stable/10/sys/modules/svr4/Makefile 2016/05/07 08:26:05 299214 |
| +++ stable/10/sys/modules/svr4/Makefile 2016/05/07 08:30:21 299215 |
| @@ -8,6 +8,7 @@ |
| svr4_termios.c svr4_stream.c svr4_socket.c svr4_sockio.c \ |
| svr4_machdep.c svr4_resource.c svr4_ipc.c |
| OBJS= svr4_locore.o |
| +EXPORT_SYMS= svr4_delete_socket |
| |
| SRCS+= opt_ktrace.h opt_sysvipc.h |
| |