path: root/scripts/gdb/linux/tasks.py
diff options
authorJan Kiszka <jan.kiszka@siemens.com>2015-02-17 13:47:10 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-17 14:34:54 -0800
commit4752871081ba4fbb3c539488a95e77d8011bfe49 (patch)
treede170ba5e2b63cecfd29a1b53353a096bb6691c2 /scripts/gdb/linux/tasks.py
parentscripts/gdb: add task iteration class (diff)
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: 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>
Diffstat (limited to 'scripts/gdb/linux/tasks.py')
1 files changed, 27 insertions, 0 deletions
diff --git a/scripts/gdb/linux/tasks.py b/scripts/gdb/linux/tasks.py
index cd259846ab4b..13bb97cd3312 100644
--- a/scripts/gdb/linux/tasks.py
+++ b/scripts/gdb/linux/tasks.py
@@ -44,3 +44,30 @@ class TaskList:
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))