diff options
author | Robert Jarzmik <robert.jarzmik@free.fr> | 2015-09-04 18:43:26 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-09-04 19:54:41 -0400 |
commit | e260fe01fa39eddb05bd8b70fad5bc9a129648f2 (patch) | |
tree | a0fe77201bae60f7bb929fd2f2378cf726cf4a2d /scripts/decode_stacktrace.sh | |
parent | fa70900e0984792cc45a9e51c28684c3287058c2 (diff) |
scripts: decode_stacktrace: fix ARM architecture decoding
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>
Diffstat (limited to 'scripts/decode_stacktrace.sh')
-rwxr-xr-x | scripts/decode_stacktrace.sh | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/scripts/decode_stacktrace.sh b/scripts/decode_stacktrace.sh index 515c4c00e957..00d6d53c2681 100755 --- a/scripts/decode_stacktrace.sh +++ b/scripts/decode_stacktrace.sh | |||
@@ -14,11 +14,14 @@ declare -A cache | |||
14 | 14 | ||
15 | parse_symbol() { | 15 | parse_symbol() { |
16 | # The structure of symbol at this point is: | 16 | # The structure of symbol at this point is: |
17 | # [name]+[offset]/[total length] | 17 | # ([name]+[offset]/[total length]) |
18 | # | 18 | # |
19 | # For example: | 19 | # For example: |
20 | # do_basic_setup+0x9c/0xbf | 20 | # do_basic_setup+0x9c/0xbf |
21 | 21 | ||
22 | # Remove the englobing parenthesis | ||
23 | symbol=${symbol#\(} | ||
24 | symbol=${symbol%\)} | ||
22 | 25 | ||
23 | # Strip the symbol name so that we could look it up | 26 | # Strip the symbol name so that we could look it up |
24 | local name=${symbol%+*} | 27 | local name=${symbol%+*} |