[eros-cvs] cvs commit: eros/src/base/sys/kerninc Process.hxx
shap@eros.cs.jhu.edu
shap@eros.cs.jhu.edu
Mon, 26 Nov 2001 00:47:40 -0500
shap 01/11/26 00:47:40
Modified: src/base/sys/ddb db_command.cxx db_eros.cxx
src/base/sys/eros ProcessState.h
src/base/sys/kernel kern_Invoke.cxx
src/base/sys/kerninc Process.hxx
Log:
Added support for "enter kernel debugger when process fault code is set"
Revision Changes Path
1.71 +4 -2 eros/src/base/sys/ddb/db_command.cxx
Index: db_command.cxx
===================================================================
RCS file: /cvs/eros/src/base/sys/ddb/db_command.cxx,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -r1.70 -r1.71
--- db_command.cxx 2001/11/26 01:05:38 1.70
+++ db_command.cxx 2001/11/26 05:47:40 1.71
@@ -468,7 +468,8 @@
extern void db_eros_mesg_gate_cmd(db_expr_t, int, db_expr_t, char*);
extern void db_eros_mesg_keyerr_cmd(db_expr_t, int, db_expr_t, char*);
extern void db_eros_mesg_keeper_cmd(db_expr_t, int, db_expr_t, char*);
-extern void db_eros_mesg_proc_cmd(db_expr_t, int, db_expr_t, char*);
+extern void db_eros_mesg_procinv_cmd(db_expr_t, int, db_expr_t, char*);
+extern void db_eros_mesg_proctrap_cmd(db_expr_t, int, db_expr_t, char*);
extern void db_eros_mesg_return_cmd(db_expr_t, int, db_expr_t, char*);
extern void db_eros_mesg_segwalk_cmd(db_expr_t, int, db_expr_t, char*);
extern void db_eros_mesg_show_cmd(db_expr_t, int, db_expr_t, char*);
@@ -480,7 +481,8 @@
{ "gate", db_eros_mesg_gate_cmd, 0, 0 },
{ "keyerr", db_eros_mesg_keyerr_cmd, 0, 0 },
{ "keeper", db_eros_mesg_keeper_cmd, 0, 0 },
- { "proc", db_eros_mesg_proc_cmd, 0, 0 },
+ { "procinv", db_eros_mesg_procinv_cmd, 0, 0 },
+ { "proctrap", db_eros_mesg_proctrap_cmd, 0, 0 },
{ "return", db_eros_mesg_return_cmd, 0, 0 },
{ "segwalk", db_eros_mesg_segwalk_cmd, 0, 0 },
{ "show", db_eros_mesg_show_cmd, 0, 0 },
1.158 +30 -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.157
retrieving revision 1.158
diff -u -r1.157 -r1.158
--- db_eros.cxx 2001/11/26 01:05:38 1.157
+++ db_eros.cxx 2001/11/26 05:47:40 1.158
@@ -526,22 +526,48 @@
}
void
-db_eros_mesg_proc_cmd(db_expr_t addr, int have_addr,
+db_eros_mesg_procinv_cmd(db_expr_t addr, int have_addr,
db_expr_t /* count */, char * /* modif */)
{
Process *cc =
have_addr ? (Process *) addr : (Process*) Thread::CurContext();
- if (cc->processFlags & PF_DDB) {
- cc->processFlags &= ~PF_DDB;
+ if (cc->processFlags & PF_DDBINV) {
+ cc->processFlags &= ~PF_DDBINV;
db_printf("Invocation traps for context 0x%08x (OID 0x%08x%08x) disabled\n",
cc,
(uint32_t) (cc->procRoot->ob.oid >> 32),
(uint32_t) (cc->procRoot->ob.oid));
}
else {
- cc->processFlags |= PF_DDB;
+ cc->processFlags |= PF_DDBINV;
db_printf("Invocation traps for context 0x%08x (OID 0x%08x%08x) enabled\n",
+ cc,
+ (uint32_t) (cc->procRoot->ob.oid >> 32),
+ (uint32_t) (cc->procRoot->ob.oid));
+
+ /* Once set, this is forever: */
+ ddb_inv_flags |= DDB_INV_pflag;
+ }
+}
+
+void
+db_eros_mesg_proctrap_cmd(db_expr_t addr, int have_addr,
+ db_expr_t /* count */, char * /* modif */)
+{
+ Process *cc =
+ have_addr ? (Process *) addr : (Process*) Thread::CurContext();
+
+ if (cc->processFlags & PF_DDBTRAP) {
+ cc->processFlags &= ~PF_DDBTRAP;
+ db_printf("Exception traps for context 0x%08x (OID 0x%08x%08x) disabled\n",
+ cc,
+ (uint32_t) (cc->procRoot->ob.oid >> 32),
+ (uint32_t) (cc->procRoot->ob.oid));
+ }
+ else {
+ cc->processFlags |= PF_DDBTRAP;
+ db_printf("Exception traps for context 0x%08x (OID 0x%08x%08x) enabled\n",
cc,
(uint32_t) (cc->procRoot->ob.oid >> 32),
(uint32_t) (cc->procRoot->ob.oid));
1.46 +6 -4 eros/src/base/sys/eros/ProcessState.h
Index: ProcessState.h
===================================================================
RCS file: /cvs/eros/src/base/sys/eros/ProcessState.h,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -r1.45 -r1.46
--- ProcessState.h 2001/11/21 22:45:03 1.45
+++ ProcessState.h 2001/11/26 05:47:40 1.46
@@ -115,13 +115,15 @@
/* NOTE that PF_Foreign is not yet implemented, though it won't be
hard to do now that the flag is defined. */
#define PF_Foreign 0x2u /* process should not make invocations */
-/* NOTE that PF_DDB is a temporary expedient until we are able to get
- a minimal per-process debugger running. Domain code should NOT rely
- on this symbol remaining defined. Also, domain code should be
+/* NOTE that PF_DDBINV is a temporary expedient until we are able to
+ get a minimal per-process debugger running. Domain code should NOT
+ rely on this symbol remaining defined. Also, domain code should be
careful always to use appropriate AND and OR operations when
manipulating the flags field, as new flags may need to be defined
in the future. */
-#define PF_DDB 0x80u /* process invocations should be
+#define PF_DDBINV 0x80u /* process invocations should be
+ reported by DDB */
+#define PF_DDBTRAP 0x40u /* process invocations should be
reported by DDB */
/* Fault classifications used by the kernel when reporting faults: */
1.227 +4 -4 eros/src/base/sys/kernel/kern_Invoke.cxx
Index: kern_Invoke.cxx
===================================================================
RCS file: /cvs/eros/src/base/sys/kernel/kern_Invoke.cxx,v
retrieving revision 1.226
retrieving revision 1.227
diff -u -r1.226 -r1.227
--- kern_Invoke.cxx 2001/11/26 01:05:39 1.226
+++ kern_Invoke.cxx 2001/11/26 05:47:40 1.227
@@ -1039,8 +1039,8 @@
(DDB_STOP(gate) && invoked_gate_key) ||
(DDB_STOP(keeper) && inv.suppressXfer) ||
(DDB_STOP(pflag) &&
- ( (processFlags & PF_DDB) ||
- (inv.invokee && inv.invokee->processFlags & PF_DDB) ))
+ ( (processFlags & PF_DDBINV) ||
+ (inv.invokee && inv.invokee->processFlags & PF_DDBINV) ))
)
dprintf(true, "About to invoke key handler (inv.ty=%d) ic=%d\n",
inv.keyType, KernStats.nInvoke);
@@ -1084,8 +1084,8 @@
( DDB_STOP(keeper) && inv.suppressXfer) ||
( DDB_STOP(return) && inv.invType == IT_Reply ) ||
(DDB_STOP(pflag) &&
- ( (processFlags & PF_DDB) ||
- (inv.invokee && inv.invokee->processFlags & PF_DDB) )) ||
+ ( (processFlags & PF_DDBINV) ||
+ (inv.invokee && inv.invokee->processFlags & PF_DDBINV) )) ||
( DDB_STOP(keyerr) &&
!invoked_gate_key &&
(inv.keyType != KT_Returner) &&
1.81 +5 -0 eros/src/base/sys/kerninc/Process.hxx
Index: Process.hxx
===================================================================
RCS file: /cvs/eros/src/base/sys/kerninc/Process.hxx,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -r1.80 -r1.81
--- Process.hxx 2001/10/21 17:12:17 1.80
+++ Process.hxx 2001/11/26 05:47:40 1.81
@@ -313,6 +313,11 @@
if (needRevalidate)
NeedRevalidate();
+
+#ifdef OPTION_DDB
+ if (processFlags & PF_DDBTRAP)
+ dprintf(true, "Process 0x%08x has trap code set\n", this);
+#endif
}
void SetMalformed()