Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/pmap Clean up code in places, add some more (possibl...



details:   https://anonhg.NetBSD.org/src/rev/2c7317216baa
branches:  trunk
changeset: 543544:2c7317216baa
user:      atatat <atatat%NetBSD.org@localhost>
date:      Thu Feb 27 04:10:36 2003 +0000

description:
Clean up code in places, add some more (possible) submap names, make
better use of the submap names when dumping the kernel map, clean up
the "interface" between the main and LOCKDEBUG dependent pmap modules,
and make the heap identification work better.

diffstat:

 usr.bin/pmap/main.c |  78 ++++++++++++++++++++++++++++++++++++----------------
 usr.bin/pmap/main.h |   7 ++--
 usr.bin/pmap/pmap.c |  35 ++++++++++-------------
 3 files changed, 72 insertions(+), 48 deletions(-)

diffs (223 lines):

diff -r f66dadd9f1d1 -r 2c7317216baa usr.bin/pmap/main.c
--- a/usr.bin/pmap/main.c       Thu Feb 27 04:06:07 2003 +0000
+++ b/usr.bin/pmap/main.c       Thu Feb 27 04:10:36 2003 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: main.c,v 1.3 2003/01/16 15:34:18 atatat Exp $ */
+/*     $NetBSD: main.c,v 1.4 2003/02/27 04:10:36 atatat Exp $ */
 
 /*
  * Copyright (c) 2002, 2003 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: main.c,v 1.3 2003/01/16 15:34:18 atatat Exp $");
+__RCSID("$NetBSD: main.c,v 1.4 2003/02/27 04:10:36 atatat Exp $");
 #endif
 
 #include <sys/param.h>
@@ -73,10 +73,10 @@
 void *uvm_vnodeops, *uvm_deviceops, *aobj_pager, *ubc_pager;
 void *kernel_floor;
 struct vm_map *kmem_map, *mb_map, *phys_map, *exec_map, *pager_map;
+struct vm_map *st_map, *pt_map, *lkm_map;
 u_long nchash_addr, nchashtbl_addr, kernel_map_addr;
 int debug, verbose, recurse;
 int print_all, print_map, print_maps, print_solaris, print_ddb;
-int rwx = VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE, heapfound;
 rlim_t maxssiz;
 
 struct nlist ksyms[] = {
@@ -103,15 +103,21 @@
 
 struct nlist kmaps[] = {
        { "_kmem_map" },
-#define NL_KMEM_MAP            0
+#define NL_kmem_map            0
        { "_mb_map" },
-#define NL_MB_MAP              1
+#define NL_mb_map              1
        { "_phys_map" },
-#define NL_PHYS_MAP            2
+#define NL_phys_map            2
        { "_exec_map" },
-#define NL_EXEC_MAP            3
+#define NL_exec_map            3
        { "_pager_map" },
-#define NL_PAGER_MAP           4
+#define NL_pager_map           4
+       { "_st_map" },
+#define NL_st_map              5
+       { "_pt_map" },
+#define NL_pt_map              6
+       { "_lkm_map" },
+#define NL_lkm_map             7
        { NULL }
 };
 
@@ -373,24 +379,48 @@
        /*
         * Some of these may be missing from some platforms, for
         * example sparc, sh3, and most powerpc platforms don't
-        * have a "phys_map".
+        * have a "phys_map", etc.
         */
        (void)kvm_nlist(kd, &kmaps[0]);
-       if (kmaps[NL_KMEM_MAP].n_value != 0)
-               _KDEREF(kd, kmaps[NL_KMEM_MAP].n_value, &kmem_map,
-                       sizeof(kmem_map));
-       if (kmaps[NL_MB_MAP].n_value != 0)
-               _KDEREF(kd, kmaps[NL_MB_MAP].n_value, &mb_map,
-                       sizeof(mb_map));
-       if (kmaps[NL_PHYS_MAP].n_value != 0)
-               _KDEREF(kd, kmaps[NL_PHYS_MAP].n_value, &phys_map,
-                       sizeof(phys_map));
-       if (kmaps[NL_EXEC_MAP].n_value != 0)
-               _KDEREF(kd, kmaps[NL_EXEC_MAP].n_value, &exec_map,
-                       sizeof(exec_map));
-       if (kmaps[NL_PAGER_MAP].n_value != 0)
-               _KDEREF(kd, kmaps[NL_PAGER_MAP].n_value, &pager_map,
-                       sizeof(pager_map));
+
+#define get_map_address(m) \
+       if (kmaps[CONCAT(NL_,m)].n_value != 0) \
+               _KDEREF(kd, kmaps[CONCAT(NL_,m)].n_value, &m, sizeof(m))
+
+       get_map_address(kmem_map);
+       get_map_address(mb_map);
+       get_map_address(phys_map);
+       get_map_address(exec_map);
+       get_map_address(pager_map);
+       get_map_address(st_map);
+       get_map_address(pt_map);
+       get_map_address(lkm_map);
+}
+
+const char *
+mapname(void *addr)
+{
+
+       if (addr == (void*)kernel_map_addr)
+               return ("kernel_map");
+       else if (addr == kmem_map)
+               return ("kmem_map");
+       else if (addr == mb_map)
+               return ("mb_map");
+       else if (addr == phys_map)
+               return ("phys_map");
+       else if (addr == exec_map)
+               return ("exec_map");
+       else if (addr == pager_map)
+               return ("pager_map");
+       else if (addr == st_map)
+               return ("st_map");
+       else if (addr == pt_map)
+               return ("pt_map");
+       else if (addr == lkm_map)
+               return ("lkm_map");
+       else
+               return (NULL);
 }
 
 void
diff -r f66dadd9f1d1 -r 2c7317216baa usr.bin/pmap/main.h
--- a/usr.bin/pmap/main.h       Thu Feb 27 04:06:07 2003 +0000
+++ b/usr.bin/pmap/main.h       Thu Feb 27 04:10:36 2003 +0000
@@ -1,4 +1,4 @@
-/*      $NetBSD: main.h,v 1.1 2003/01/08 20:25:12 atatat Exp $ */
+/*      $NetBSD: main.h,v 1.2 2003/02/27 04:10:36 atatat Exp $ */
 
 /*
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -36,11 +36,9 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-extern int rwx, heapfound;
 extern int debug, verbose, recurse;
 extern int print_all, print_map, print_maps, print_solaris, print_ddb;
-extern struct vm_map *kmem_map, *mb_map, *phys_map, *exec_map, *pager_map;
-extern u_long nchash_addr, nchashtbl_addr, kernel_map_addr;
+extern u_long kernel_map_addr;
 extern void *uvm_vnodeops, *uvm_deviceops, *aobj_pager, *ubc_pager;
 extern rlim_t maxssiz;
 
@@ -66,3 +64,4 @@
 
 void (*process_map)(kvm_t *, pid_t, struct kinfo_proc2 *);
 void load_name_cache(kvm_t *);
+const char *mapname(void *);
diff -r f66dadd9f1d1 -r 2c7317216baa usr.bin/pmap/pmap.c
--- a/usr.bin/pmap/pmap.c       Thu Feb 27 04:06:07 2003 +0000
+++ b/usr.bin/pmap/pmap.c       Thu Feb 27 04:10:36 2003 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pmap.c,v 1.12 2003/02/23 01:08:29 atatat Exp $ */
+/*     $NetBSD: pmap.c,v 1.13 2003/02/27 04:10:36 atatat Exp $ */
 
 /*
  * Copyright (c) 2002, 2003 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: pmap.c,v 1.12 2003/02/23 01:08:29 atatat Exp $");
+__RCSID("$NetBSD: pmap.c,v 1.13 2003/02/27 04:10:36 atatat Exp $");
 #endif
 
 #include <string.h>
@@ -62,6 +62,9 @@
 
 /* when recursing, output is indented */
 #define indent(n) ((n) * (recurse > 1 ? recurse - 1 : 0))
+#define rwx (VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE)
+
+int heapfound;
 
 void
 PMAPFUNC(process_map,VERSION)(kvm_t *kd, pid_t pid, struct kinfo_proc2 *proc)
@@ -169,22 +172,7 @@
                printf(" timestamp = %u }\n", D(vm_map, vm_map)->timestamp);
        }
        if (print_ddb) {
-               char *name;
-
-               if (A(vm_map) == kernel_map_addr)
-                       name = "kernel_map";
-               else if (P(vm_map) == kmem_map)
-                       name = "kmem_map";
-               else if (P(vm_map) == mb_map)
-                       name = "mb_map";
-               else if (P(vm_map) == phys_map)
-                       name = "phys_map";
-               else if (P(vm_map) == exec_map)
-                       name = "exec_map";
-               else if (P(vm_map) == pager_map)
-                       name = "pager_map";
-               else
-                       name = NULL;
+               const char *name = mapname(P(vm_map));
 
                printf("%*s%s %p: [0x%lx->0x%lx]\n", indent(2), "",
                       recurse < 2 ? "MAP" : "SUBMAP", P(vm_map),
@@ -613,12 +601,19 @@
                 (caddr_t)vme->end)
                name = "  [ stack ]";
 
-       else if ((vme->protection & rwx) == rwx && !heapfound) {
-               /* XXX this could probably be done better */
+       else if (!heapfound &&
+                (vme->protection & rwx) == rwx &&
+                vme->start >= (u_long)D(vmspace, vmspace)->vm_daddr) {
                heapfound = 1;
                name = "  [ heap ]";
        }
 
+       else if (UVM_ET_ISSUBMAP(vme)) {
+               const char *sub = mapname(vme->object.sub_map);
+               snprintf(buf, sizeof(buf), "  [ %s ]", sub ? sub : "(submap)");
+               name = buf;
+       }
+
        else
                name = "  [ anon ]";
 



Home | Main Index | Thread Index | Old Index