[PATCH] Automatic kernel version module dependencies..

John Baldwin jhb at freebsd.org
Mon Feb 11 12:46:22 PST 2008


On Sunday 10 February 2008 06:24:37 am Dag-Erling Smørgrav wrote:
> "M. Warner Losh" <imp at bsdimp.com> writes:
> > Dag-Erling_Smørgrav <des at des.no> writes:
> > > ...provided they were built from the same config...  I think
> > > MUTEX_PROFILING has been fixed, but there may still be cases where
> > > the ABI changes dependening on kernel options.
> > These are usually well documented.  But I can't find any in the
> > current doc set.  Maybe you could point me at options that do this so
> > we can document them (and maybe add a #warning when compiling with
> > them)?
> 
> Here's one I found: DEBUG_LOCKS changes the size of struct lock, which
> changes the size and layout of struct vnode.

Yes, DEBUG_LOCKS, MUTEX_PROFILING (O.B.E), and PAE are the ones I know of.  We 
could employ a similar strategy for these btw.  For example, you could do 
this for PAE:

sys/i386/i386/pmap.c:

#ifdef PAE
MODULE_VERSION(pae, 1);
#else
MODULE_VERSION(pae, 0);
#endif

sys/module.h:

#if defined(__i386__)
#ifdef PAE
#define PAE_DEPEND(name)	MODULE_DEPEND(name, pae, 1, 1, 1)
#else
#define	PAE_DEPEND(name)	MODULE_DEPEND(name, pae, 0, 0, 0)
#endif
#else
#define	PAE_DEPEND(name)	struct __hack
#endif

#define	DECLARE_MODULE(name, ...)			\
	...
	PAE_DEPEND(name);				\
	...

It sucks to have the MD-ness there.  Could perhaps have an MI macro like this:

sys/module.h:

#include <machine/module.h>

#ifndef	MACHINE_MODULE_DEPEND
#define	MACHINE_MODULE_DEPEND	struct __hack
#endif


sys/i386/include/module.h:

PAE bits from above but s/PAE_DEPEND/MACHINE_MODULE_DEPEND/.  In general we 
try to keep the number of such ABI-breaking options to a very bare minimum, 
so perhaps one-off hacks in sys/module.h rather than abstracting it is 
sufficient.

-- 
John Baldwin


More information about the freebsd-arch mailing list