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>
