[eros-cvs] cvs commit: eros/src/base/sys/ddb db_eros.cxx

shap@eros.cs.jhu.edu shap@eros.cs.jhu.edu
Wed, 25 Jul 2001 01:37:45 -0400


shap        01/07/25 01:37:45

  Modified:    src/base/sys/ddb db_eros.cxx
  Log:
  Improve debugger key printing

Revision  Changes    Path
1.147     +95 -4     eros/src/base/sys/ddb/db_eros.cxx

Index: db_eros.cxx
===================================================================
RCS file: /cvs/eros/src/base/sys/ddb/db_eros.cxx,v
retrieving revision 1.146
retrieving revision 1.147
diff -u -r1.146 -r1.147
--- db_eros.cxx	2001/06/27 21:15:45	1.146
+++ db_eros.cxx	2001/07/25 05:37:45	1.147
@@ -47,7 +47,8 @@
 #include <ddb/db_output.hxx>
 #include <arch-kerninc/PTE.hxx>
 
-void db_eros_print_key(Key& key)
+void
+db_eros_print_key(Key& key)
 {
   uint32_t *pWKey = (uint32_t *) &key;
 
@@ -86,6 +87,95 @@
 	      pWKey[0], pWKey[1], pWKey[2], pWKey[3]);
 }
 
+#define __EROS_PRIMARY_KEYDEF(name)  #name,
+static const char *keyNames[] = {
+#include <eros/StdKeyType.h>
+};
+
+void
+db_eros_print_key_details(Key& key)
+{
+  uint32_t *pWKey = (uint32_t *) &key;
+
+  db_printf("Key (0x%08x) (KT_%s) keydata=0x%x",
+	    pWKey, keyNames[key.GetType()],  key.keyData);
+
+  if (key.IsPrepared() || key.IsHazard()) {
+    db_printf("(");
+
+    if (key.IsRdHazard()) 
+      db_printf("rdhz");
+    if (key.IsWrHazard()) {
+      if (key.IsRdHazard()) 
+	db_printf(", ");
+      db_printf("wrhz");
+    }
+    if (key.IsPrepared()) {
+      if (key.IsHazard()) 
+	db_printf(", ");
+      db_printf("prepared");
+    }
+    db_printf(")");
+  }
+  db_printf("\n");
+
+  if (key.IsObjectKey()) {
+    OID oid;
+    ObCount count;
+
+    if (!key.IsUnprepared()) {
+      oid = key.unprep.oid;
+      count = key.unprep.count;
+    }
+    else if (key.IsType(KT_Resume)) {
+      oid = key.gk.pContext->procRoot->ob.oid;
+      count = key.gk.pContext->procRoot->callCount;
+    }
+    else if (key.IsType(KT_Start)) {
+      oid = key.gk.pContext->procRoot->ob.oid;
+      count = key.gk.pContext->procRoot->ob.allocCount;
+    }
+    else {
+      oid = key.GetKeyOid();
+      count = key.GetAllocCount();
+    }
+
+    db_printf("oid=0x%08x%08x, count=%d",
+	      (unsigned long)(oid >> 32),
+	      (unsigned long)(oid),
+	      count);
+
+    if (key.IsSegModeType())
+      db_printf(" blss=%d", key.GetBlss());
+    db_printf("\n");
+  }
+  else if (key.IsType(KT_Range) || key.IsType(KT_PrimeRange) ||
+	   key.IsType(KT_PhysRange)) {
+    OID start = key.rk.oid;
+    OID end = key.rk.oid + inv.key->rk.count;
+
+    db_printf("oid=[0x%08x%08x, 0x%08x%08x)\n",
+	      (unsigned long)(start >> 32),
+	      (unsigned long)(start),
+	      (unsigned long)(end >> 32),
+	      (unsigned long)(end));
+  }
+  else if (key.IsType(KT_Number)) {
+    db_printf("0x%08x%08x%08x\n",
+	      key.nk.value[2],
+	      key.nk.value[1],
+	      key.nk.value[0]);
+  }
+  else if (key.IsVoidKey()) {
+  }
+  else {
+    db_printf("0x%08x 0x%08x 0x%08x\n",
+	      key.nk.value[0],
+	      key.nk.value[1],
+	      key.nk.value[2]);
+  }
+}
+
 void
 db_eros_print_node(Node *pNode)
 {
@@ -126,7 +216,7 @@
 
   for (uint32_t i = 0; i < EROS_NODE_SIZE; i++) {
     Key& key = (*pNode)[i];
-    db_printf(" [%02d] ", i);
+    db_printf(" [%02d] (0x%08x) ", i, &key);
     db_eros_print_key(key);
   }
 
@@ -242,7 +332,7 @@
   }
 
   for (unsigned int i = 0; i < EROS_NODE_SIZE; i++) {
-    db_printf("[%02d] ", i);
+    db_printf("[%02d] (0x%08x)", i, &cc->keyReg[i]);
     db_eros_print_key(cc->keyReg[i]);
   }
 }
@@ -612,7 +702,7 @@
 	      t, Thread::stateNames[t->state], t->context,
 	      (t->IsKernel() ? "kernel" : "user"),
 	      t->cpuReserve);
-    db_printf("    ");
+    db_printf("    (0x%08x): ", &t->processKey);
     db_eros_print_key(t->processKey);
   }
   else
@@ -1193,6 +1283,7 @@
     db_error("requires address\n");
 
   db_eros_print_key(*((Key *) addr));
+  db_eros_print_key_details(*((Key *) addr));
 }
 
 void