Date: Fri, 18 Apr 2003 04:52:49 -0700 From: Chuck Tuffli <chuck_tuffli@agilent.com> To: Yuriy Tsibizov <Yuriy.Tsibizov@gfk.ru> Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: How to debug panic()s in device_attach function of kernel module? Message-ID: <20030418115248.GA169@thegrail.rose.agilent.com> In-Reply-To: <C192C8912E798F4399668791C8965190674E2F@mx.hhp.local> References: <C192C8912E798F4399668791C8965190674E2F@mx.hhp.local>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Apr 18, 2003 at 10:52:41AM +0400, Yuriy Tsibizov wrote: > > I'm trying to debug panic()s in one of my drivers (I can compile it > only as module now), but I can't find a way to get address where it > was loaded by kldload. I can't run kldstat (as recommended by > developers' handbook, 17.6) because it panic()s during kldloading > (after LOR of ZONE_LOCKs after malloc(0) somewhere in device_attach > of my driver). Can I get this address inside kdb? You were in the right section of the handbook. Take a look at the paragraph after the kldstat suggestion. You can walk the linker_files structure to see where modules are loaded. I use gbd for debugging and define the following function in my .gdbinit file to walk this list define lm set $linker = (struct linker_file *)linker_files->tqh_first while $linker != 0 printf "found %s at %#x\n", $linker->filename, $linker->address set $linker = $linker.link.tqe_next end end You can manually follow the above approach using kdb as well. Hope that helps. -- Chuck Tuffli <chuck_tuffli AT NO_SPAM agilent DOT com> Agilent Technologies, Storage and Networking
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030418115248.GA169>