Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 29 Jun 2004 13:00:14 -0400
From:      Brian Fundakowski Feldman <green@FreeBSD.org>
To:        Daniel Lang <dl@leo.org>
Cc:        John Baldwin <jhb@FreeBSD.org>
Subject:   Re: kern/68442: panic - acquiring duplicate lock of same type: "sleepq chain"
Message-ID:  <20040629170014.GC1144@green.homeunix.org>
In-Reply-To: <20040629163028.GM75577@atrbg11.informatik.tu-muenchen.de>
References:  <20040628202434.GA73213@atrbg11.informatik.tu-muenchen.de> <20040629153921.GE75577@atrbg11.informatik.tu-muenchen.de> <200406291200.12030.jhb@FreeBSD.org> <20040629163028.GM75577@atrbg11.informatik.tu-muenchen.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Jun 29, 2004 at 06:30:28PM +0200, Daniel Lang wrote:
> John Baldwin wrote on Tue, Jun 29, 2004 at 12:00:12PM -0400:
> > Can you pop up gdb -k on the kernel.debug and do 'l *0xc053932b'
> 
> Ahh, so stupid, I was close. 
> 
> Colin: I missed '-k', so forget my private reply.
> 
> But however it is futile, since the -current gdb (6.1.1) does
> not allow -k. I've read on the list, that there is work in
> progress right now.
> 
> I can copy the kernel image to a machine with a older -current
> which has working gdb -k. However I do not have the exact
> source tree there. I will see if I can check it out though.
> 
> I'll get back to you, if I can come up with a line number
> that could make sense. Not sure how sensitive it is to
> have the "exact" source-tree.

You can find it out without using gdb, too.  This will work for
only main kernel symbols, but you can do something similar for
KLDs.  Say I want to find a symbol that's in the main kernel object:

$ objdump -t /boot/kernel/kernel | ruby -ne 'fields = $_.split; if fields[3] == ".text" and fields[2] == "F" and 0xc048a800.between?(fields[0].hex, fields[0].hex + fields[4].hex) then puts $_ end'
c048a7ac l     F .text  0000006b cbb_removal

If I want to find a symbol from a different KLD, I have to adjust the address:
$ kldstat
Id Refs Address    Size     Name
 1    9 0xc0400000 3c1d90   kernel
 2    1 0xc07c2000 5600     snd_ich.ko
 3    2 0xc07c8000 1e8e8    snd_pcm.ko
 4   14 0xc07e7000 4e050    acpi.ko
 5    1 0xc1d35000 16000    linux.ko
$ objdump -t /boot/kernel/snd_ich.ko | ruby -ne 'fields = $_.split; if fields[3] == ".text" and fields[2] == "F" and (0xc07c3800 - 0xc07c2000).between?(fields[0].hex, fields[0].hex + fields[4].hex) then puts $_ end'
00001800 l     F .text  0000007e ich_rd

Hope this helps.

-- 
Brian Fundakowski Feldman                           \'[ FreeBSD ]''''''''''\
  <> green@FreeBSD.org                               \  The Power to Serve! \
 Opinions expressed are my own.                       \,,,,,,,,,,,,,,,,,,,,,,\



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040629170014.GC1144>