mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
scripts/gdb: add 'lx-stack_depot_lookup' command.
This command allows users to quickly retrieve a stacktrace using a handle obtained from a memory coredump. Example output: (gdb) lx-stack_depot_lookup 0x00c80300 0xffff8000807965b4 <kmem_cache_alloc_noprof+660>: mov x20, x0 0xffff800081a077d8 <kmem_cache_oob_alloc+76>: mov x1, x0 0xffff800081a079a0 <test_version_show+100>: cbnz w0, 0xffff800081a07968 <test_version_show+44> 0xffff800082f4a3fc <kobj_attr_show+60>: ldr x19, [sp, #16] 0xffff800080a0fb34 <sysfs_kf_seq_show+460>: ldp x3, x4, [sp, #96] 0xffff800080a0a550 <kernfs_seq_show+296>: ldp x19, x20, [sp, #16] 0xffff8000808e7b40 <seq_read_iter+836>: mov w5, w0 0xffff800080a0b8ac <kernfs_fop_read_iter+804>: mov x23, x0 0xffff800080914a48 <copy_splice_read+972>: mov x6, x0 0xffff8000809151c4 <do_splice_read+348>: ldr x21, [sp, #32] Link: https://lkml.kernel.org/r/20240723064902.124154-5-kuan-ying.lee@canonical.com Signed-off-by: Kuan-Ying Lee <kuan-ying.lee@canonical.com> Cc: Jan Kiszka <jan.kiszka@siemens.com> Cc: Kieran Bingham <kbingham@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
4b183f6139
commit
35249f68b5
@ -13,6 +13,13 @@ if constants.LX_CONFIG_STACKDEPOT:
|
|||||||
stack_record_type = utils.CachedType('struct stack_record')
|
stack_record_type = utils.CachedType('struct stack_record')
|
||||||
DEPOT_STACK_ALIGN = 4
|
DEPOT_STACK_ALIGN = 4
|
||||||
|
|
||||||
|
def help():
|
||||||
|
t = """Usage: lx-stack_depot_lookup [Hex handle value]
|
||||||
|
Example:
|
||||||
|
lx-stack_depot_lookup 0x00c80300\n"""
|
||||||
|
gdb.write("Unrecognized command\n")
|
||||||
|
raise gdb.GdbError(t)
|
||||||
|
|
||||||
def stack_depot_fetch(handle):
|
def stack_depot_fetch(handle):
|
||||||
global DEPOT_STACK_ALIGN
|
global DEPOT_STACK_ALIGN
|
||||||
global stack_record_type
|
global stack_record_type
|
||||||
@ -57,3 +64,23 @@ def stack_depot_print(handle):
|
|||||||
gdb.execute("x /i 0x%x" % (int(entries[i])))
|
gdb.execute("x /i 0x%x" % (int(entries[i])))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
gdb.write("%s\n" % e)
|
gdb.write("%s\n" % e)
|
||||||
|
|
||||||
|
class StackDepotLookup(gdb.Command):
|
||||||
|
"""Search backtrace by handle"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
if constants.LX_CONFIG_STACKDEPOT:
|
||||||
|
super(StackDepotLookup, self).__init__("lx-stack_depot_lookup", gdb.COMMAND_SUPPORT)
|
||||||
|
|
||||||
|
def invoke(self, args, from_tty):
|
||||||
|
if not constants.LX_CONFIG_STACKDEPOT:
|
||||||
|
raise gdb.GdbError('CONFIG_STACKDEPOT is not set')
|
||||||
|
|
||||||
|
argv = gdb.string_to_argv(args)
|
||||||
|
if len(argv) == 1:
|
||||||
|
handle = int(argv[0], 16)
|
||||||
|
stack_depot_print(gdb.Value(handle).cast(utils.get_uint_type()))
|
||||||
|
else:
|
||||||
|
help()
|
||||||
|
|
||||||
|
StackDepotLookup()
|
||||||
|
Loading…
Reference in New Issue
Block a user