diff options
Diffstat (limited to 'scripts/gdb')
-rw-r--r-- | scripts/gdb/linux/modules.py | 28 | ||||
-rw-r--r-- | scripts/gdb/vmlinux-gdb.py | 1 |
2 files changed, 29 insertions, 0 deletions
diff --git a/scripts/gdb/linux/modules.py b/scripts/gdb/linux/modules.py index 8a65c3d5eecb..531f7632d03f 100644 --- a/scripts/gdb/linux/modules.py +++ b/scripts/gdb/linux/modules.py | |||
@@ -37,3 +37,31 @@ class ModuleList: | |||
37 | return utils.container_of(entry, self.module_ptr_type, "list") | 37 | return utils.container_of(entry, self.module_ptr_type, "list") |
38 | else: | 38 | else: |
39 | raise StopIteration | 39 | raise StopIteration |
40 | |||
41 | |||
42 | def find_module_by_name(name): | ||
43 | for module in ModuleList(): | ||
44 | if module['name'].string() == name: | ||
45 | return module | ||
46 | return None | ||
47 | |||
48 | |||
49 | class LxModule(gdb.Function): | ||
50 | """Find module by name and return the module variable. | ||
51 | |||
52 | $lx_module("MODULE"): Given the name MODULE, iterate over all loaded modules | ||
53 | of the target and return that module variable which MODULE matches.""" | ||
54 | |||
55 | def __init__(self): | ||
56 | super(LxModule, self).__init__("lx_module") | ||
57 | |||
58 | def invoke(self, mod_name): | ||
59 | mod_name = mod_name.string() | ||
60 | module = find_module_by_name(mod_name) | ||
61 | if module: | ||
62 | return module.dereference() | ||
63 | else: | ||
64 | raise gdb.GdbError("Unable to find MODULE " + mod_name) | ||
65 | |||
66 | |||
67 | LxModule() | ||
diff --git a/scripts/gdb/vmlinux-gdb.py b/scripts/gdb/vmlinux-gdb.py index 0b0faa4cb5a0..cf2e7161b280 100644 --- a/scripts/gdb/vmlinux-gdb.py +++ b/scripts/gdb/vmlinux-gdb.py | |||
@@ -24,3 +24,4 @@ except: | |||
24 | else: | 24 | else: |
25 | import linux.utils | 25 | import linux.utils |
26 | import linux.symbols | 26 | import linux.symbols |
27 | import linux.modules | ||