summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vm/vm_map.c2
-rw-r--r--vm/vm_object.c40
-rw-r--r--vm/vm_print.h1
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>