From 1a4fc505d11ea92883703b3c137ca9c874b6beac Mon Sep 17 00:00:00 2001
From: David Stevens <stevensd@google.com>
Date: Mon, 22 Apr 2019 17:54:38 +0000
Subject: [PATCH] [kernel] Add more vmo info to k debug output

- Add VmObject pointers to vmo dumps from 'k zx'. These pointers can
  be used to further inspect vmos with 'k vm_object'.
- Add parent pointer to 'k vm_object'.

Change-Id: I988d6968e4d4fe8824b1710975145c62f01744c2
---
 zircon/kernel/object/diagnostics.cpp | 4 +++-
 zircon/kernel/vm/vm_object_paged.cpp | 7 ++++---
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/zircon/kernel/object/diagnostics.cpp b/zircon/kernel/object/diagnostics.cpp
index 93109db5b17..46cd2416e30 100644
--- a/zircon/kernel/object/diagnostics.cpp
+++ b/zircon/kernel/object/diagnostics.cpp
@@ -327,7 +327,7 @@ static const char* VmoRightsToString(uint32_t rights, char str[kRightsStrLen]) {
 // If |handles| is true, the dumped objects are expected to have handle info.
 static void PrintVmoDumpHeader(bool handles) {
     printf(
-        "%s koid parent #chld #map #shr    size   alloc name\n",
+        "%s koid obj                parent #chld #map #shr    size   alloc name\n",
         handles ? "      handle rights " : "           -      - ");
 }
 
@@ -382,6 +382,7 @@ static void DumpVmObject(
     printf("  %10s " // handle
            "%6s " // rights
            "%5" PRIu64 " " // koid
+           "%p " // vm_object
            "%6s " // clone parent koid
            "%5" PRIu32 " " // number of children
            "%4" PRIu32 " " // map count
@@ -392,6 +393,7 @@ static void DumpVmObject(
            handle_str,
            rights_str,
            koid,
+           &vmo,
            clone_str,
            vmo.num_children(),
            vmo.num_mappings(),
diff --git a/zircon/kernel/vm/vm_object_paged.cpp b/zircon/kernel/vm/vm_object_paged.cpp
index bc0b258ac5c..b1667cb628c 100644
--- a/zircon/kernel/vm/vm_object_paged.cpp
+++ b/zircon/kernel/vm/vm_object_paged.cpp
@@ -357,9 +357,10 @@ void VmObjectPaged::Dump(uint depth, bool verbose) {
     for (uint i = 0; i < depth; ++i) {
         printf("  ");
     }
-    printf("vmo %p/k%" PRIu64 " size %#" PRIx64
-           " pages %zu ref %d parent k%" PRIu64 "\n",
-           this, user_id_, size_, count, ref_count_debug(), parent_id);
+    printf("vmo %p/k%" PRIu64 " size %#" PRIx64 " offset %#" PRIx64
+           " pages %zu ref %d parent %p/k%" PRIu64 "\n",
+           this, user_id_, size_, parent_offset_, count,
+           ref_count_debug(), parent_.get(), parent_id);
 
     if (verbose) {
         auto f = [depth](const auto p, uint64_t offset) {
-- 
GitLab