Date: Sun, 18 Oct 1998 11:05:01 +0800 From: Peter Wemm <peter@netplex.com.au> To: Chuck Robey <chuckr@mat.net> Cc: freebsd-current@FreeBSD.ORG Subject: Re: panic Message-ID: <199810180305.LAA23805@spinner.netplex.com.au> In-Reply-To: Your message of "Sat, 17 Oct 1998 15:50:02 -0400." <Pine.BSF.4.05.9810171544170.350-100000@picnic.mat.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Chuck Robey wrote: > I'm now getting a panic on startup, SMP kernel, on a config file that > was working fine a few days ago. The panic is coming in module_register > + 14. I'd give you the stack dump, but I can't seem to get a kernel > dump captured yet. > > I checked, all my LKMs are brand new. This is a fresh build for both > the world and the kernel from equal sources (no intervening cvsup or cvs > actions), with all new LKMs. Normal ELF system you'd expect. > > Panic is supervisor read, page not present. Can't tell what module it > was trying to load without the kernel dump (I think). Panic message > says it's in the swapper process, but I think that's not germane here > (is it?). I have a fault virtual address of 8be58955, I'm not sure > that's useful, seeing as I can't translate that to a module address. It is useful, but bad news. :-( It means that the SYSINIT() process got scrambled somehow. There are a bunch of sysinit's like this: static moduledata_t root_bus_mod = { "rootbus", root_bus_module_handler, 0 }; DECLARE_MODULE(rootbus, root_bus_mod, SI_SUB_DRIVERS, SI_ORDER_FIRST); .. which turns into SYSINIT(rootbusmodule, SI_SUB_DRIVERS, SI_ORDER_FIRST, module_register_init, &root_bus_mod) Effectively, this causes init_main.c to call module_register_init((void *)&root_bus_mod); module_register_init(void *arg) { moduledata_t* data = (moduledata_t*) arg; error = module_register(data->name, data->evhand, data->priv, data->_file); } module_register(const char* name, modeventhand_t handler, void* arg, void *file) { size_t namelen; namelen = strlen(name) + 1; ^^^^^^^^^^^^ Here is where it's crashing. And there's the dilemma. Either the name in the moduledata_t struct got smashed somehow, or the sysinit process is passing the wrong pointer to module_register_init(). I picked this one out for the example for no particular reason, this has been in the kernel for a while. There are a number of these activated by new definitions of things like VFS_SET(), VNODEOP_SET(), EXEC_SET() macros in src/sys/*.h. Hmm, you don't have MATH_EMULATE or GPL_MATH_EMULATE options turned on by any chance, do you? Take them out if so. Another thought.. Please try a 'make clean' and do a rebuild of the kernel. Also, it would be helpful to know if the same problem happens with a plain a.out kernel booted from the standard bootblocks, not /boot/loader. I'd be suprised if it was different though. Cheers, -Peter To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199810180305.LAA23805>