diff options
author | Vladimir Prus <vladimir@codesourcery.com> | 2008-04-24 11:43:14 +0000 |
---|---|---|
committer | Vladimir Prus <vladimir@codesourcery.com> | 2008-04-24 11:43:14 +0000 |
commit | f13468d93e86adc9d2ae64dc07881254f3b90b2a (patch) | |
tree | ec16186401da688c3ef464f3d00f058e5020f726 | |
parent | f107f56344531e3fa4cc74cac1fe7dd7b056edab (diff) | |
download | gdb-f13468d93e86adc9d2ae64dc07881254f3b90b2a.zip gdb-f13468d93e86adc9d2ae64dc07881254f3b90b2a.tar.gz gdb-f13468d93e86adc9d2ae64dc07881254f3b90b2a.tar.bz2 |
* infcmd.c (step_1_continuation): Always disable longjmp
breakpoint if we're not going to do another step.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/infcmd.c | 33 |
2 files changed, 22 insertions, 16 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 58c0454..936f9d1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2008-04-24 Vladimir Prus <vladimir@codesourcery.com> + * infcmd.c (step_1_continuation): Always disable longjmp + breakpoint if we're not going to do another step. + +2008-04-24 Vladimir Prus <vladimir@codesourcery.com> + exec_cleanup murder. * breakpoint.c (until_break_command_continuation): Add the 'error' parameter. Directly delete the breakoint as diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 867dadf..bdbb9bf 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -804,24 +804,25 @@ which has no line number information.\n"), name); static void step_1_continuation (struct continuation_arg *arg, int error_p) { - if (error_p) - disable_longjmp_breakpoint (); - else - { - int count; - int skip_subroutines; - int single_inst; + int count; + int skip_subroutines; + int single_inst; - skip_subroutines = arg->data.integer; - single_inst = arg->next->data.integer; - count = arg->next->next->data.integer; - - if (stop_step) - step_once (skip_subroutines, single_inst, count - 1); - else - if (!single_inst || skip_subroutines) - disable_longjmp_breakpoint (); + skip_subroutines = arg->data.integer; + single_inst = arg->next->data.integer; + count = arg->next->next->data.integer; + + if (error_p || !step_multi || !stop_step) + { + /* We either hit an error, or stopped for some reason + that is not stepping, or there are no further steps + to make. Cleanup. */ + if (!single_inst || skip_subroutines) + disable_longjmp_breakpoint (); + step_multi = 0; } + else + step_once (skip_subroutines, single_inst, count - 1); } /* Do just one step operation. If count >1 we will have to set up a |