Author: attilio
Date: Mon Nov 12 00:30:40 2012
New Revision: 242903
URL: http://svnweb.freebsd.org/changeset/base/242903

Log:
  Fix DDB command "show map XXX":
  - Check that an argument is always available, otherwise current map
    printing before to recurse is garbage.
  - Spit out a message if an argument is not provided.
  - Remove unread nlines variable.
  - Use an explicit recursive function, disassociated from the
    DB_SHOW_COMMAND() body, in order to make clear prototype and recursion
    of the above mentioned function.  The code results now much less
    obscure.
  
  Submitted by: gianni

Modified:
  head/sys/vm/vm_map.c

Modified: head/sys/vm/vm_map.c
==============================================================================
--- head/sys/vm/vm_map.c        Sun Nov 11 23:29:45 2012        (r242902)
+++ head/sys/vm/vm_map.c        Mon Nov 12 00:30:40 2012        (r242903)
@@ -3975,32 +3975,20 @@ vm_map_lookup_done(vm_map_t map, vm_map_
 
 #include <ddb/ddb.h>
 
-/*
- *     vm_map_print:   [ debug ]
- */
-DB_SHOW_COMMAND(map, vm_map_print)
+static void
+vm_map_print(vm_map_t map)
 {
-       static int nlines;
-       /* XXX convert args. */
-       vm_map_t map = (vm_map_t)addr;
-       boolean_t full = have_addr;
-
        vm_map_entry_t entry;
 
        db_iprintf("Task map %p: pmap=%p, nentries=%d, version=%u\n",
            (void *)map,
            (void *)map->pmap, map->nentries, map->timestamp);
-       nlines++;
-
-       if (!full && db_indent)
-               return;
 
        db_indent += 2;
        for (entry = map->header.next; entry != &map->header;
            entry = entry->next) {
                db_iprintf("map entry %p: start=%p, end=%p\n",
                    (void *)entry, (void *)entry->start, (void *)entry->end);
-               nlines++;
                {
                        static char *inheritance_name[4] =
                        {"share", "copy", "none", "donate_copy"};
@@ -4016,14 +4004,11 @@ DB_SHOW_COMMAND(map, vm_map_print)
                        db_printf(", share=%p, offset=0x%jx\n",
                            (void *)entry->object.sub_map,
                            (uintmax_t)entry->offset);
-                       nlines++;
                        if ((entry->prev == &map->header) ||
                            (entry->prev->object.sub_map !=
                                entry->object.sub_map)) {
                                db_indent += 2;
-                               vm_map_print((db_expr_t)(intptr_t)
-                                            entry->object.sub_map,
-                                            full, 0, (char *)0);
+                               vm_map_print((vm_map_t)entry->object.sub_map);
                                db_indent -= 2;
                        }
                } else {
@@ -4040,7 +4025,6 @@ DB_SHOW_COMMAND(map, vm_map_print)
                                db_printf(", copy (%s)",
                                    (entry->eflags & MAP_ENTRY_NEEDS_COPY) ? 
"needed" : "done");
                        db_printf("\n");
-                       nlines++;
 
                        if ((entry->prev == &map->header) ||
                            (entry->prev->object.vm_object !=
@@ -4048,17 +4032,23 @@ DB_SHOW_COMMAND(map, vm_map_print)
                                db_indent += 2;
                                vm_object_print((db_expr_t)(intptr_t)
                                                entry->object.vm_object,
-                                               full, 0, (char *)0);
-                               nlines += 4;
+                                               1, 0, (char *)0);
                                db_indent -= 2;
                        }
                }
        }
        db_indent -= 2;
-       if (db_indent == 0)
-               nlines = 0;
 }
 
+DB_SHOW_COMMAND(map, map)
+{
+
+       if (!have_addr) {
+               db_printf("usage: show map <addr>\n");
+               return;
+       }
+       vm_map_print((vm_map_t)addr);
+}
 
 DB_SHOW_COMMAND(procvm, procvm)
 {
@@ -4074,7 +4064,7 @@ DB_SHOW_COMMAND(procvm, procvm)
            (void *)p, (void *)p->p_vmspace, (void *)&p->p_vmspace->vm_map,
            (void *)vmspace_pmap(p->p_vmspace));
 
-       vm_map_print((db_expr_t)(intptr_t)&p->p_vmspace->vm_map, 1, 0, NULL);
+       vm_map_print((vm_map_t)&p->p_vmspace->vm_map);
 }
 
 #endif /* DDB */
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to