X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/64e5fa9a495e388c922157b9a616204c299f5e05..7b8a1bcad75628f9add4590db2bb9b8e418ee8eb:/lunaix-os/scripts/gdb/lunadbg/region_dump.py?ds=sidebyside diff --git a/lunaix-os/scripts/gdb/lunadbg/region_dump.py b/lunaix-os/scripts/gdb/lunadbg/region_dump.py index 92ee65d..223766b 100644 --- a/lunaix-os/scripts/gdb/lunadbg/region_dump.py +++ b/lunaix-os/scripts/gdb/lunadbg/region_dump.py @@ -1,11 +1,35 @@ import gdb -from .utils import pid_argument +from .utils import pid_argument, llist_foreach class MemoryRegionDump(gdb.Command): """Dump virtual memory regions associated with a process""" def __init__(self) -> None: super().__init__("vmrs", gdb.COMMAND_USER) + def region_callback(self, idx, region): + print(f"VMR #{idx}:") + print( " 0x%x...0x%x [0x%x]"%( + region['start'], region['end'], + region['end'] - region['start'])) + + attr = region["attr"] + attr_str = [] + if (attr & (1 << 2)): + attr_str.append("R") + if (attr & (1 << 3)): + attr_str.append("W") + if (attr & (1 << 4)): + attr_str.append("X") + print( " attr: 0x%x (%s)"%(attr, "".join(attr_str))) + + file = region["mfile"] + if file == 0: + print( " anonymous region") + else: + print( " file mapped:") + print( " dnode: %s @0x%x"%(file["dnode"]["name"]["value"].string(), file)) + print( " frange: 0x%x+0x%x"%(region["foff"], region["flen"])) + def invoke(self, argument: str, from_tty: bool) -> None: argument = pid_argument(argument) @@ -19,31 +43,4 @@ class MemoryRegionDump(gdb.Command): print("VMRS (pid: %d)"%(pid)) - i = 0 - while(val["next"] != head): - region = val["next"].cast(region_t) - print(f"VMR #{i}:") - print( " 0x%x...0x%x [0x%x]"%( - region['start'], region['end'], - region['end'] - region['start'])) - - attr = region["attr"] - attr_str = [] - if (attr & (1 << 2)): - attr_str.append("R") - if (attr & (1 << 3)): - attr_str.append("W") - if (attr & (1 << 4)): - attr_str.append("X") - print( " attr: 0x%x (%s)"%(attr, "".join(attr_str))) - - file = region["mfile"] - if file == 0: - print( " anonymous region") - else: - print( " file mapped:") - print( " dnode: %s @0x%x"%(file["dnode"]["name"]["value"].string(), file)) - print( " frange: 0x%x+0x%x"%(region["foff"], region["flen"])) - - val = val["next"] - i+=1 + llist_foreach(val, region_t, lambda a,b: self.region_callback(a,b))