When addr2line returns more than one location, decode_stacktrace does
not currently remove base path from the paths. So the result might look
like (line wrapped here):
 ptrace_stop (include/linux/freezer.h:57
 
/home/abuild/rpmbuild/BUILD/kernel-default-5.8.rc5/linux-5.8-rc5/linux-obj/../include/linux/freezer.h:67
 
/home/abuild/rpmbuild/BUILD/kernel-default-5.8.rc5/linux-5.8-rc5/linux-obj/../include/linux/freezer.h:128
 
/home/abuild/rpmbuild/BUILD/kernel-default-5.8.rc5/linux-5.8-rc5/linux-obj/../include/linux/freezer.h:173
 
/home/abuild/rpmbuild/BUILD/kernel-default-5.8.rc5/linux-5.8-rc5/linux-obj/../kernel/signal.c:2217)

Make sure all the lines are processed, so the result now looks like
(line wrapped here again):
 ptrace_stop (include/linux/freezer.h:57 include/linux/freezer.h:67
 include/linux/freezer.h:128 include/linux/freezer.h:173
 kernel/signal.c:2217)

Signed-off-by: Jiri Slaby <jsl...@suse.cz>
Fixes: 67a28de47faa (scripts/decode_stacktrace: only strip base path when a 
prefix of the path)
Cc: Sasha Levin <sas...@kernel.org>
---
 scripts/decode_stacktrace.sh | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/scripts/decode_stacktrace.sh b/scripts/decode_stacktrace.sh
index 4bdcb6d8c605..3fddcb48b464 100755
--- a/scripts/decode_stacktrace.sh
+++ b/scripts/decode_stacktrace.sh
@@ -140,14 +140,15 @@ parse_symbol() {
                return
        fi
 
-       # Strip out the base of the path
-       code=${code#$basepath/}
-
-       # In the case of inlines, move everything to same line
-       code=${code//$'\n'/' '}
+       declare -a output
+       while read LINE; do
+               # Strip out the base of the path
+               LINE=${LINE#$basepath/}
+               output+=("$LINE")
+       done <<< $code
 
        # Replace old address with pretty line numbers
-       symbol="$segment$name ($code)"
+       symbol="$segment$name (${output[@]})"
 }
 
 decode_code() {
-- 
2.27.0

Reply via email to