X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/9eed27f6f2f002145667fb4abfc5e476b53630e5..b60166b327a9108b07e3069fa6568a451529ffd9:/lunaix-os/scripts/gdb/lunadbg/utils.py diff --git a/lunaix-os/scripts/gdb/lunadbg/utils.py b/lunaix-os/scripts/gdb/lunadbg/utils.py index b48adee..3e5682d 100644 --- a/lunaix-os/scripts/gdb/lunadbg/utils.py +++ b/lunaix-os/scripts/gdb/lunadbg/utils.py @@ -1,6 +1,42 @@ +import gdb def pid_argument(argument): if not argument: return "__current" else: - return f"sched_ctx._procs[({argument})]" \ No newline at end of file + return f"sched_ctx.procs[({argument})]" + +def llist_foreach(head: gdb.Value, container_type: gdb.Type, field, cb, inclusive=True): + c = head + i = 0 + offset = gdb.Value(0).cast(container_type)[field].address + offset_p = int(offset) + + if not inclusive: + c = c["next"] + if c == head: + return 0 + + while (True): + current = gdb.Value(int(c) - offset_p) + el = current.cast(container_type) + cb(i, el) + c = c["next"] + i+=1 + if c == head: + break + return i + +def get_dnode_name(dnode): + return dnode['name']['value'].string() + +def get_dnode_path(dnode): + components = [] + current = dnode + while (current != 0 and current != current['parent']): + components.append(get_dnode_name(current)) + current = current['parent'] + if len(components) == 0: + components.append('') + components.append('') + return '/'.join(reversed(components)) \ No newline at end of file