[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