|
|
@@ -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()
|