diff options
Diffstat (limited to 'vm')
-rw-r--r-- | vm/vm_map.c | 2 | ||||
-rw-r--r-- | vm/vm_object.c | 40 | ||||
-rw-r--r-- | vm/vm_print.h | 1 |
3 files changed, 34 insertions, 9 deletions
diff --git a/vm/vm_map.c b/vm/vm_map.c index 2e243b78..e1f8af9e 100644 --- a/vm/vm_map.c +++ b/vm/vm_map.c @@ -5208,7 +5208,7 @@ void vm_map_print(db_expr_t addr, boolean_t have_addr, db_expr_t count, const ch if ((entry->vme_prev == vm_map_to_entry(map)) || (entry->vme_prev->object.vm_object != entry->object.vm_object)) { indent += 1; - vm_object_print(entry->object.vm_object); + vm_object_print_part(entry->object.vm_object, entry->offset, entry->vme_end - entry->vme_start); indent -= 1; } } diff --git a/vm/vm_object.c b/vm/vm_object.c index 623c8af6..10e4f453 100644 --- a/vm/vm_object.c +++ b/vm/vm_object.c @@ -2955,12 +2955,14 @@ boolean_t vm_object_print_pages = FALSE; /* * vm_object_print: [ debug ] */ -void vm_object_print( - vm_object_t object) +void vm_object_print_part( + vm_object_t object, + vm_offset_t offset, + vm_size_t size) { vm_page_t p; - int count; + int count, count2; if (object == VM_OBJECT_NULL) return; @@ -2991,18 +2993,34 @@ void vm_object_print( (vm_offset_t) object->shadow, (vm_offset_t) object->shadow_offset); printf("copy=0x%X\n", (vm_offset_t) object->copy); + count = 0; + count2 = 0; + p = (vm_page_t) queue_first(&object->memq); + while (!queue_end(&object->memq, (queue_entry_t) p)) { + if (p->offset >= offset && p->offset + PAGE_SIZE <= size) { + if (p->wire_count) + count++; + count2++; + } + p = (vm_page_t) queue_next(&p->listq); + } + iprintf("wired: %d/%d\n", count, count2); + indent += 1; if (vm_object_print_pages) { count = 0; p = (vm_page_t) queue_first(&object->memq); while (!queue_end(&object->memq, (queue_entry_t) p)) { - if (count == 0) iprintf("memory:="); - else if (count == 4) {printf("\n"); iprintf(" ..."); count = 0;} - else printf(","); - count++; + if (p->offset >= offset && p->offset + PAGE_SIZE <= size) { + if (count == 0) iprintf("memory:="); + else if (count == 4) {printf("\n"); iprintf(" ..."); count = 0;} + else printf(","); + count++; + + printf("(off=0x%X,page=0x%X)", p->offset, (vm_offset_t) p); + } - printf("(off=0x%X,page=0x%X)", p->offset, (vm_offset_t) p); p = (vm_page_t) queue_next(&p->listq); } if (count != 0) @@ -3011,4 +3029,10 @@ void vm_object_print( indent -= 2; } +void vm_object_print( + vm_object_t object) +{ + vm_object_print_part(object, 0ULL, ~0ULL); +} + #endif /* MACH_KDB */ diff --git a/vm/vm_print.h b/vm/vm_print.h index 8a36d75e..68db1fa5 100644 --- a/vm/vm_print.h +++ b/vm/vm_print.h @@ -31,6 +31,7 @@ extern void vm_map_copy_print(const vm_map_copy_t); #include <vm/vm_object.h> +extern void vm_object_print_part(vm_object_t object, vm_offset_t offset, vm_size_t size); extern void vm_object_print(vm_object_t); #include <vm/vm_page.h> |