On Mon, 20 Jul 2020 09:44:29 +0200 Jiri Slaby <jsl...@suse.cz> wrote:
> 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) hm, I just merged http://lkml.kernel.org/r/20200720082709.252805-1-pih...@chromium.org. Which is preferable? > --- 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