mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-23 07:01:23 +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
1 changed files with 45 additions and 1 deletions
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
import gdb
|
import gdb
|
||||||
|
|
||||||
from linux import utils
|
from linux import cpus, utils
|
||||||
|
|
||||||
|
|
||||||
module_type = utils.CachedType("struct module")
|
module_type = utils.CachedType("struct module")
|
||||||
|
@ -65,3 +65,47 @@ of the target and return that module variable which MODULE matches."""
|
||||||
|
|
||||||
|
|
||||||
LxModule()
|
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…
Add table
Add a link
Reference in a new issue