Linking panic

Matthew Dillon dillon at apollo.backplane.com
Fri Nov 21 13:25:08 PST 2003


:Hi !
:
:>     Yah, type 'trace' at the DDB> prompt after the panic.
:Sorry, had to rebuild the kernel without
:"options DDB_UNATTENDED" first.
:
:OK, here we are:
:Kernel: type 12 trap, code = 0
:Stopped at      linker_preload+0x122: cmpl $0xc015e44,0x8(%eax)
:db> trace
:linker_preload(35f000,c0332304,c03322e0,c0326e24,c0326ec0) at 
:linker_preload+0x122
:__set_sysinit_set_sym_mbuf_sys_init(c015f658,0,0,622f3b2f,2f746f6f)
:at __set_sysinit_set_sym_mbuf_sys_init
:
:That's it.
:Uh, and my modules are all from the last build.
:
:Cheers
:Peter

    Try the following patch.  I have no idea what the problem is, but I
    put a NULL check in where it's crashing and I print out some debugging
    info.  Post the output.

					-Matt
    
Index: kern_linker.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_linker.c,v
retrieving revision 1.15
diff -u -r1.15 kern_linker.c
--- kern_linker.c	20 Nov 2003 22:07:33 -0000	1.15
+++ kern_linker.c	21 Nov 2003 21:19:51 -0000
@@ -1007,15 +1007,22 @@
 	    }
 	}
 	if (lf) {
+	    printf("CLASS: %p %s file %s\n", lc, lc->desc, lf->filename);
 	    lf->userrefs++;
 
 	    if (linker_file_lookup_set(lf, "sysinit_set", &si_start, &si_stop, NULL) == 0) {
+		printf("Get sysinit_set: %p %p\n", si_start, si_stop);
 		/* HACK ALERT!
 		 * This is to set the sysinit moduledata so that the module
 		 * can attach itself to the correct containing file.
 		 * The sysinit could be run at *any* time.
 		 */
 		for (sipp = si_start; sipp < si_stop; sipp++) {
+		     if (*sipp == NULL) {
+			 printf("PROBLEM! *sipp is NULL at %p\n", *sipp);
+			 continue;
+		     }
+
 		    if ((*sipp)->func == module_register_init) {
 			moddata = (*sipp)->udata;
 			error = module_register(moddata, lf);





More information about the Kernel mailing list