Commit | Line | Data |
---|---|---|
f64205a4 AT |
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 | ||
ac3b4328 SL |
29 | kdb_printf("%-20s%8u", mod->name, mod->mem[MOD_TEXT].size); |
30 | kdb_printf("/%8u", mod->mem[MOD_RODATA].size); | |
31 | kdb_printf("/%8u", mod->mem[MOD_RO_AFTER_INIT].size); | |
32 | kdb_printf("/%8u", mod->mem[MOD_DATA].size); | |
33 | ||
01dc0386 | 34 | kdb_printf(" 0x%px ", (void *)mod); |
f64205a4 AT |
35 | #ifdef CONFIG_MODULE_UNLOAD |
36 | kdb_printf("%4d ", module_refcount(mod)); | |
37 | #endif | |
38 | if (mod->state == MODULE_STATE_GOING) | |
39 | kdb_printf(" (Unloading)"); | |
40 | else if (mod->state == MODULE_STATE_COMING) | |
41 | kdb_printf(" (Loading)"); | |
42 | else | |
43 | kdb_printf(" (Live)"); | |
ac3b4328 SL |
44 | kdb_printf(" 0x%px", mod->mem[MOD_TEXT].base); |
45 | kdb_printf("/0x%px", mod->mem[MOD_RODATA].base); | |
46 | kdb_printf("/0x%px", mod->mem[MOD_RO_AFTER_INIT].base); | |
47 | kdb_printf("/0x%px", mod->mem[MOD_DATA].base); | |
f64205a4 AT |
48 | |
49 | #ifdef CONFIG_MODULE_UNLOAD | |
50 | { | |
51 | struct module_use *use; | |
52 | ||
53 | kdb_printf(" [ "); | |
54 | list_for_each_entry(use, &mod->source_list, | |
55 | source_list) | |
56 | kdb_printf("%s ", use->target->name); | |
57 | kdb_printf("]\n"); | |
58 | } | |
59 | #endif | |
60 | } | |
61 | ||
62 | return 0; | |
63 | } |