Commit 82b41e3d authored by Jan Kiszka's avatar Jan Kiszka Committed by Linus Torvalds
Browse files

scripts/gdb: add automatic symbol reloading on module insertion

This installs a silent breakpoint on the do_init_module function.  The
breakpoint handler will try to load symbols from the module files found
during lx-symbols execution.  This way, breakpoints can be set to module
initialization functions, and there is no need to explicitly call
lx-symbols after (re-)loading a module.
Signed-off-by: Jan Kiszka's avatarJan Kiszka <>
Cc: Thomas Gleixner <>
Cc: Jason Wessel <>
Cc: Andi Kleen <>
Cc: Ben Widawsky <>
Cc: Borislav Petkov <>
Signed-off-by: default avatarAndrew Morton <>
Signed-off-by: default avatarLinus Torvalds <>
parent be02a186
......@@ -19,6 +19,30 @@ import string
from linux import modules, utils
if hasattr(gdb, 'Breakpoint'):
class LoadModuleBreakpoint(gdb.Breakpoint):
def __init__(self, spec, gdb_command):
super(LoadModuleBreakpoint, self).__init__(spec, internal=True)
self.silent = True
self.gdb_command = gdb_command
def stop(self):
module = gdb.parse_and_eval("mod")
module_name = module['name'].string()
cmd = self.gdb_command
# enforce update if object file is not found
cmd.module_files_updated = False
if module_name in cmd.loaded_modules:
gdb.write("refreshing all symbols to reload module "
return False
class LxSymbols(gdb.Command):
"""(Re-)load symbols of Linux kernel and currently loaded modules.
......@@ -30,6 +54,8 @@ lx-symbols command."""
module_paths = []
module_files = []
module_files_updated = False
loaded_modules = []
breakpoint = None
def __init__(self):
super(LxSymbols, self).__init__("lx-symbols", gdb.COMMAND_FILES,
......@@ -87,6 +113,8 @@ lx-symbols command."""
gdb.execute(cmdline, to_string=True)
if not module_name in self.loaded_modules:
gdb.write("no module object found for '{0}'\n".format(module_name))
......@@ -104,6 +132,7 @@ lx-symbols command."""
gdb.execute("symbol-file", to_string=True)
gdb.execute("symbol-file vmlinux")
self.loaded_modules = []
module_list = modules.ModuleList()
if not module_list:
gdb.write("no modules found\n")
......@@ -123,5 +152,15 @@ lx-symbols command."""
if hasattr(gdb, 'Breakpoint'):
if not self.breakpoint is None:
self.breakpoint = None
self.breakpoint = LoadModuleBreakpoint(
"kernel/module.c:do_init_module", self)
gdb.write("Note: symbol update on module loading not supported "
"with this gdb version\n")
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment