diff --git a/share/examples/lkm/misc/module/Makefile b/share/examples/lkm/misc/module/Makefile index 562a75d87acd..edb299817a70 100644 --- a/share/examples/lkm/misc/module/Makefile +++ b/share/examples/lkm/misc/module/Makefile @@ -1,65 +1,49 @@ # 05 Jun 93 # # Makefile for miscmod # # 05 Jun 93 Terry Lambert Original # # Copyright (c) 1993 Terrence R. Lambert. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by Terrence R. Lambert. # 4. The name Terrence R. Lambert may not be used to endorse or promote # products derived from this software without specific prior written # permission. # # THIS SOFTWARE IS PROVIDED BY TERRENCE R. LAMBERT ``AS IS'' AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE TERRENCE R. LAMBERT BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # +# $Id$ +# +BINDIR= /tmp +SRCS= misccall.c miscmod.c +KMOD= misc_mod +NOMAN= none -SRCS=miscmod.c -OBJS=$(SRCS:.c=.o) - -KSRCS=misccall.c -KOBJS=misccall.o - -MODOBJ=combined.o - -KMOD=miscmod -CFLAGS= -DKERNEL -I/sys/sys -I/sys - -all: $(MODOBJ) - -clean: - rm -f $(OBJS) $(KOBJS) $(MODOBJ) $(KMOD) - -load: - /sbin/modload -o $(KMOD) -e$(KMOD) $(MODOBJ) - -unload: - /sbin/modunload -n $(KMOD) - -$(MODOBJ): $(OBJS) $(KOBJS) - $(LD) -r -o $(MODOBJ) $(OBJS) $(KOBJS) +CLEANFILES+= ${KMOD} +.include # # EOF -- This file has not been truncated # diff --git a/share/examples/lkm/misc/module/misccall.c b/share/examples/lkm/misc/module/misccall.c index 86741c4a61a0..5cadafc2843a 100644 --- a/share/examples/lkm/misc/module/misccall.c +++ b/share/examples/lkm/misc/module/misccall.c @@ -1,77 +1,78 @@ /* 05 Jun 93*/ /* * misccall.c * * 05 Jun 93 Terry Lambert Split out of newsyscall.c * * Copyright (c) 1993 Terrence R. Lambert. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by Terrence R. Lambert. * 4. The name Terrence R. Lambert may not be used to endorse or promote * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY TERRENCE R. LAMBERT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE TERRENCE R. LAMBERT BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ #include #include +#include #include /* * This is the actual code for system call... it can be static because * we've externed it up above... the only plae it needs to be referenced * is the sysent we are interested in. * * To write your own system call using this as a template, you could strip * out this code and use the rest as a prototype module, changing only the * function names and the number of arguments to the call in the module * specific "sysent". * * You would have to use the "-R" option of "ld" to ensure a linkable file * if you were to do this, since you would need to combine multiple ".o" * files into a single ".o" file for use by "modload". */ int misccall( p, uap, retval) struct proc *p; void *uap; int retval[]; { /* * Our new system call simply prints a message; it takes no * arguments. */ printf( "\nI am a loaded system call using the miscellaneous\n"); printf( "module loader interface and a kernel printf!\n"); printf( "I will print this message each time I am called!\n"); return( 0); /* success (or error code from errno.h)*/ } /* * EOF -- This file has not been truncated. */ diff --git a/share/examples/lkm/misc/module/miscmod.c b/share/examples/lkm/misc/module/miscmod.c index cc992aa67693..0f5a38f83be7 100644 --- a/share/examples/lkm/misc/module/miscmod.c +++ b/share/examples/lkm/misc/module/miscmod.c @@ -1,189 +1,195 @@ /* 25 May 93*/ /* - * Makefile for miscmod + * miscmod.c * * 05 Jun 93 Terry Lambert Split mycall.c out * 25 May 93 Terry Lambert Original * * Copyright (c) 1993 Terrence R. Lambert. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by Terrence R. Lambert. * 4. The name Terrence R. Lambert may not be used to endorse or promote * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY TERRENCE R. LAMBERT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE TERRENCE R. LAMBERT BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ #include #include +#include #include #include #include #include +#include #include #include #include #include extern int misccall(); /* * These two entries define our system call and module information. We * have 0 arguments to our system call. */ static struct sysent newent = { 0, misccall /* # of args, function pointer*/ }; /* * Miscellaneous modules must have their own save areas... */ static struct sysent oldent; /* save are for old callslot entry*/ -MOD_MISC( "miscmod") +/* + * Number of syscall entries for a.out executables + */ +#define nsysent (aout_sysvec.sv_size) + +MOD_MISC( "misc_mod") /* * This function is called each time the module is loaded or unloaded. * Since we are a miscellaneous module, we have to provide whatever * code is necessary to patch ourselves into the area we are being * loaded to change. * * For the system call table, we duplicate the code in the kern_lkm.c * file for patching into the system call table. We can tell what * has been allocated, etc. by virtue of the fact that we know the * criteria used by the system call loader interface. We still * kick out the copyright to the console here (to give an example). * * The stat information is basically common to all modules, so there * is no real issue involved with stat; we will leave it nosys(), * cince we don't have to do anything about it. */ static int miscmod_handle( lkmtp, cmd) struct lkm_table *lkmtp; int cmd; { int i; struct lkm_misc *args = lkmtp->private.lkm_misc; int err = 0; /* default = success*/ - extern int nsysent; /* init_sysent.c*/ extern int lkmnosys(); /* allocable slot*/ switch( cmd) { case LKM_E_LOAD: /* * Don't load twice! (lkmexists() is exported by kern_lkm.c) */ if( lkmexists( lkmtp)) return( EEXIST); /* * This is where we would express a slot preference if * we had one; since we don't, we will simply duplicate * the "auto" code and forget the other. */ /* * Search the table looking for a slot... */ for( i = 0; i < nsysent; i++) if( sysent[ i].sy_call == lkmnosys) break; /* found it!*/ /* out of allocable slots?*/ if( i == nsysent) { err = ENFILE; break; } /* save old -- we must provide our own data area*/ bcopy( &sysent[ i], &oldent, sizeof( struct sysent)); /* replace with new*/ bcopy( &newent, &sysent[ i], sizeof( struct sysent)); /* done!*/ args->lkm_offset = i; /* slot in sysent[]*/ /* if we make it to here, print copyright on console*/ printf( "\nSample Loaded miscellaneous module (system call)\n"); printf( "Copyright (c) 1993\n"); printf( "Terrence R. Lambert\n"); printf( "All rights reserved\n"); break; /* Success*/ case LKM_E_UNLOAD: /* current slot...*/ i = args->lkm_offset; /* replace current slot contents with old contents*/ bcopy( &oldent, &sysent[ i], sizeof( struct sysent)); break; /* Success*/ default: /* we only understand load/unload*/ err = EINVAL; break; } return( err); } /* * External entry point; should generally match name of .o file. The * arguments are always the same for all loaded modules. The "load", * "unload", and "stat" functions in "DISPATCH" will be called under * their respective circumstances unless their value is "nosys". If * called, they are called with the same arguments (cmd is included to * allow the use of a single function, ver is included for version * matching between modules and the kernel loader for the modules). * * Since we expect to link in the kernel and add external symbols to * the kernel symbol name space in a future version, generally all * functions used in the implementation of a particular module should * be static unless they are expected to be seen in other modules or * to resolve unresolved symbols alread existing in the kernel (the * second case is not likely to ever occur). * * The entry point should return 0 unless it is refusing load (in which * case it should return an errno from errno.h). */ -miscmod( lkmtp, cmd, ver) +misc_mod( lkmtp, cmd, ver) struct lkm_table *lkmtp; int cmd; int ver; { DISPATCH(lkmtp,cmd,ver,miscmod_handle,miscmod_handle,nosys) } /* * EOF -- This file has not been truncated. */ diff --git a/share/examples/lkm/misc/test/Makefile b/share/examples/lkm/misc/test/Makefile index 466e4ac19021..61bbf372708b 100644 --- a/share/examples/lkm/misc/test/Makefile +++ b/share/examples/lkm/misc/test/Makefile @@ -1,66 +1,69 @@ # 05 Jun 93 # # Makefile for testmisc # # 05 Jun 93 Terry Lambert Original # # Copyright (c) 1993 Terrence R. Lambert. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by Terrence R. Lambert. # 4. The name Terrence R. Lambert may not be used to endorse or promote # products derived from this software without specific prior written # permission. # # THIS SOFTWARE IS PROVIDED BY TERRENCE R. LAMBERT ``AS IS'' AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE TERRENCE R. LAMBERT BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # - +# $Id$ +# PROG= testmisc NOMAN= +MODSTAT= /usr/bin/modstat + load: @echo "This test program will call the sample system call;" @echo "the "offset requested will be shown as 'Off' in the" @echo "status display below. If no modules are loaded, an" @echo "error '3' will be reported." @echo @echo "The sample system call will display a message on the" @echo "system console each time it is run." @echo @echo - /sbin/modstat -n miscmod + ${MODSTAT} -n misc_mod @echo @./testmisc unload: @echo "This test program will cause an error '3' if the call" @echo "has been successfully unloaded by building 'unload' in" @echo "the 'module' subdirectory." @echo - /sbin/modstat -n miscmod + ${MODSTAT} -n misc_mod .include # # EOF -- This file has not been truncated. # diff --git a/share/examples/lkm/misc/test/testmisc.c b/share/examples/lkm/misc/test/testmisc.c index 622857d0ca52..83f333817fc0 100644 --- a/share/examples/lkm/misc/test/testmisc.c +++ b/share/examples/lkm/misc/test/testmisc.c @@ -1,62 +1,63 @@ /* 05 Jun 93*/ /* * testmisc.c * * Test program to call the sample loaded miscellaneous system call. * * 05 Jun 93 Terry Lambert Original * * * Copyright (c) 1993 Terrence R. Lambert. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by Terrence R. Lambert. * 4. The name Terrence R. Lambert may not be used to endorse or promote * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY TERRENCE R. LAMBERT ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE TERRENCE R. LAMBERT BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ #include main() { char buf[ 80]; int err = 0; printf( "Table offset as reported by modstat: "); - if( gets( buf) == NULL) { + fflush( stdout); + if( fgets( buf, 80, stdin) == NULL) { printf( "[ABORT]\n"); exit( 1); } - if( err = syscall( atoi( buf) /* no arguments*/)) + if(( err = syscall( atoi( buf) /* no arguments*/))) perror( "syscall"); exit( err); } /* * EOF -- This file has not been truncated */