mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-14 21:01:29 +00:00
scripts/gdb: add lx-lsmod command
This adds a lsmod-like command to list all currently loaded modules of the target. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Jason Wessel <jason.wessel@windriver.com> Cc: Andi Kleen <andi@firstfloor.org> Cc: Ben Widawsky <ben@bwidawsk.net> Cc: Borislav Petkov <bp@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
3d4cd9c941
commit
5403727f98
@ -13,7 +13,7 @@
|
||||
|
||||
import gdb
|
||||
|
||||
from linux import utils
|
||||
from linux import cpus, utils
|
||||
|
||||
|
||||
module_type = utils.CachedType("struct module")
|
||||
@ -65,3 +65,47 @@ of the target and return that module variable which MODULE matches."""
|
||||
|
||||
|
||||
LxModule()
|
||||
|
||||
|
||||
class LxLsmod(gdb.Command):
|
||||
"""List currently loaded modules."""
|
||||
|
||||
_module_use_type = utils.CachedType("struct module_use")
|
||||
|
||||
def __init__(self):
|
||||
super(LxLsmod, self).__init__("lx-lsmod", gdb.COMMAND_DATA)
|
||||
|
||||
def invoke(self, arg, from_tty):
|
||||
gdb.write(
|
||||
"Address{0} Module Size Used by\n".format(
|
||||
" " if utils.get_long_type().sizeof == 8 else ""))
|
||||
|
||||
for module in ModuleList():
|
||||
ref = 0
|
||||
module_refptr = module['refptr']
|
||||
for cpu in cpus.CpuList("cpu_possible_mask"):
|
||||
refptr = cpus.per_cpu(module_refptr, cpu)
|
||||
ref += refptr['incs']
|
||||
ref -= refptr['decs']
|
||||
|
||||
gdb.write("{address} {name:<19} {size:>8} {ref}".format(
|
||||
address=str(module['module_core']).split()[0],
|
||||
name=module['name'].string(),
|
||||
size=module['core_size'],
|
||||
ref=ref))
|
||||
|
||||
source_list = module['source_list']
|
||||
t = self._module_use_type.get_type().pointer()
|
||||
entry = source_list['next']
|
||||
first = True
|
||||
while entry != source_list.address:
|
||||
use = utils.container_of(entry, t, "source_list")
|
||||
gdb.write("{separator}{name}".format(
|
||||
separator=" " if first else ",",
|
||||
name=use['source']['name'].string()))
|
||||
first = False
|
||||
entry = entry['next']
|
||||
gdb.write("\n")
|
||||
|
||||
|
||||
LxLsmod()
|
||||
|
Loading…
Reference in New Issue
Block a user