From 8849f47dd926d34632dc6b2a16e99114f36ffa2a Mon Sep 17 00:00:00 2001 From: Jonathan Larmour Date: Wed, 6 Jun 2001 16:31:32 +0000 Subject: [PATCH 1/1] * 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. --- gdb/ChangeLog | 11 +++++++++++ gdb/arch-utils.c | 22 +++++++++++++--------- gdb/hppa-tdep.c | 5 ++++- gdb/lin-lwp.c | 5 ++++- gdb/linux-thread.c | 5 ++++- gdb/m3-nat.c | 3 +++ 6 files changed, 39 insertions(+), 12 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ffa0147dbf..6fa1a5c0af 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2001-06-06 Jonathan Larmour + + * 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. + 2001-06-06 Jim Blandy * gdbarch.sh, gdbarch.c: Revert change of 2001-06-01; all diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c index de977ddbbe..733b2b96d0 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; diff --git a/gdb/hppa-tdep.c b/gdb/hppa-tdep.c index 072b0a4b91..1c28e87fae 100644 --- a/gdb/hppa-tdep.c +++ b/gdb/hppa-tdep.c @@ -4594,7 +4594,10 @@ unwind_command (char *exp, int from_tty) putting the BPT instruction in and taking it out. Note that this implementation is potentially redundant now that - default_prepare_to_proceed() has been added. */ + default_prepare_to_proceed() has been added. + + FIXME This may not support switching threads after Ctrl-C + correctly. The default implementation does support this. */ int hppa_prepare_to_proceed (void) { diff --git a/gdb/lin-lwp.c b/gdb/lin-lwp.c index 280936ec22..0948a54316 100644 --- a/gdb/lin-lwp.c +++ b/gdb/lin-lwp.c @@ -263,7 +263,10 @@ iterate_over_lwps (int (*callback) (struct lwp_info *, void *), void *data) layer. Note that this implementation is potentially redundant now that - default_prepare_to_proceed() has been added. */ + default_prepare_to_proceed() has been added. + + FIXME This may not support switching threads after Ctrl-C + correctly. The default implementation does support this. */ int lin_lwp_prepare_to_proceed (void) diff --git a/gdb/linux-thread.c b/gdb/linux-thread.c index 62c07c4b16..f93387bfc7 100644 --- a/gdb/linux-thread.c +++ b/gdb/linux-thread.c @@ -1040,7 +1040,10 @@ quit: return 1 otherwise 0. Note that this implementation is potentially redundant now that - default_prepare_to_proceed() has been added. */ + default_prepare_to_proceed() has been added. + + FIXME This may not support switching threads after Ctrl-C + correctly. The default implementation does support this. */ int linuxthreads_prepare_to_proceed (int step) diff --git a/gdb/m3-nat.c b/gdb/m3-nat.c index 3ab160b3cb..d01e22cdb2 100644 --- a/gdb/m3-nat.c +++ b/gdb/m3-nat.c @@ -1575,6 +1575,9 @@ mach_thread_output_id (int mid) * * Note that this implementation is potentially redundant now that * default_prepare_to_proceed() has been added. + * + * FIXME This may not support switching threads after Ctrl-C + * correctly. The default implementation does support this. */ mach3_prepare_to_proceed (int select_it) -- 2.34.1