Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.4.
 1#
 2# gdb helper commands and functions for Linux kernel debugging
 3#
 4#  VFS tools
 5#
 6# Copyright (c) 2023 Glenn Washburn
 7# Copyright (c) 2016 Linaro Ltd
 8#
 9# Authors:
10#  Glenn Washburn <development@efficientek.com>
11#  Kieran Bingham <kieran.bingham@linaro.org>
12#
13# This work is licensed under the terms of the GNU GPL version 2.
14#
15
16import gdb
17from linux import utils
18
19
20def dentry_name(d):
21    parent = d['d_parent']
22    if parent == d or parent == 0:
23        return ""
24    p = dentry_name(d['d_parent']) + "/"
25    return p + d['d_iname'].string()
26
27class DentryName(gdb.Function):
28    """Return string of the full path of a dentry.
29
30$lx_dentry_name(PTR): Given PTR to a dentry struct, return a string
31of the full path of the dentry."""
32
33    def __init__(self):
34        super(DentryName, self).__init__("lx_dentry_name")
35
36    def invoke(self, dentry_ptr):
37        return dentry_name(dentry_ptr)
38
39DentryName()
40
41
42dentry_type = utils.CachedType("struct dentry")
43
44class InodeDentry(gdb.Function):
45    """Return dentry pointer for inode.
46
47$lx_i_dentry(PTR): Given PTR to an inode struct, return a pointer to
48the associated dentry struct, if there is one."""
49
50    def __init__(self):
51        super(InodeDentry, self).__init__("lx_i_dentry")
52
53    def invoke(self, inode_ptr):
54        d_u = inode_ptr["i_dentry"]["first"]
55        if d_u == 0:
56            return ""
57        return utils.container_of(d_u, dentry_type.get_type().pointer(), "d_u")
58
59InodeDentry()