Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.4.
 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 */
17int 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", 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
34		kdb_printf("  0x%px ", (void *)mod);
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)");
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);
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}