Similarly to the patch that adds new pseudo file /sys/osv/memory/linear_maps,
this one adds new loader.py command that can be used with gdb to display
same information:

(gdb) osv linear_mmap
           vaddr            paddr     size perm memattr name
         8000000          8000000    10000 rwxp     dev gic_dist
         8010000          8010000    10000 rwxp     dev gic_cpu
         9000000          9000000     1000 rwxp     dev pl011
         9010000          9010000     1000 rwxp     dev pl031
        10000000         10000000 2eff0000 rwxp     dev pci_mem
        3eff0000         3eff0000    10000 rwxp     dev pci_io
        40000000         40000000   6d3000 rwxp  normal kernel
      4010000000       4010000000 10000000 rwxp     dev pci_cfg
ffff80000a000000          a000000      200 rwxp  normal virtio_mmio_cfg
ffff80000a000200          a000200      200 rwxp  normal virtio_mmio_cfg
ffff80000a000400          a000400      200 rwxp  normal virtio_mmio_cfg
ffff80000a000600          a000600      200 rwxp  normal virtio_mmio_cfg
ffff80000a000800          a000800      200 rwxp  normal virtio_mmio_cfg
ffff80000a000a00          a000a00      200 rwxp  normal virtio_mmio_cfg
ffff80000a000c00          a000c00      200 rwxp  normal virtio_mmio_cfg
ffff80000a000e00          a000e00      200 rwxp  normal virtio_mmio_cfg
ffff8000406d3000         406d3000 7f92d000 rwxp  normal main
ffff9000406d3000         406d3000 7f92d000 rwxp  normal page
ffffa000406d3000         406d3000 7f92d000 rwxp  normal mempool

Signed-off-by: Waldemar Kozaczuk <jwkozac...@gmail.com>
---
 scripts/loader.py | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/scripts/loader.py b/scripts/loader.py
index e39299bf..cfa87e0c 100644
--- a/scripts/loader.py
+++ b/scripts/loader.py
@@ -1643,11 +1643,40 @@ class osv_percpu(gdb.Command):
                     return
             gdb.write('%s\n'%target)
 
+class osv_linear_mmap(gdb.Command):
+    def __init__(self):
+        gdb.Command.__init__(self, 'osv linear_mmap',
+                             gdb.COMMAND_USER, gdb.COMPLETE_NONE)
+    def invoke(self, arg, for_tty):
+        l = str(gdb.lookup_global_symbol('mmu::linear_vma_set').value())
+        linear_vmas = re.findall('\[([0-9]+)\] = (0x[0-9a-zA-Z]+)', l)
+
+        gdb.write("%16s %16s %8s %4s %7s %s\n" % ("vaddr", "paddr", "size", 
"perm", "memattr", "name"))
+
+        char_ptr = gdb.lookup_type('char').pointer()
+        for desc in linear_vmas:
+            addr = desc[1]
+            vma = gdb.parse_and_eval('(struct mmu::linear_vma *)' + addr)
+
+            vaddr = vma['_virt_addr']
+            paddr = vma['_phys_addr']
+            size = vma['_size']
+            if vma['_mem_attr'] == 0:
+                memattr = 'normal'
+            else:
+                memattr = 'dev'
+            name = vma['_name'].cast(char_ptr).string()
+
+            # dispatch time ns  ticks callout function
+            gdb.write("%16x %16x %8x rwxp %7s %s\n" %
+                      (vaddr, paddr, size, memattr, name))
+
 osv()
 osv_heap()
 osv_memory()
 osv_waiters()
 osv_mmap()
+osv_linear_mmap()
 osv_vma_find()
 osv_zfs()
 osv_syms()
-- 
2.31.1

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/20220317012408.872142-1-jwkozaczuk%40gmail.com.

Reply via email to