2002-10-04  Michael Snyder  <msnyder@redhat.com>

	* m32r-stub.c (handle_exception): Make sure exception is "trap"
	before treating it as a single-step event.
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index a479f5f..6a70cf4 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2002-10-04  Michael Snyder  <msnyder@redhat.com>
+
+	* m32r-stub.c (handle_exception): Make sure exception is "trap"
+	before treating it as a single-step event.
+
 2002-10-03  Adam Fedor  <fedor@gnu.org>
 
 	* objc-lang.c: ARI fixes.  Change string.h to gdb_string.h.
@@ -308,7 +313,7 @@
 
 2002-09-22  Fernando Nasser  <fnasser@redhat.com>
 
-	* source.c (get_current__or_default_source_symtab_and_line): Initialize
+	* source.c (get_current_or_default_source_symtab_and_line): Initialize
 	sal.pc and sal.end fields.
 	(get_current_or_default_source_symtab_and_line): Ditto.
 	* breakpoint.c (parse_breakpoint_sals): Use correct accessor function
@@ -10397,9 +10402,9 @@
 	* breakpoint.c (break_at_finish_command): Export.
 	(break_at_finish_at_depth_command): Export.
 	(tbreak_at_finish_command): Export.
-	(_initialize_breakpoint): Delete "xbreak" and "tbreak" commands.
+	(_initialize_breakpoint): Delete "xbreak" and "txbreak" commands.
 	* hppa-tdep.c (_initialize_hppa_tdep): Add "xbreak" and
-	"tbreak" commands, which are HPPA specific.
+	"txbreak" commands, which are HPPA specific.
 
 	* printcmd.c (disassemble_command): Remove an ancient
 	artifact of an old merge.
diff --git a/gdb/m32r-stub.c b/gdb/m32r-stub.c
index a691a65..2e69b44 100644
--- a/gdb/m32r-stub.c
+++ b/gdb/m32r-stub.c
@@ -210,8 +210,16 @@
   unsigned char   buf[16];
   int binary;
 
-  if (!finish_from_step())
-    return;		/* "false step": let the target continue */
+  /* Do not call finish_from_step() if this is not a trap #1
+   * (breakpoint trap).  Without this check, the finish_from_step()
+   * might interpret a system call trap as a single step trap.  This
+   * can happen if: the stub receives 's' and exits, but an interrupt
+   * was pending; the interrupt is now handled and causes the stub to
+   * be reentered because some function makes a system call.  
+   */
+  if (exceptionVector == 1)	/* Trap exception? */
+    if (!finish_from_step())	/* Go see if stepping state needs update. */
+      return;		/* "false step": let the target continue */
 
   gdb_m32r_vector = exceptionVector;