diff options
author | Mika Kuoppala <mika.kuoppala@intel.com> | 2014-11-04 14:21:03 +0200 |
---|---|---|
committer | Mika Kuoppala <mika.kuoppala@intel.com> | 2014-11-04 15:15:38 +0200 |
commit | f30a97dfd19cc708928f9dbf2dbf8f9dbeddbdd5 (patch) | |
tree | 3c4e6a2d1a78a9ff2047a787f8ff299d2823031b |
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
-rwxr-xr-x | findoops.sh | 11 | ||||
-rw-r--r-- | oops2line.py | 54 |
2 files changed, 65 insertions, 0 deletions
diff --git a/findoops.sh b/findoops.sh new file mode 100755 index 0000000..2d18c33 --- /dev/null +++ b/findoops.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +# Copyright (c) 2014 Intel Corporation +# Author: Mika Kuoppala <mika.kuoppala@intel.com> + +if [ $# -ne 1 ]] ; then + echo "usage: $0 <function+offset>" + exit +fi + +gdb -x ./oops2line.py -ex "oops2line $1" -ex quit diff --git a/oops2line.py b/oops2line.py new file mode 100644 index 0000000..c6c8f57 --- /dev/null +++ b/oops2line.py @@ -0,0 +1,54 @@ +# Copyright (c) 2014 Intel Corporation +# Author: Mika Kuoppala <mika.kuoppala@intel.com> + +import sys +import gdb + +def print(message): + sys.stderr.write("%s\n" % message); + sys.stderr.flush() + + +def read_section(module_name, sec): + f = open("/sys/module/" + module_name + "/sections/." + sec); + return f.readline().rstrip() + +def add_module(module_root, module_path, module_name): + gdb.execute( "add-symbol-file " + module_root + module_path + module_name + + ".ko " + read_section(module_name, "text") + + " -s .data " + read_section(module_name, "data") + + " -s .bss " + read_section(module_name, "bss") ); + +def find_kernel_version(): + with open ("/proc/version", 'r') as f: + line = f.read() + return line.split(" ")[2] + +def find_kernel(): + return '/boot/vmlinuz-' + str(find_kernel_version()) + +def find_module_root(): + return '/lib/modules/' + str(find_kernel_version() + '/kernel/') + +class PrintOops(gdb.Command): + """print oops2line: + Translate IP in kernel oops to a file/line""" + + def __init__(self): + super (PrintOops, self).__init__("oops2line", gdb.COMMAND_USER) + + def invoke(self, arg, from_tty): + arg_list = gdb.string_to_argv(arg) + if len(arg_list) < 1: + print("usage: oops2line <function+offset>") + return + + print("Searching for %s" % arg_list[0]) + print("Kernel: " + find_kernel()) + print("Modules: " + find_module_root()) + add_module(find_module_root(), "drivers/gpu/drm/i915/", "i915"); + add_module(find_module_root(), "drivers/gpu/drm/", "drm"); + + gdb.execute('l *' + arg_list[0]) + +PrintOops() |