scripts: decode_stacktrace: fix ARM architecture decoding
authorRobert Jarzmik <robert.jarzmik@free.fr>
Fri, 4 Sep 2015 22:43:26 +0000 (15:43 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 4 Sep 2015 23:54:41 +0000 (16:54 -0700)
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: Robert 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: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
scripts/decode_stacktrace.sh

index 515c4c00e957cae89febefc38533415490ae88c8..00d6d53c2681dac3ce2f736baff7cbc177825b0e 100755 (executable)
@@ -14,11 +14,14 @@ declare -A cache
 
 parse_symbol() {
        # The structure of symbol at this point is:
-       #   [name]+[offset]/[total length]
+       #   ([name]+[offset]/[total length])
        #
        # For example:
        #   do_basic_setup+0x9c/0xbf
 
+       # Remove the englobing parenthesis
+       symbol=${symbol#\(}
+       symbol=${symbol%\)}
 
        # Strip the symbol name so that we could look it up
        local name=${symbol%+*}