[Crash-utility] Re: Fix for source line numbers for x86_64 modules
Mike Snitzer
snitzer at redhat.com
Thu Sep 17 13:25:01 UTC 2009
On Wed, Sep 16 2009 at 6:44pm -0400,
Bob Montgomery <bob.montgomery at hp.com> wrote:
> This patch allows the dis -l command to show real source line numbers
> for module code, instead of this sort of thing:
>
> crash-4.0.9> dis -l bnx2_poll_msix
> include/linux/cpumask.h: 612
> 0xffffffffa008acc3 <bnx2_poll_msix>: push %rbp
> 0xffffffffa008acc4 <bnx2_poll_msix+1>: mov %rsp,%rbp
> 0xffffffffa008acc7 <bnx2_poll_msix+4>: push %r15
> 0xffffffffa008acc9 <bnx2_poll_msix+6>: push %r14
> 0xffffffffa008accb <bnx2_poll_msix+8>: push %r13
> 0xffffffffa008accd <bnx2_poll_msix+10>: mov %esi,%r13d
> 0xffffffffa008acd0 <bnx2_poll_msix+13>: push %r12
> 0xffffffffa008acd2 <bnx2_poll_msix+15>: xor %r12d,%r12d
> 0xffffffffa008acd5 <bnx2_poll_msix+18>: push %rbx
> 0xffffffffa008acd6 <bnx2_poll_msix+19>: mov %rdi,%rbx
> 0xffffffffa008acd9 <bnx2_poll_msix+22>: sub $0x8,%rsp
>
> The problem has to do with a symbol table in the kernel containing an
> abnormally huge text range because of a goofy vsyscall reference in the
> file "arch/x86/kernel/hpet.c".
>
> (gdb) p *(struct block *)0x8d664b0
> $41 = {startaddr = 0xffffffff80225130, endaddr = 0xffffffffff6001b3,
>
> This range pretty much covers the entire module address space and since
> the kernel file is first in the object_files list, the search stops
> there and returns the closest symbol from the kernel, instead of looking
> on through the object list to the module of actual interest.
>
> This patch causes the code to keep looking through all modules and
> return the real best symbol thingy (you can tell how much I really know
> about gdb's symtab stuff, ahem). Thanks (and blame) to John Wright for
> suggesting the fix once I found the problem.
>
> The patch applies to the gdb patch file in the crash directory.
>
> John and I think that this code in gdb searches things too many times,
> particularly with this patch, but it's a start since it seems to fix the
> problem. Mayhaps some gdb experts can now help do it right.
>
> With the patch, the above example becomes:
>
> crash-4.0.9> dis -l bnx2_poll_msix
> /build/buildd/linux-2.6-clim-2.6.29-clim/debian/build/build_amd64_none_amd64/drivers/net/bnx2.c: 3215
> 0xffffffffa008acc3 <bnx2_poll_msix>: push %rbp
> 0xffffffffa008acc4 <bnx2_poll_msix+1>: mov %rsp,%rbp
> 0xffffffffa008acc7 <bnx2_poll_msix+4>: push %r15
> 0xffffffffa008acc9 <bnx2_poll_msix+6>: push %r14
> 0xffffffffa008accb <bnx2_poll_msix+8>: push %r13
> 0xffffffffa008accd <bnx2_poll_msix+10>: mov %esi,%r13d
> 0xffffffffa008acd0 <bnx2_poll_msix+13>: push %r12
> /build/buildd/linux-2.6-clim-2.6.29-clim/debian/build/build_amd64_none_amd64/drivers/net/bnx2.c: 3219
> 0xffffffffa008acd2 <bnx2_poll_msix+15>: xor %r12d,%r12d
> /build/buildd/linux-2.6-clim-2.6.29-clim/debian/build/build_amd64_none_amd64/drivers/net/bnx2.c: 3215
> 0xffffffffa008acd5 <bnx2_poll_msix+18>: push %rbx
> 0xffffffffa008acd6 <bnx2_poll_msix+19>: mov %rdi,%rbx
> 0xffffffffa008acd9 <bnx2_poll_msix+22>: sub $0x8,%rsp
>
>
> Bob Montgomery
I bisected this problem some time ago but it didn't go anywhere after
that:
http://www.redhat.com/archives/crash-utility/2009-January/msg00063.html
So your observation about arch/x86/kernel/hpet.c really makes sense.
Thanks for sorting this out Bob!!!
More information about the Crash-utility
mailing list