Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47528710 authored by Jan Kiszka's avatar Jan Kiszka Committed by Linus Torvalds
Browse files

scripts/gdb: add helper and convenience function to look up tasks



Add the helper task_by_pid that can look up a task by its PID.  Also
export it as a convenience function.

Signed-off-by: default avatarJan 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: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 7704d58a
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -44,3 +44,30 @@ class TaskList:
                utils.container_of(t['thread_group']['next'],
                                   self.task_ptr_type, "thread_group")
        return t


def get_task_by_pid(pid):
    for task in TaskList():
        if int(task['pid']) == pid:
            return task
    return None


class LxTaskByPidFunc(gdb.Function):
    """Find Linux task by PID and return the task_struct variable.

$lx_task_by_pid(PID): Given PID, iterate over all tasks of the target and
return that task_struct variable which PID matches."""

    def __init__(self):
        super(LxTaskByPidFunc, self).__init__("lx_task_by_pid")

    def invoke(self, pid):
        task = get_task_by_pid(pid)
        if task:
            return task.dereference()
        else:
            raise gdb.GdbError("No task of PID " + str(pid))


LxTaskByPidFunc()
+1 −0
Original line number Diff line number Diff line
@@ -26,3 +26,4 @@ else:
    import linux.symbols
    import linux.modules
    import linux.dmesg
    import linux.tasks