Messages in this thread Patch in this message |  | | From | Jan Kiszka <> | Subject | [PATCH v5 11/20] scripts/gdb: Add task iteration helper | Date | Tue, 29 Jan 2013 13:37:54 +0100 |
| |
The internal helper for_each_task iterates over all tasks of the target, calling the provided function on each.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> --- scripts/gdb/task.py | 35 +++++++++++++++++++++++++++++++++++ 1 files changed, 35 insertions(+), 0 deletions(-) create mode 100644 scripts/gdb/task.py
diff --git a/scripts/gdb/task.py b/scripts/gdb/task.py new file mode 100644 index 0000000..6b73dbf --- /dev/null +++ b/scripts/gdb/task.py @@ -0,0 +1,35 @@ +# +# gdb helper commands and functions for Linux kernel debugging +# +# task & thread tools +# +# Copyright (c) Siemens AG, 2011-2013 +# +# Authors: +# Jan Kiszka <jan.kiszka@siemens.com> +# +# This work is licensed under the terms of the GNU GPL version 2. +# + +import gdb + +from utils import * + +task_type = CachedType("struct task_struct") + +def for_each_task(func, arg = None): + global task_type + task_ptr_type = task_type.get_type().pointer() + init_task = gdb.parse_and_eval("init_task") + g = init_task.address + while True: + g = container_of(g['tasks']['next'], task_ptr_type, "tasks") + if g == init_task.address: + break; + t = g + while True: + func(t, arg) + t = container_of(t['thread_group']['next'], + task_ptr_type, "thread_group") + if t == g: + break -- 1.7.3.4
|  |