Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Kuan-Ying Lee and committed by
Andrew Morton
35249f68 4b183f61

+27
+27
scripts/gdb/linux/stackdepot.py
··· 13 13 stack_record_type = utils.CachedType('struct stack_record') 14 14 DEPOT_STACK_ALIGN = 4 15 15 16 + def help(): 17 + t = """Usage: lx-stack_depot_lookup [Hex handle value] 18 + Example: 19 + lx-stack_depot_lookup 0x00c80300\n""" 20 + gdb.write("Unrecognized command\n") 21 + raise gdb.GdbError(t) 22 + 16 23 def stack_depot_fetch(handle): 17 24 global DEPOT_STACK_ALIGN 18 25 global stack_record_type ··· 64 57 gdb.execute("x /i 0x%x" % (int(entries[i]))) 65 58 except Exception as e: 66 59 gdb.write("%s\n" % e) 60 + 61 + class StackDepotLookup(gdb.Command): 62 + """Search backtrace by handle""" 63 + 64 + def __init__(self): 65 + if constants.LX_CONFIG_STACKDEPOT: 66 + super(StackDepotLookup, self).__init__("lx-stack_depot_lookup", gdb.COMMAND_SUPPORT) 67 + 68 + def invoke(self, args, from_tty): 69 + if not constants.LX_CONFIG_STACKDEPOT: 70 + raise gdb.GdbError('CONFIG_STACKDEPOT is not set') 71 + 72 + argv = gdb.string_to_argv(args) 73 + if len(argv) == 1: 74 + handle = int(argv[0], 16) 75 + stack_depot_print(gdb.Value(handle).cast(utils.get_uint_type())) 76 + else: 77 + help() 78 + 79 + StackDepotLookup()