Date: Mon, 28 Jan 2008 16:59:09 -0500 From: John Baldwin <jhb@freebsd.org> To: src-committers@freebsd.org Cc: cvs-src@freebsd.org, cvs-all@freebsd.org Subject: Re: cvs commit: src/gnu/usr.bin/gdb/kgdb kgdb.h kld.c trgt.c Message-ID: <200801281659.09265.jhb@freebsd.org> In-Reply-To: <200801282140.m0SLeAKC035073@repoman.freebsd.org> References: <200801282140.m0SLeAKC035073@repoman.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Monday 28 January 2008 04:40:10 pm John Baldwin wrote: > jhb 2008-01-28 21:40:10 UTC > > FreeBSD src repository > > Modified files: > gnu/usr.bin/gdb/kgdb kgdb.h kld.c trgt.c > Log: > Add support for automatically loading symbols for kld's on startup: > - Add a new 'kgdb_auto_load_klds()' routine which is invoked during > startup that walks the list of linker files and tries to find a matching > kld on disk for each non-kernel kld. If a kld file is found, then it > is added as if the 'add-kld' command is invoked. One change from > 'add-kld' is that this method attempts to use the 'pathname' from the > linker_file structure first to try to load the file. If that fails > it then looks in the kernel directory followed by the directories in > the module path. > - Move the kld file suffix handling into a separate routine so that it > can be called standalone and to reduce duplicate code in find_kld_path(). > - Cache the offsets of members of 'struct linker_file' during startup > instead of computing them for each 'add-kld'. > - Use GDB's target_read_string() instead of direct KVM access. > - Add all resident sections from a kld by using bfd_map_over_sections() to > build the section list rather than just adding symbols for ".text", > ".data", ".bss", and ".rodata". > - Change the 'add-kld' command to do a y/n prompt before adding the > symbols when run interactively to match 'add-symbol-file'. Now 'add-kld' can be optional, you can always use it if the automatic magic picks a poor foo.ko (e.g. a stripped one w/o symbols). Example: > sudo ./kgdb -q -c /usr/crash/vmcore.10 /boot/kernel/kernel [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so: Undefined symbol "ps_pglobal_lookup"] Loaded symbols for kld "crash.ko" from "/boot/modules/crash.ko" #0 doadump () at pcpu.h:195 195 pcpu.h: No such file or directory. in pcpu.h (kgdb) where #0 doadump () at pcpu.h:195 #1 0xc05d399c in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:417 #2 0xc05d3c0a in panic (fmt=Variable "fmt" is not available. ) at /usr/src/sys/kern/kern_shutdown.c:571 #3 0xc08115d9 in dblfault_handler () at /usr/src/sys/i386/i386/trap.c:927 #4 0xc05c6220 in mtx_pool_setup_dynamic () #5 0xc065e125 in arc4rand (ptr=0xe61b0168, len=4, reseed=0) at /usr/src/sys/libkern/arc4random.c:142 #6 0xc065e171 in arc4random () at /usr/src/sys/libkern/arc4random.c:150 #7 0xc3d43402 in blow_stack () at crash.c:773 #8 0xc3d43410 in blow_stack () at crash.c:764 #9 0xc3d43410 in blow_stack () at crash.c:764 (Note that blow_stack() is in crash.ko and the stack trace worked right away.) It even works for the live kernel (scary): > sudo ./kgdb -q /boot/kernel/kernel /dev/mem [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so: Undefined symbol "ps_pglobal_lookup"] Loaded symbols for kld "iwi_bss.ko" from "/boot/kernel/iwi_bss.ko" Loaded symbols for kld "logo_saver.ko" from "/boot/kernel/logo_saver.ko" #0 sched_switch (td=0xc08fdb90, newtd=Variable "newtd" is not available. ) at /usr/src/sys/kern/sched_ule.c:1905 1905 cpuid = PCPU_GET(cpuid); (kgdb) Now just need to axe that '[GDB will not be able blah blah blah]' message. Note that you can't see which kld's are loaded currently. At some point I will rewrite the kld support to actually hook into GDB's shared library support so that 'info sharedlibrary' will work. I'm slowly learning GDB internals, but that bit will probably take a while. -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200801281659.09265.jhb>