kernel configuration and debug
Contents
source code download
git clone --depth 1 -b stable/15 https://git.freebsd.org/src.git src git clone --depth 1 -b stable/14 https://git.freebsd.org/src.git src git clone --depth 1 -b main https://git.freebsd.org/src.git src
FreeBSD next boot
root@fbsd:/usr/src # nextboot -k kernel.safe root@fbsd:/usr/src # ll /boot/nextboot.conf -rw------- 1 root wheel 43B Apr 15 10:48 /boot/nextboot.conf root@fbsd:/usr/src # cat /boot/nextboot.conf nextboot_enable="YES" kernel="kernel.safe" root@fbsd:/usr/src #
FreeBSD install kgdb
cc@fbsd:~ % cd /usr/ports/devel/gdb cc@fbsd:/usr/ports/devel/gdb % sudo make install clean BATCH="YES" ## or install through package cc@fbsd:~ % sudo pkg install devel/gdb
debug a core file
cc@fbsd:/var/crash % sudo kgdb /usr/lib/debug/boot/kernel/kernel.debug /var/crash/vmcore.last
## map the local source path
(kgdb) set substitute-path /home/pkgbuild/worktrees/main /usr/src
## or
cc@fbsd:/var/crash % sudo kgdb /usr/obj/usr/src/amd64.amd64/sys/GENERIC/kernel.debug /var/crash/vmcore.last
## for example:
root@n1fbsd16:/var/crash # kgdb -n last
GNU gdb (GDB) 15.1 [GDB v15.1 for FreeBSD]
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-portbld-freebsd16.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/obj/usr/src/amd64.amd64/sys/GENERIC/kernel.full...
Unread portion of the kernel message buffer:
panic: testing invariants
cpuid = 0
time = 1771516985
KDB: stack backtrace:
db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe004b22f830
vpanic() at vpanic+0x136/frame 0xfffffe004b22f960
panic() at panic+0x43/frame 0xfffffe004b22f9c0
siftr_manage_ops() at siftr_manage_ops+0xae/frame 0xfffffe004b22fba0
siftr_sysctl_enabled_handler() at siftr_sysctl_enabled_handler+0x7e/frame 0xfffffe004b22fbe0
sysctl_root_handler_locked() at sysctl_root_handler_locked+0x9c/frame 0xfffffe004b22fc30
sysctl_root() at sysctl_root+0x22f/frame 0xfffffe004b22fcb0
userland_sysctl() at userland_sysctl+0x196/frame 0xfffffe004b22fd50
sys___sysctl() at sys___sysctl+0x65/frame 0xfffffe004b22fe00
amd64_syscall() at amd64_syscall+0x169/frame 0xfffffe004b22ff30
fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe004b22ff30
--- syscall (202, FreeBSD ELF64, __sysctl), rip = 0x3c0c75ee98da, rsp = 0x3c0c73843968, rbp = 0x3c0c738439b0 ---
KDB: enter: panic
Reading symbols from /boot/kernel/mac_ntpd.ko...
Reading symbols from /usr/lib/debug//boot/kernel/mac_ntpd.ko.debug...
Reading symbols from /root/privateSRC/siftr2/siftr2.ko...
Reading symbols from /root/privateSRC/siftr2/siftr2.ko.debug...
__curthread () at /usr/src/sys/amd64/include/pcpu_aux.h:57
57 __asm("movq %%gs:%c1,%0" : "=r" (td)
(kgdb) bt
#0 __curthread () at /usr/src/sys/amd64/include/pcpu_aux.h:57
#1 doadump (textdump=textdump@entry=0) at /usr/src/sys/kern/kern_shutdown.c:399
#2 0xffffffff804b3b7a in db_dump (dummy=<optimized out>, dummy2=<optimized out>, dummy3=<optimized out>,
dummy4=<optimized out>) at /usr/src/sys/ddb/db_command.c:596
#3 0xffffffff804b396d in db_command (last_cmdp=<optimized out>, cmd_table=<optimized out>, dopager=true)
at /usr/src/sys/ddb/db_command.c:508
#4 0xffffffff804b362d in db_command_loop () at /usr/src/sys/ddb/db_command.c:555
#5 0xffffffff804b7026 in db_trap (type=<optimized out>, code=<optimized out>) at /usr/src/sys/ddb/db_main.c:267
#6 0xffffffff80c1c92f in kdb_trap (type=type@entry=3, code=code@entry=0, tf=tf@entry=0xfffffe004b22f770)
at /usr/src/sys/kern/subr_kdb.c:790
#7 0xffffffff8112856e in trap (frame=<optimized out>) at /usr/src/sys/amd64/amd64/trap.c:614
#8 <signal handler called>
#9 kdb_enter (why=<optimized out>, msg=<optimized out>) at /usr/src/sys/kern/subr_kdb.c:556
#10 0xffffffff80bc98cb in vpanic (fmt=0xffffffff82e17374 "testing invariants", ap=ap@entry=0xfffffe004b22f9a0)
at /usr/src/sys/kern/kern_shutdown.c:962
#11 0xffffffff80bc9733 in panic (fmt=0xffffffff81da2280 <cnputs_mtx> "\004i!\201\377\377\377\377")
at /usr/src/sys/kern/kern_shutdown.c:887
#12 0xffffffff82e1416e in siftr_manage_ops (action=1 '\001') at siftr2.c:1076
#13 0xffffffff82e1407e in siftr_sysctl_enabled_handler (oidp=0xffffffff82e18130 <sysctl___net_inet_siftr2_enabled>,
arg1=0xffffffff82e18a58 <siftr_enabled>, arg2=0, req=0xfffffe004b22fcc0) at siftr2.c:1243
#14 0xffffffff80bdad3c in sysctl_root_handler_locked (oid=oid@entry=0xffffffff82e18130 <sysctl___net_inet_siftr2_enabled>,
arg1=arg1@entry=0xffffffff82e18a58 <siftr_enabled>, arg2=arg2@entry=0, req=req@entry=0xfffffe004b22fcc0,
tracker=tracker@entry=0xfffffe004b22fc40) at /usr/src/sys/kern/kern_sysctl.c:199
#15 0xffffffff80bda09f in sysctl_root (oidp=<optimized out>, arg1=0xffffffff82e18a58 <siftr_enabled>,
arg1@entry=0xfffffe004b22fd80, arg2=0, arg2@entry=4, req=req@entry=0xfffffe004b22fcc0)
at /usr/src/sys/kern/kern_sysctl.c:2427
#16 0xffffffff80bda786 in userland_sysctl (td=td@entry=0xfffff800094f4780, name=name@entry=0xfffffe004b22fd80,
namelen=<optimized out>, old=<optimized out>, oldlenp=<optimized out>, inkernel=inkernel@entry=0, new=0x4c9d2b809000,
newlen=4, retval=0xfffffe004b22fde8, flags=0) at /usr/src/sys/kern/kern_sysctl.c:2586
#17 0xffffffff80bda5b5 in sys___sysctl (td=0xfffff800094f4780, uap=0xfffff800094f4ba8)
at /usr/src/sys/kern/kern_sysctl.c:2457
#18 0xffffffff81129a09 in syscallenter (td=0xfffff800094f4780) at /usr/src/sys/amd64/amd64/../../kern/subr_syscall.c:193
#19 amd64_syscall (td=0xfffff800094f4780, traced=0) at /usr/src/sys/amd64/amd64/trap.c:1208
#20 <signal handler called>
#21 0x00003c0c75ee98da in ?? ()
Backtrace stopped: Cannot access memory at address 0x3c0c73843968
(kgdb) f 12
#12 0xffffffff82e1416e in siftr_manage_ops (action=1 '\001') at siftr2.c:1076
1076 KASSERT(0, ("testing invariants"));
(kgdb)
FreeBSD Kernel config file options
To compile with -O0, update this line in the kernel config file
makeoptions DEBUG="-g -O0"
- the default debug options are in sys/conf/std.debug
FreeBSD build a new kernel
root@fbsd:/usr/src # make -j`sysctl -n hw.ncpu` kernel KERNCONF=GENERIC > /tmp/kernel.log ## bypass the packaged kernel restriction root@s1:/usr/src # make installkernel KERNCONF=GENERIC ALLOW_PKGBASE_INSTALLKERNEL=yes
Ubuntu Linux build a new kernel
apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev packaging-dev fakeroot bc git python3 dwarves scripts/checkpatch.pl --strict -f path/to/your_file.c cp /boot/config-$(uname -r) .config make olddefconfig make localmodconfig // use with caution that the kernel may not cover all hardware make menuconfig make clean make -j `nproc` bindeb-pkg LOCALVERSION=-custom > /tmp/kernel.log cd .. dpkg -i *.deb