diff options
Diffstat (limited to 'scripts/gdb/linux/modules.py')
-rw-r--r-- | scripts/gdb/linux/modules.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/scripts/gdb/linux/modules.py b/scripts/gdb/linux/modules.py new file mode 100644 index 000000000000..8a65c3d5eecb --- /dev/null +++ b/scripts/gdb/linux/modules.py | |||
@@ -0,0 +1,39 @@ | |||
1 | # | ||
2 | # gdb helper commands and functions for Linux kernel debugging | ||
3 | # | ||
4 | # module tools | ||
5 | # | ||
6 | # Copyright (c) Siemens AG, 2013 | ||
7 | # | ||
8 | # Authors: | ||
9 | # Jan Kiszka <jan.kiszka@siemens.com> | ||
10 | # | ||
11 | # This work is licensed under the terms of the GNU GPL version 2. | ||
12 | # | ||
13 | |||
14 | import gdb | ||
15 | |||
16 | from linux import utils | ||
17 | |||
18 | |||
19 | module_type = utils.CachedType("struct module") | ||
20 | |||
21 | |||
22 | class ModuleList: | ||
23 | def __init__(self): | ||
24 | global module_type | ||
25 | self.module_ptr_type = module_type.get_type().pointer() | ||
26 | modules = gdb.parse_and_eval("modules") | ||
27 | self.curr_entry = modules['next'] | ||
28 | self.end_of_list = modules.address | ||
29 | |||
30 | def __iter__(self): | ||
31 | return self | ||
32 | |||
33 | def next(self): | ||
34 | entry = self.curr_entry | ||
35 | if entry != self.end_of_list: | ||
36 | self.curr_entry = entry['next'] | ||
37 | return utils.container_of(entry, self.module_ptr_type, "list") | ||
38 | else: | ||
39 | raise StopIteration | ||