1. 05 9月, 2015 1 次提交
    • R
      scripts: decode_stacktrace: fix ARM architecture decoding · e260fe01
      Robert Jarzmik 提交于
      Fix the stack decoder for the ARM architecture.
      An ARM stack is designed as :
      
      [   81.547704] [<c023eb04>] (bucket_find_contain) from [<c023ec88>] (check_sync+0x40/0x4f8)
      [   81.559668] [<c023ec88>] (check_sync) from [<c023f8c4>] (debug_dma_sync_sg_for_cpu+0x128/0x194)
      [   81.571583] [<c023f8c4>] (debug_dma_sync_sg_for_cpu) from [<c0327dec>] (__videobuf_s
      
      The current script doesn't expect the symbols to be bound by
      parenthesis, and triggers the following errors :
      
        awk: cmd. line:1: error: Unmatched ( or \(: / (check_sync$/
        [   81.547704] (bucket_find_contain) from (check_sync+0x40/0x4f8)
      
      Fix it by chopping starting and ending parenthesis from the each symbol
      name.
      
      As a side note, this probably comes from the function
      dump_backtrace_entry(), which is implemented differently for each
      architecture.  That makes a single decoding script a bit a challenge.
      Signed-off-by: NRobert Jarzmik <robert.jarzmik@free.fr>
      Cc: Sasha Levin <sasha.levin@oracle.com>
      Cc: Russell King <rmk+kernel@arm.linux.org.uk>
      Cc: Michal Marek <mmarek@suse.cz>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      e260fe01
  2. 11 6月, 2014 1 次提交
    • S
      decode_stacktrace: make stack dump output useful again · dbd1abb2
      Sasha Levin 提交于
      Right now when people try to report issues in the kernel they send stack
      dumps to eachother, which looks something like this:
      
        [    6.906437]  [<ffffffff811f0e90>] ? backtrace_test_irq_callback+0x20/0x20
        [    6.907121]  [<ffffffff84388ce8>] dump_stack+0x52/0x7f
        [    6.907640]  [<ffffffff811f0ec8>] backtrace_regression_test+0x38/0x110
        [    6.908281]  [<ffffffff813596a0>] ? proc_create_data+0xa0/0xd0
        [    6.908870]  [<ffffffff870a8040>] ? proc_modules_init+0x22/0x22
        [    6.909480]  [<ffffffff810020c2>] do_one_initcall+0xc2/0x1e0
        [...]
      
      However, most of the text you get is pure garbage.
      
      The only useful thing above is the function name.  Due to the amount of
      different kernel code versions and various configurations being used,
      the kernel address and the offset into the function are not really
      helpful in determining where the problem actually occured.
      
      Too often the result of someone looking at a stack dump is asking the
      person who sent it for a translation for one or more 'addr2line'
      translations.  Which slows down the entire process of debugging the
      issue (and really annoying).
      
      The decode_stacktrace script is an attempt to make the output more
      useful and easy to work with by translating all kernel addresses in the
      stack dump into line numbers.  Which means that the stack dump would
      look like this:
      
        [  635.148361]  dump_stack (lib/dump_stack.c:52)
        [  635.149127]  warn_slowpath_common (kernel/panic.c:418)
        [  635.150214]  warn_slowpath_null (kernel/panic.c:453)
        [  635.151031]  _oalloc_pages_slowpath+0x6a/0x7d0
        [  635.152171]  ? zone_watermark_ok (mm/page_alloc.c:1728)
        [  635.152988]  ? get_page_from_freelist (mm/page_alloc.c:1939)
        [  635.154766]  __alloc_pages_nodemask (mm/page_alloc.c:2766)
      
      It's pretty obvious why this is better than the previous stack dump
      before.
      
      Usage is pretty simple:
      
              ./decode_stacktrace.sh [vmlinux] [base path]
      
      Where vmlinux is the vmlinux to extract line numbers from and base path
      is the path that points to the root of the build tree, for example:
      
              ./decode_stacktrace.sh vmlinux /home/sasha/linux/ < input.log > output.log
      
      The stack trace should be piped through it (I, for example, just pipe
      the output of the serial console of my KVM test box through it).
      Signed-off-by: NSasha Levin <sasha.levin@oracle.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      dbd1abb2