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 <
jwkoz...@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