X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/143464d58d2bd6378e74eec636961ceb0d32fb91..fe8ab488e9161c46dd9885d58fc52996dc0249ff:/tools/lldbmacros/ipcimportancedetail.py diff --git a/tools/lldbmacros/ipcimportancedetail.py b/tools/lldbmacros/ipcimportancedetail.py new file mode 100644 index 000000000..ca81e2eac --- /dev/null +++ b/tools/lldbmacros/ipcimportancedetail.py @@ -0,0 +1,135 @@ +from xnu import * + +""" +Recursive ipc importance chain viewing macro. This file incorporates complex python datastructures +interspersed with cvalue based objects from lldb interface. +""" + +class TaskNode(object): + def __init__(self, task_kobj): + self.task = task_kobj + self.importance_refs = [] + + @staticmethod + def GetHeaderString(): + return GetTaskSummary.header + " " + GetProcSummary.header + " {: <18s}".format("task_imp_base") + + def __str__(self): + out_arr = [] + if unsigned(self.task) != 0: + out_arr.append(GetTaskSummary(self.task) + " " + GetProcSummary(Cast(self.task.bsd_info, 'proc *')) + " {: <#018x}".format(self.task.task_imp_base) ) + else: + out_arr.append("Unknown task.") + #out_arr.append("TASK: {: <#018x} {: + """ + print ' ' + GetIPCImportantTaskSummary.header + ' ' + GetIPCImportanceElemSummary.header + for task in kern.tasks: + if unsigned(task.task_imp_base): + print " " + GetIPCImportantTaskSummary(task.task_imp_base) + ' ' + GetIPCImportanceElemSummary(addressof(task.task_imp_base.iit_elem)) + base_node = IIINode(Cast(task.task_imp_base, 'ipc_importance_inherit *'), None) + GetIIIListFromIIE(task.task_imp_base.iit_elem, base_node) + print base_node.GetChildSummaries(prefix="\t\t") + + print "\n\n ======================== TASK REVERSE CHAIN OF IMPORTANCES =========================" + print TaskNode.GetHeaderString() + for k in AllTasksCollection.keys(): + t = AllTasksCollection[k] + print "\n" + str(t) +