2004-05-11 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Tue, 11 May 2004 16:57:04 +0000 (16:57 +0000)
committerAndrew Cagney <cagney@redhat.com>
Tue, 11 May 2004 16:57:04 +0000 (16:57 +0000)
* infrun.c (handle_inferior_event): Simplify code handling
step-into or return-from a signal trampoline.

Index: testsuite/ChangeLog
2004-05-11  Andrew Cagney  <cagney@redhat.com>

* gdb.base/sigstep.exp (advancei): Update KFAILs.  gdb/1613 is
fixed but revealed gdb/1639.

gdb/ChangeLog
gdb/infrun.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/sigstep.exp

index b48a23bcb54686cd2ec4e44aae267289021f2577..46fd196b5decc21d70e6c9edd424da555685e33e 100644 (file)
@@ -1,3 +1,8 @@
+2004-05-11  Andrew Cagney  <cagney@redhat.com>
+
+       * infrun.c (handle_inferior_event): Simplify code handling
+       step-into or return-from a signal trampoline.
+
 2004-05-11  Andrew Cagney  <cagney@redhat.com>
 
        * ppcnbsd-tdep.c: Include "gdb_assert.h".
index 298b5f425054560a76722c1cbbfc1153692db0df..74134e6a6e80e52b181fd4a4481af1527f83aade 100644 (file)
@@ -2412,75 +2412,16 @@ process_event_stop_test:
      But we can update it every time we leave the step range.  */
   ecs->update_step_sp = 1;
 
-  /* Did we just step into a singal trampoline (either by stepping out
-     of a handler, or by taking a signal)?  */
-  if (get_frame_type (get_current_frame ()) == SIGTRAMP_FRAME
-      && !frame_id_eq (get_frame_id (get_current_frame ()), step_frame_id))
-    {
-      {
-       struct frame_id current_frame = get_frame_id (get_current_frame ());
-
-       if (frame_id_inner (current_frame, step_frame_id))
-         {
-           /* We have just taken a signal; go until we are back to
-              the point where we took it and one more.  */
-
-           /* This code is needed at least in the following case:
-              The user types "next" and then a signal arrives (before
-              the "next" is done).  */
-
-           /* Note that if we are stopped at a breakpoint, then we need
-              the step_resume breakpoint to override any breakpoints at
-              the same location, so that we will still step over the
-              breakpoint even though the signal happened.  */
-           struct symtab_and_line sr_sal;
-
-           init_sal (&sr_sal);
-           sr_sal.symtab = NULL;
-           sr_sal.line = 0;
-           sr_sal.pc = prev_pc;
-           /* We could probably be setting the frame to
-              step_frame_id; I don't think anyone thought to try it.  */
-           check_for_old_step_resume_breakpoint ();
-           step_resume_breakpoint =
-             set_momentary_breakpoint (sr_sal, null_frame_id, bp_step_resume);
-           if (breakpoints_inserted)
-             insert_breakpoints ();
-         }
-       else
-         {
-           /* We just stepped out of a signal handler and into
-              its calling trampoline.
-
-              Normally, we'd call step_over_function from
-              here, but for some reason GDB can't unwind the
-              stack correctly to find the real PC for the point
-              user code where the signal trampoline will return
-              -- FRAME_SAVED_PC fails, at least on HP-UX 10.20.
-              But signal trampolines are pretty small stubs of
-              code, anyway, so it's OK instead to just
-              single-step out.  Note: assuming such trampolines
-              don't exhibit recursion on any platform... */
-           find_pc_partial_function (stop_pc, &ecs->stop_func_name,
-                                     &ecs->stop_func_start,
-                                     &ecs->stop_func_end);
-           /* Readjust stepping range */
-           step_range_start = ecs->stop_func_start;
-           step_range_end = ecs->stop_func_end;
-           ecs->stepping_through_sigtramp = 1;
-         }
-      }
-
-
-      /* If this is stepi or nexti, make sure that the stepping range
-         gets us past that instruction.  */
-      if (step_range_end == 1)
-       /* FIXME: Does this run afoul of the code below which, if
-          we step into the middle of a line, resets the stepping
-          range?  */
-       step_range_end = (step_range_start = prev_pc) + 1;
-
-      ecs->remove_breakpoints_on_following_step = 1;
+  if (step_range_end != 1
+      && (step_over_calls == STEP_OVER_UNDEBUGGABLE
+         || step_over_calls == STEP_OVER_ALL)
+      && get_frame_type (get_current_frame ()) == SIGTRAMP_FRAME)
+    {
+      /* The inferior, while doing a "step" or "next", has ended up in
+        a signal trampoline (either by a signal being delivered or by
+        the signal handler returning).  Just single-step until the
+        inferior leaves the trampoline (either by calling the handler
+        or returning).  */
       keep_going (ecs);
       return;
     }
index 29a29cbc591dd477049d740b1e56610da867fd1e..ae02e302c8b20c8c05124748b70e9a7e25b9d059 100644 (file)
@@ -1,3 +1,8 @@
+2004-05-11  Andrew Cagney  <cagney@redhat.com>
+
+       * gdb.base/sigstep.exp (advancei): Update KFAILs.  gdb/1613 is
+       fixed but revealed gdb/1639.
+
 2004-05-10  Andrew Cagney  <cagney@redhat.com>
 
        * gdb.base/signals.exp (signal_tests_1): Simplify "continue to
index e0eaf759df31e6aa6ae1e23e163ad77c737e494f..ea16ec680cd25df6f0006dcf166e28880b8c9ae5 100644 (file)
@@ -87,7 +87,8 @@ proc advance { i } {
            exp_continue
        }
        -re "Program exited normally.*${gdb_prompt} $" {
-           kfail gdb/1613 "$test (program exited)"
+           setup_kfail powerpc-*-*bsd* gdb/1639
+           fail "$test (program exited)"
        }
        -re "(while ..done|return 0).*${gdb_prompt} $" {
            # After stepping out of a function /r signal-handler, GDB will
@@ -122,13 +123,13 @@ proc advancei { i } {
        -re "signal handler called.*${gdb_prompt} $" {
            pass "$test"
        }
-       -re "Program exited normally.*${gdb_prompt} $" {
-           kfail gdb/1613 "$test (program exited)"
-           set program_exited 1
-       }
        -re "main .*${gdb_prompt} $" {
            fail "$test (in main)"
        }
+       -re "Program exited normally.*${gdb_prompt} $" {
+           fail "$test (program exited)"
+           set program_exited 1
+       }
        -re "Make handler return now.*y or n. $" {
            send_gdb "y\n"
            exp_continue
@@ -151,12 +152,16 @@ proc advancei { i } {
            send_gdb "y\n"
            exp_continue
        }
+       -re "Program exited normally.*${gdb_prompt} $" {
+           kfail gdb/1639 "$test (program exited)"
+           set program_exited 1
+       }
        -re "The program is not being run.*${gdb_prompt} $" {
            if { $program_exited } {
                # Previously kfailed with an exit
-               pass "$test (The program is not being run)"
+               pass "$test (the program is not being run)"
            } else {
-               fail "$test"
+               fail "$test (the program is not being run)"
            }
        }
     }