8a65c3d5eecbf072684c4ded783c49fd4c9c5f5b
[firefly-linux-kernel-4.4.55.git] / scripts / gdb / linux / modules.py
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