diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2015-02-17 16:46:44 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-17 17:34:53 -0500 |
commit | 850202e17df68c51593bab36a26c8d9279f8c029 (patch) | |
tree | 3eacbf7e18cb4abe38c3ef57b3a5b13317862e00 /scripts/gdb | |
parent | b0fecd8c570310c5041035a94eda7a4610402ace (diff) |
scripts/gdb: add module iteration class
Will soon be used for loading symbols, printing global variables or
listing modules.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Jason Wessel <jason.wessel@windriver.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Ben Widawsky <ben@bwidawsk.net>
Cc: Borislav Petkov <bp@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'scripts/gdb')
-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 | ||