From: msnyder Date: Fri, 4 Oct 2002 22:17:35 +0000 (+0000) Subject: 2002-10-04 Michael Snyder X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=9a16e09edf102289fc608939b08294f55330f3ff;p=pf3gnuchains%2Fpf3gnuchains3x.git 2002-10-04 Michael Snyder * 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 a479f5fd25..6a70cf425d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2002-10-04 Michael Snyder + + * m32r-stub.c (handle_exception): Make sure exception is "trap" + before treating it as a single-step event. + 2002-10-03 Adam Fedor * objc-lang.c: ARI fixes. Change string.h to gdb_string.h. @@ -308,7 +313,7 @@ 2002-09-22 Fernando Nasser - * 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 @@ Wed Apr 24 14:22:21 2002 Andrew Cagney * 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 a691a657a2..2e69b4403e 100644 --- a/gdb/m32r-stub.c +++ b/gdb/m32r-stub.c @@ -210,8 +210,16 @@ handle_exception(int exceptionVector) 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;