[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()