On 26 October 2010 17:34, John Baldwin <j...@freebsd.org> wrote: > On Tuesday, October 26, 2010 4:00:14 am Selphie Keller wrote: >> Thanks Andriy, >> >> Took a look at the change to src/sys/sys/sysent.h >> >> @@ -149,7 +149,7 @@ static struct syscall_module_data name## >> }; \ >> \ >> static moduledata_t name##_mod = { \ >> - #name, \ >> + "sys/" #name, \ >> syscall_module_handler, \ >> &name##_syscall_mod \ >> }; \ >> >> applied the MFC prefix to pmap port: >> >> --- /usr/ports/sysutils/pmap/work/pmap/pmap/pmap.c.orig 2010-10-26 >> 00:55:32.000000000 -0700 >> +++ /usr/ports/sysutils/pmap/work/pmap/pmap/pmap.c 2010-10-26 >> 00:56:10.000000000 -0700 >> @@ -86,12 +86,12 @@ main(int argc, char **argv) >> struct kinfo_proc *kp; >> int pmap_helper_syscall; >> >> - if ((modid = modfind("pmap_helper")) == -1) { >> + if ((modid = modfind("sys/pmap_helper")) == -1) { >> /* module not found, try to load */ >> modid = kldload("pmap_helper.ko"); >> if (modid == -1) >> err(1, "unable to load pmap_helper module"); >> - modid = modfind("pmap_helper"); >> + modid = modfind("sys/pmap_helper"); >> if (modid == -1) >> err(1, "pmap_helper module loaded but not found"); >> } >> >> which restored functionality on freebsd 8.1. > > The best approach might be to have something like this: > > static int > pmap_find(void) > { > int modid; > > modid = modfind("pmap_helper"); > if (modid == -1) > modid = modfind("sys/pmap_helper"); > return (modid); > } > > then in the original main() routine use this: > > if ((modid = pmap_find()) == -1) { > /* module not found, try to load */ > modid = kldload("pmap_helper.ko"); > if (modid == -1) > err(1, "unable to load pmap_helper module"); > modid = pmap_find(); > if (modid == -1) > err(1, "pmap_helper module loaded but not found"); > } > > This would make the code work for both old and new versions.
Just another foo of many which I use at work generally. It lacks compat32 syscalls handling though (we don't use them). /* * We have to extract __FreeBSD_version from live kernel * as we depend on kernel feature and can run on an older world. */ if (sysctlbyname("kern.osreldate", &osreldate, &intlen, NULL, 0) < 0) err(-2, "sysctl(kern.osreldate)"); if (osreldate >= 800505) /* See r206346 in stable/8. */ strcpy(modname, "sys/foo"); else strcpy(modname, "foo"); -- wbr, pluknet _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"