sysctl_set panic
Herbert Acker
hacker2004 at damon.com
Fri Aug 27 20:48:35 PDT 2004
Hi. I have been occasionally plagued by panics in KLD:
at /usr/src/sys/i386/i386/trap.c:466
#6 0xc016c2dc in sysctl_register_oid (oidp=0x0)
at /usr/src/sys/kern/kern_sysctl.c:92
#7 0xc016c841 in sysctl_register_set (lsp=0xcd5000a0)
at /usr/src/sys/kern/kern_sysctl.c:391
#8 0xc0157847 in linker_file_register_sysctls (lf=0xcd4ea180)
at /usr/src/sys/kern/kern_linker.c:224
#9 0xc01578fc in linker_load_file (
It bit me once several years ago, and then again today.
It croaks because it finds the sysctl_set symbol in the KLD but
the OIDs are zero.
I finally got pissed off enough and figured out what the problem is,
instead of using the dynamic-sysctls approach I adopted the other time.
Essentially, I have two KLDs. One imports symbols from the other.
I have them in separate dirs, and have a -I ../dir0/ in the
Makefile of the KLD which imports the interface of the other KLD.
IE:
dir0/has_interfaces_and_sysctls.c
dir1/uses_interfaces_no_sysctls.c
dir1/Makefile: CFLAGS += -I../dir0/
gensetdefs creates files to manage the .set sections.
The setdefs0.c includes setdefs.h, and the ../dir0/setdefs.h has some
sysctls, so it has the set definitions for those sysctls.
The second KLD has no sysctls. The second KLD is being linked with
a setdefs0.o which is made using the ../dir0/setdefs.h.
Simple fix: put "-I." in the CFLAGS prior to -I../dir0/.
Hopefully, this will be helpful to some others.
Damon
More information about the freebsd-hackers
mailing list