From: Kevin Pouget <kevin.pouget@gmail.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tromey@redhat.com>, Ulrich Weigand <uweigand@de.ibm.com>
Subject: Re: [RFC] Python Finish Breakpoints
Date: Fri, 27 Jan 2012 17:01:00 -0000 [thread overview]
Message-ID: <CAPftXUKwmsKjv4uVUqekarhHZkwYVaf+afEZGxxAtXv3bjqWeg@mail.gmail.com> (raw)
In-Reply-To: <CAPftXU+MCBngRz-R_2vCSocZtAqmfWkBhHyTmhvQUKfDnfWGLg@mail.gmail.com>
On Mon, Jan 9, 2012 at 10:20 AM, Kevin Pouget <kevin.pouget@gmail.com> wrote:
> On Wed, Jan 4, 2012 at 6:12 PM, Ulrich Weigand <uweigand@de.ibm.com> wrote:
>> Tom Tromey wrote:
>>
>>> We have support for "finish", and other operations in the presence of
>>> exceptions. Search for _Unwind_DebugHook (in breakpoint.c and infrun.c).
>>> This code only works if you are using a new-enough version of GCC and
>>> have debuginfo for libgcc (but once the stap probe patches are in, you
>>> will no longer need debuginfo).
>>
>> Ah, I see -- that's what I was missing. Yes, this looks like the
>> way to handle this situation ...
>
> Hello,
>
> I would like to discuss this patch which intends to fix and improve
> the handling for c++ exceptions with the Python FinishBreakpoint.
>
> Based on what I understood of the existing mechanisms which handle
> longjmps and and exception, I extended the "momentary breakpoints"
> with a "nostop" flag. Indeed, their initial behavior/goal was to stop
> unconditionally the execution, whereas I just wanted to receive a
> notification when the relevant code location was hit (namely
> infrun.c::BPSTAT_WHAT_CLEAR_LONGJMP_RESUME). The nostop flag is
> propagated step by step (bp by bp) from the exception throw to its
> catchpoint, where I check if the FinishBreakpoint have ran out of
> their scope.
>
> As Tom mentioned, c++ debug info are needed for this machinery to work
> (otherwise, FinishBreakpoint will fail the same way GDB fails: stop at
> the beginning of the catch(), never stop, ...) -- I used xfail in the
> testsuite to refer to this situation, I'm not sure that's correct).
>
> I've also fixed a bug which triggered twice the out_of_scope
> notification in case of inferior exit (observer_attach_normal_stop and
> observer_attach_inferior_exit are both triggered when the inferior
> exits)
>
> (This is just a preliminary patch, I'll would like to prepare some
> more tests with exceptions and longjmps)
>
> Tested with no regression on f15/X86_64
>
> ( these always fail on my system:
> Running PATH/git/gdb/gdb/testsuite/gdb.base/longjmp.exp ...
> FAIL: gdb.base/longjmp.exp: next over longjmp(1)
> FAIL: gdb.base/longjmp.exp: next over call_longjmp (2)
> FAIL: gdb.base/longjmp.exp: next over patt3
> )
>
> Thanks for your comments,
>
> Kevin
>
> --
>
> 2012-01-09 Kevin Pouget <kevin.pouget@st.com>
>
> * breakpoint.c (momentary_nostop_breakpoint_ops): New variable.
> (bpstat_what): Set field retval.is_nostop when necessary.
> (set_longjmp_breakpoint): Add parameter nostop and create nostop
> momentary breakpoint ops if necessary.
> (set_momentary_breakpoint): Likewise.
> (set_momentary_breakpoint_at_pc): Likewise.
> (momentary_breakpoint_is_nostop): New function.
> (until_break_command): Call set_momentary_breakpoint and
> set_longjmp_breakpoint with nostop not set.
> (momentary_stop_bkpt_check_status): Rename from
> momentary_bkpt_check_status.
> (momentary_bkpt_check_status): Remove.
> (momentary_nostop_bkpt_check_status): New function.
> (initialize_breakpoint_ops): Initialize
> momentary_breakpoint_ops.check_status to
> momentary_stop_bkpt_check_status, initialize
> momentary_nostop_breakpoint_ops.
> * breakpoint.h (struct bpstat_what): New field: is_nostop.
> (set_momentary_breakpoint): New parameter: nostop.
> (set_momentary_breakpoint_at_pc): Liklewise.
> (set_longjmp_breakpoint): Likewise.
> (momentary_breakpoint_is_nostop): New prototype.
> * arm-linux-tdep.c (arm_linux_copy_svc): Add nostop parameter to
> set_momentary_breakpoint call.
> * elfread.c: (elf_gnu_ifunc_resolver_stop): Likewise
> * infcall.c (call_function_by_hand): Likewise.
> * infcmd.c: (finish_forward): Likewise, add nostop parameter to
> set_longjmp_breakpoint call.
> (step_1): Add nostop parameter to set_longjmp_breakpoint call.
> (until_next_command): Likewise.
> * infrun.c: Include python/python.h.
> (insert_step_resume_breakpoint_at_sal_1): Add nostop parameter to
> set_momentary_breakpoint call.
> (insert_longjmp_resume_breakpoint): Add nostop parameter to prototype.
> Add nostop parameter to set_momentary_breakpoint_at_pc call.
> (insert_exception_resume_breakpoint): Likewise.
> (check_exception_resume): Add nostop parameter to prototype. Add nostop
> parameter to insert_exception_resume_breakpoint call.
> (process_event_stop_test): Set and use nostop to prevent GDB from
> stopping the execution, trigger gdbpy_bpfinish_handle_exception when
> necessary.
> * python/py-finishbreakpoint.c (bpfinishpy_init): Call
> set_longjmp_breakpoint.
> (bpfinishpy_detect_out_scope): Renamed from
> bpfinishpy_detect_out_scope_cb. Cleaned up. Add inc_current parameter.
> (bpfinishpy_detect_out_scope_cb): Removed.
> (bpfinishpy_detect_out_scope_bp_cb): New function.
> (bpfinishpy_detect_out_scope_exception_cb): New function.
> (bpfinishpy_handle_stop): Update with function name
> bpfinishpy_detect_out_scope_bp_cb.
> (bpfinishpy_handle_exit): Removed.
> (gdbpy_bpfinish_handle_exception): New function.
> (gdbpy_initialize_finishbreakpoints): Remove call to
> bpfinishpy_handle_exit.
> * python/python.c (gdbpy_bpfinish_handle_exception): New function.
> * python/python.h (gdbpy_bpfinish_handle_exception): New prototype.
>
> testsuite/
> * gdb.python/py-finish-breakpoint2.exp: Strengthen the exception tests.
ping
next prev parent reply other threads:[~2012-01-27 15:16 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <BANLkTim+YH64zkWvdz2_kVUUj=AJ7v4LKw@mail.gmail.com>
[not found] ` <BANLkTi=gtHzWzXOJzB+a19=jkfk1hGwQBg@mail.gmail.com>
[not found] ` <BANLkTikVdqbMqjguTV8ct0TWiBDhHGYtLg@mail.gmail.com>
2011-05-11 7:44 ` Kevin Pouget
2011-05-11 10:31 ` Phil Muldoon
2011-05-11 11:29 ` Kevin Pouget
2011-05-12 10:38 ` Kevin Pouget
2011-05-12 10:50 ` Phil Muldoon
2011-05-12 11:29 ` Kevin Pouget
[not found] ` <BANLkTi=Eu-5B4YyhP2rGdQXgXbBN-EmLKA@mail.gmail.com>
[not found] ` <BANLkTikt2hEUcXkGVH44NaUcwiF1SGdMaw@mail.gmail.com>
[not found] ` <BANLkTi=UpgogckTD5MZsW+PC5d2F8X-+jA@mail.gmail.com>
[not found] ` <BANLkTi==bj50mZgFKq_qA-+3-2CQA3tBVw@mail.gmail.com>
[not found] ` <BANLkTimmYEmvKT_984jYEVZnA5RGFpEgNw@mail.gmail.com>
2011-05-19 16:21 ` Tom Tromey
2011-05-24 12:51 ` Kevin Pouget
2011-05-27 20:30 ` Tom Tromey
2011-05-30 9:29 ` Kevin Pouget
2011-10-13 14:34 ` Kevin Pouget
2011-10-20 20:12 ` Tom Tromey
2011-10-20 20:58 ` Tom Tromey
2011-10-21 8:15 ` Kevin Pouget
2011-10-24 11:43 ` Kevin Pouget
2011-10-24 13:20 ` Eli Zaretskii
2011-10-24 14:30 ` Kevin Pouget
2011-10-24 17:14 ` Eli Zaretskii
2011-10-24 15:31 ` Kevin Pouget
2011-10-24 16:27 ` Phil Muldoon
2011-10-25 11:05 ` Kevin Pouget
2011-10-25 11:37 ` Phil Muldoon
2011-10-25 12:22 ` Kevin Pouget
2011-10-28 8:33 ` Kevin Pouget
2011-10-28 20:51 ` Tom Tromey
2011-11-02 14:44 ` Kevin Pouget
2011-11-04 14:25 ` Kevin Pouget
2011-11-04 21:04 ` Tom Tromey
2011-11-09 14:10 ` Kevin Pouget
2011-11-16 10:53 ` Kevin Pouget
2011-11-17 17:49 ` Tom Tromey
2011-11-17 17:48 ` Tom Tromey
[not found] ` <CAPftXUJwtGJhqFyfX6LVK87QH2xeLkvv5kx=yaEnYJMv0YR_rw@mail.gmail.com>
2011-11-24 8:27 ` Kevin Pouget
2011-11-30 16:02 ` Kevin Pouget
2011-12-02 21:49 ` Tom Tromey
2011-12-05 9:29 ` Kevin Pouget
2011-12-06 21:18 ` Tom Tromey
2011-12-07 13:35 ` Kevin Pouget
2011-12-08 15:30 ` Tom Tromey
2011-12-08 16:10 ` Kevin Pouget
2011-12-08 18:08 ` Kevin Pouget
2011-12-09 9:53 ` Kevin Pouget
2011-12-18 19:22 ` Kevin Pouget
2011-12-20 20:55 ` Tom Tromey
2011-12-20 20:58 ` Kevin Pouget
2011-12-21 7:16 ` Joel Brobecker
2011-12-21 17:13 ` Tom Tromey
[not found] ` <CAPftXUKXh9ekZ2kiwQ=5zbrjst+9VH9-eZk8h+Z-9SpQ1WqdLw@mail.gmail.com>
[not found] ` <CAPftXULQFggY3Nz2byC0fMZA1sg4Nymp3hAhe8aSuLNG4cauFg@mail.gmail.com>
[not found] ` <CAPftXUJALHd=-fajVwgowqfCDfXO6JMxSkorWD6CQArsg-PedQ@mail.gmail.com>
[not found] ` <CAPftXULKC8gp3L87+PZEF3dj3crv9bh-uzZpRiYKjqEw_xyptQ@mail.gmail.com>
2011-12-27 4:18 ` Joel Brobecker
2011-12-27 9:40 ` Kevin Pouget
2011-12-27 12:22 ` Joel Brobecker
2011-12-27 9:34 ` Kevin Pouget
2011-12-24 23:56 ` [patch] Fix gdb.python/py-finish-breakpoint.exp new FAIL on x86_64-m32 [Re: [RFC] Python Finish Breakpoints] Jan Kratochvil
2011-12-27 11:13 ` Kevin Pouget
2011-12-27 21:39 ` [commit] " Jan Kratochvil
2012-01-04 17:45 ` Ulrich Weigand
2012-01-04 17:58 ` [commit 7.4] " Jan Kratochvil
2012-01-04 18:10 ` Ulrich Weigand
2011-12-26 11:28 ` [patch] Fix remote.c crash on gdbserver close (+fix py-finish-breakpoint.exp for gdbserver) " Jan Kratochvil
2011-12-27 23:30 ` [patch] Fix remote.c crash on gdbserver close (+fix py-finish-breakpoint.exp for gdbserver) [rediff] Jan Kratochvil
2012-01-02 17:57 ` Tom Tromey
2012-01-02 19:49 ` Pedro Alves
2012-01-19 16:24 ` Call target_close after unpushing, not before (was: Re: [patch] Fix remote.c crash on gdbserver close (+fix py-finish-breakpoint.exp for gdbserver)) Pedro Alves
2012-01-19 16:27 ` Jan Kratochvil
2012-01-19 16:37 ` Call target_close after unpushing, not before Pedro Alves
2012-01-19 16:53 ` [commit] Re: Call target_close after unpushing, not before (was: Re: [patch] Fix remote.c crash on gdbserver close (+fix py-finish-breakpoint.exp for gdbserver)) Jan Kratochvil
2012-01-04 14:49 ` [RFC] Python Finish Breakpoints Ulrich Weigand
2012-01-04 15:24 ` Kevin Pouget
2012-01-04 16:29 ` Ulrich Weigand
2012-01-04 16:42 ` Tom Tromey
2012-01-04 16:40 ` Tom Tromey
2012-01-04 17:13 ` Ulrich Weigand
2012-01-09 9:21 ` Kevin Pouget
2012-01-27 17:01 ` Kevin Pouget [this message]
2011-10-28 19:26 ` Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAPftXUKwmsKjv4uVUqekarhHZkwYVaf+afEZGxxAtXv3bjqWeg@mail.gmail.com \
--to=kevin.pouget@gmail.com \
--cc=gdb-patches@sourceware.org \
--cc=tromey@redhat.com \
--cc=uweigand@de.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).