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 <[email protected]> 10# 11# This work is licensed under the terms of the GNU GPL version 2. 12# 13 14import gdb 15 16from linux import utils 17 18 19module_type = utils.CachedType("struct module") 20 21 22class 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 40