--- wikisrc/kernel_debugging_with_qemu.mdwn 2015/08/05 12:58:13 1.12 +++ wikisrc/kernel_debugging_with_qemu.mdwn 2021/12/27 14:26:28 1.19 @@ -16,11 +16,11 @@ If your host system is running NetBSD, i from pkgsrc: * emulators/qemu >= 2.0.0nb4 -* misc/py-anita +* misc/py-anita >= 1.44 If your host system uses a package system other than pkgsrc, use that to install cvs, make, gcc, qemu, the Python pexpect -library, and genisoimage or mkisofs. Also download and +library, and genisoimage or mkisofs. Also download and install the most recent anita package from . @@ -28,11 +28,13 @@ install the most recent anita package fr Check out the NetBSD-current sources from CVS and build a full release of NetBSD-current/i386 with debug symbols using the build.sh script. -The i386 port is the preferred test platform because the two -other ports supported by anita are affected by known bugs: amd64 by -[[PR 50128|http://gnats.NetBSD.org/50128]], and sparc by -[[qemu bug 1399943|https://bugs.launchpad.net/qemu/+bug/1399943]]. -If you do the build in a directory other than /usr/src, +The i386 port is preferred because these instructions have been +successfully tested with it. +The amd64 port won't work because of [[PR 50128|http://gnats.NetBSD.org/50128]], +and sparc has not been tested since [[qemu bug +1399943|https://bugs.launchpad.net/qemu/+bug/1399943]] was fixed. + +If you do the build in a directory other than /usr/src, use the -fdebug-prefix-map option to ensure that the source file names embedded in the debug symbols point to /usr/src, which is where the sources will be installed on the target system. For example: @@ -40,7 +42,7 @@ installed on the target system. For exa [[!template id=programlisting text=""" $ CVSROOT=anoncvs@anoncvs.NetBSD.org:/cvsroot cvs checkout -A -P src $ cd src - $ ./build.sh -j 4 -V MKDEBUG=YES -V COPTS="-g -fdebug-prefix-map=$(pwd)=/usr/src" -O ../obj -m i386 -U release sourcesets + $ ./build.sh -j 4 -V MKDEBUG=yes -V COPTS="-g -fdebug-prefix-map=$(pwd)=/usr/src" -O ../obj -m i386 -U release sourcesets """]] For best performance, change the number after "-j" to the number of CPU cores @@ -52,7 +54,7 @@ Install the system in a virtual machine, [[!template id=programlisting text=""" $ cd .. - $ anita --workdir work --disk-size 4G --memory-size 256M \ + $ anita --workdir work --disk-size 8G --memory-size 256M \ --sets kern-GENERIC,modules,base,etc,comp,debug,games,man,misc,tests,text,syssrc,src,sharesrc,gnusrc \ install $(pwd)/obj/releasedir/i386/ """]] @@ -72,7 +74,7 @@ First start the target VM, enabling qemu on TCP port 1234: [[!template id=programlisting text=""" - $ qemu-system-i386 -nographic -snapshot -hda work/wd0.img -gdb tcp::1234 + $ qemu-system-i386 -nographic -snapshot -hda work/wd0.img -m 128 -gdb tcp::1234 """]] If you don't want everyone on the Internet to be able to debug your @@ -82,7 +84,7 @@ your firewall. In a second terminal window, start the gdb VM: [[!template id=programlisting text=""" - $ qemu-system-i386 -nographic -snapshot -hda work/wd0.img + $ qemu-system-i386 -nographic -snapshot -hda work/wd0.img -m 256 """]] Log in to the gdb VM as root and set up the network: @@ -111,10 +113,8 @@ with full debug symbols and access to th """]] If the stack trace prints very slowly (like 30 seconds per stack -frame), it's likely because you are using a version of qemu where -the user-mode networking code fails to disable the Nagle algorithm. -This is fixed in the qemu in pkgsrc, but you may run into it if your -qemu is not installed via pkgsrc. +frame), you are probably using an old version of qemu that fails +to disable the Nagle algorithm. ## Qemu tips