diff options
author | Jonathan Larmour <jifl@eCosCentric.com> | 2001-06-06 16:31:32 +0000 |
---|---|---|
committer | Jonathan Larmour <jifl@eCosCentric.com> | 2001-06-06 16:31:32 +0000 |
commit | ac89f65a370ad5d9a74c354bc57d0ba346d8d690 (patch) | |
tree | dce0ad2695b2e538dbbc8294d7ac53e44ff7bb52 /gdb/arch-utils.c | |
parent | 377313a3c8694a9e2537a2b3ab8b36a21676c353 (diff) | |
download | gdb-ac89f65a370ad5d9a74c354bc57d0ba346d8d690.tar.gz |
* arch-utils.c (generic_prepare_to_proceed): Allow for having
stopped due to a Ctrl-C as well as breakpoints.
* hppa-tdep.c (hppa_prepare_to_proceed): Add FIXME as this may not
support thread switches after Ctrl-C.
* lin-lwp.c (lin_lwp_prepare_to_proceed): Ditto.
* linux-thread.c (linuxthreads_prepare_to_proceed): Ditto.
* m3-nat.c (mach3_prepare_to_proceed): Ditto.
Diffstat (limited to 'gdb/arch-utils.c')
-rw-r--r-- | gdb/arch-utils.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c index de977ddbbe8..733b2b96d02 100644 --- a/gdb/arch-utils.c +++ b/gdb/arch-utils.c @@ -258,9 +258,11 @@ generic_prepare_to_proceed (int select_it) /* Get the last target status returned by target_wait(). */ get_last_target_status (&wait_ptid, &wait_status); - /* Make sure we were stopped at a breakpoint. */ + /* Make sure we were stopped either at a breakpoint, or because + of a Ctrl-C. */ if (wait_status.kind != TARGET_WAITKIND_STOPPED - || wait_status.value.sig != TARGET_SIGNAL_TRAP) + || (wait_status.value.sig != TARGET_SIGNAL_TRAP && + wait_status.value.sig != TARGET_SIGNAL_INT)) { return 0; } @@ -271,14 +273,11 @@ generic_prepare_to_proceed (int select_it) /* Switched over from WAIT_PID. */ CORE_ADDR wait_pc = read_pc_pid (wait_ptid); - /* Avoid switching where it wouldn't do any good, i.e. if both - threads are at the same breakpoint. */ - if (wait_pc != read_pc () && breakpoint_here_p (wait_pc)) + if (wait_pc != read_pc ()) { if (select_it) { - /* User hasn't deleted the breakpoint. Switch back to - WAIT_PID and return non-zero. */ + /* Switch back to WAIT_PID thread. */ inferior_ptid = wait_ptid; /* FIXME: This stuff came from switch_to_thread() in @@ -288,8 +287,13 @@ generic_prepare_to_proceed (int select_it) stop_pc = wait_pc; select_frame (get_current_frame (), 0); } - - return 1; + /* We return 1 to indicate that there is a breakpoint here, + so we need to step over it before continuing to avoid + hitting it straight away. */ + if (breakpoint_here_p (wait_pc)) + { + return 1; + } } } return 0; |