linux/scripts
Sasha Levin dbd1abb209 decode_stacktrace: make stack dump output useful again
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: Sasha Levin <sasha.levin@oracle.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2014-06-10 15:29:43 -07:00
..
basic
coccinelle scripts/coccinelle: Use PTR_ERR_OR_ZERO 2014-04-08 17:27:01 +02:00
dtc scripts/dtc: Add a script to update to mainline dtc source 2014-01-21 13:48:34 +00:00
genksyms genksyms: fix typeof() handling 2014-04-03 16:20:52 -07:00
kconfig kconfig: make allnoconfig disable options behind EMBEDDED and EXPERT 2014-04-07 16:36:09 -07:00
ksymoops
mod Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial into next 2014-06-04 08:50:34 -07:00
package deb-pkg: Fix building for MIPS big-endian or ARM OABI 2014-01-03 17:28:23 +01:00
rt-tester
selinux
tracing
.gitignore
analyze_suspend.py PM / tools: new tool for suspend/resume performance optimization 2014-01-17 01:47:26 +01:00
asn1_compiler.c
bin2c.c
bloat-o-meter
bootgraph.pl scripts/bootgraph.pl: Add graphic header 2014-04-08 17:15:15 +02:00
checkincludes.pl
checkkconfigsymbols.sh
checkpatch.pl scripts/checkpatch.pl: device_initcall is not the only __initcall substitute 2014-06-04 16:54:20 -07:00
checkstack.pl
checksyscalls.sh scripts/checksyscalls.sh: Make renameat optional 2014-05-20 10:59:38 +02:00
checkversion.pl
cleanfile
cleanpatch
coccicheck
config
conmakehash.c
decode_stacktrace.sh decode_stacktrace: make stack dump output useful again 2014-06-10 15:29:43 -07:00
decodecode
depmod.sh
diffconfig
docproc.c
export_report.pl
extract-ikconfig
extract-vmlinux
gcc-goto.sh arm64, jump label: detect %c support for ARM64 2014-01-08 15:21:29 +00:00
gcc-ld Kbuild, lto: Add a gcc-ld script to let run gcc as ld 2014-02-13 20:25:02 -08:00
gcc-version.sh
gcc-x86_32-has-stack-protector.sh
gcc-x86_64-has-stack-protector.sh
gen_initramfs_list.sh scripts/gen_initramfs_list.sh: fix flags for initramfs LZ4 compression 2014-03-04 07:55:48 -08:00
get_maintainer.pl get_maintainer: fix detection of git repository 2014-02-10 16:01:40 -08:00
gfp-translate
headerdep.pl
headers_check.pl headers_check: special case seqbuf_dump() 2014-01-23 16:36:55 -08:00
headers_install.sh
headers.sh
kallsyms.c kallsyms: fix percpu vars on x86-64 with relocation. 2014-03-17 14:55:27 +10:30
Kbuild.include Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-04-07 17:52:31 -07:00
kernel-doc
ld-version.sh Kbuild, lto: add ld-version and ld-ifversion macros 2014-02-13 20:25:00 -08:00
Lindent
link-vmlinux.sh kallsyms: fix percpu vars on x86-64 with relocation. 2014-03-17 14:55:27 +10:30
Makefile kbuild: specify build_docproc as a phony target 2014-03-14 17:44:17 +01:00
Makefile.asm-generic
Makefile.build kbuild: LLVMLinux: Adapt warnings for compilation with clang 2014-04-09 13:44:34 -07:00
Makefile.clean
Makefile.fwinst
Makefile.headersinst
Makefile.help
Makefile.host
Makefile.lib Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2014-04-07 17:52:31 -07:00
Makefile.modbuiltin
Makefile.modinst
Makefile.modpost
Makefile.modsign
makelst
markup_oops.pl
mkcompile_h kbuild: LLVMLinux: Fix LINUX_COMPILER definition script for compilation with clang 2014-04-09 13:44:35 -07:00
mkmakefile
mksysmap
mkuboot.sh
mkversion
module-common.lds
namespace.pl
objdiff scripts: objdiff: detect object code changes between two commits 2014-04-08 16:41:44 +02:00
patch-kernel
pnmtologo.c
profile2linkerlist.pl
recordmcount.c ftrace: Add arm64 support to recordmcount 2014-05-29 09:04:31 +01:00
recordmcount.h
recordmcount.pl ftrace: Add arm64 support to recordmcount 2014-05-29 09:04:31 +01:00
setlocalversion Fix detectition of kernel git repository in setlocalversion script [take #2] 2014-01-03 14:48:42 +01:00
show_delta
sign-file
sortextable.c xtensa: enable sorting extable at build time 2014-04-02 01:35:50 +04:00
sortextable.h
tags.sh scripts/tags.sh: Ignore *.mod.c 2014-02-06 16:52:07 +01:00
unifdef.c
ver_linux
xz_wrap.sh