1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Module kdb support 4 * 5 * Copyright (C) 2010 Jason Wessel 6 */ 7 8 #include <linux/module.h> 9 #include <linux/kdb.h> 10 #include "internal.h" 11 12 /* 13 * kdb_lsmod - This function implements the 'lsmod' command. Lists 14 * currently loaded kernel modules. 15 * Mostly taken from userland lsmod. 16 */ 17 int kdb_lsmod(int argc, const char **argv) 18 { 19 struct module *mod; 20 21 if (argc != 0) 22 return KDB_ARGCOUNT; 23 24 kdb_printf("Module Size modstruct Used by\n"); 25 list_for_each_entry(mod, &modules, list) { 26 if (mod->state == MODULE_STATE_UNFORMED) 27 continue; 28 29 kdb_printf("%-20s%8u 0x%px ", mod->name, 30 mod->core_layout.size, (void *)mod); 31 #ifdef CONFIG_MODULE_UNLOAD 32 kdb_printf("%4d ", module_refcount(mod)); 33 #endif 34 if (mod->state == MODULE_STATE_GOING) 35 kdb_printf(" (Unloading)"); 36 else if (mod->state == MODULE_STATE_COMING) 37 kdb_printf(" (Loading)"); 38 else 39 kdb_printf(" (Live)"); 40 kdb_printf(" 0x%px", mod->core_layout.base); 41 42 #ifdef CONFIG_MODULE_UNLOAD 43 { 44 struct module_use *use; 45 46 kdb_printf(" [ "); 47 list_for_each_entry(use, &mod->source_list, 48 source_list) 49 kdb_printf("%s ", use->target->name); 50 kdb_printf("]\n"); 51 } 52 #endif 53 } 54 55 return 0; 56 } 57