public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Andrew Burgess <aburgess@redhat.com>
To: Pedro Alves <pedro@palves.net>, gdb-patches@sourceware.org
Subject: Re: [PATCHv5 05/11] gdb: don't always print breakpoint location after failed condition check
Date: Thu, 03 Aug 2023 14:57:32 +0100	[thread overview]
Message-ID: <87h6pgdy9f.fsf@redhat.com> (raw)
In-Reply-To: <a02cef7d-1af6-45f2-9b4c-44fad993283d@palves.net>

Pedro Alves <pedro@palves.net> writes:

> Hi!
>
> Overall this looks good.  Some nits below.
>
> On 2023-07-14 13:17, Andrew Burgess wrote:
>
>> commit bd3309a50423114c2cb31241500820efa21d0452
>> Author: Andrew Burgess <aburgess@redhat.com>
>> Date:   Wed Jul 12 21:56:50 2023 +0100
>> 
>>     gdb: avoid double stop after failed breakpoint condition check
>>     
>>     This commit replaces this earlier commit:
>>     
>>       commit 2e411b8c68eb2b035b31d5b00d940d4be1a0928b
>>       Date:   Fri Oct 14 14:53:15 2022 +0100
>>     
>>           gdb: don't always print breakpoint location after failed condition check
>>     
>>     and is a result of feedback received here[1].
>>     
>>     The original commit addressed a problem where, if a breakpoint
>>     condition included an inferior function call, and if the inferior
>>     function call fail, then GDB would announce the stop twice.  Here's an
>
> "fail" -> "failed" or "fails", I guess.
>
>>     example of GDB's output before the above commit that shows the problem
>>     being addressed:
>>     
>>       (gdb) break foo if (some_func ())
>>       Breakpoint 1 at 0x40111e: file bpcond.c, line 11.
>>       (gdb) r
>>       Starting program: /tmp/bpcond
>>     
>>       Program received signal SIGSEGV, Segmentation fault.
>>       0x0000000000401116 in some_func () at bpcond.c:5
>>       5       return *p;
>>       Error in testing condition for breakpoint 1:
>>       The program being debugged stopped while in a function called from GDB.
>>       Evaluation of the expression containing the function
>>       (some_func) will be abandoned.
>>       When the function is done executing, GDB will silently stop.
>>     
>>       Breakpoint 1, 0x0000000000401116 in some_func () at bpcond.c:5
>>       5       return *p;
>>       (gdb)
>>     
>>     The original commit addressed this issue in breakpoint.c, by spotting
>>     that the $pc had changed while evaluating the breakpoint condition,
>>     and inferring from this that GDB must have stopped elsewhere.
>>     
>>     However, the way in which the original commit suppressed the second
>>     stop announcement was to set bpstat::print to true -- this tells GDB
>>     not to print the frame during the stop announcement, and for the CLI
>>     this is fine, however, it was pointed out that for the MI this still
>>     isn't really enough.  Below is an example from an MI session after the
>>     above commit was applied, this shows the problem with the above
>>     commit:
>>     
>>       -break-insert -c "cond_fail()" foo
>>       ^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x000000000040111e",func="foo",file="/tmp/mi-condbreak-fail.c",line="30",thread-groups=["i1"],cond="cond_fail()",times="0",original-location="foo"}
>>       (gdb)
>>       -exec-run
>>       =thread-group-started,id="i1",pid="2636270"
>>       =thread-created,id="1",group-id="i1"
>>       =library-loaded,id="/lib64/ld-linux-x86-64.so.2",target-name="/lib64/ld-linux-x86-64.so.2",host-name="/lib64/ld-linux-x86-64.so.2",symbols-loaded="0",thread-group="i1",ranges=[{from="0x00007ffff7fd3110",to="0x00007ffff7ff2bb4"}]
>>       ^running
>>       *running,thread-id="all"
>>       (gdb)
>>       =library-loaded,id="/lib64/libm.so.6",target-name="/lib64/libm.so.6",host-name="/lib64/libm.so.6",symbols-loaded="0",thread-group="i1",ranges=[{from="0x00007ffff7e59390",to="0x00007ffff7ef4f98"}]
>>       =library-loaded,id="/lib64/libc.so.6",target-name="/lib64/libc.so.6",host-name="/lib64/libc.so.6",symbols-loaded="0",thread-group="i1",ranges=[{from="0x00007ffff7ca66b0",to="0x00007ffff7df3c5f"}]
>>       ~"\nProgram"
>>       ~" received signal SIGSEGV, Segmentation fault.\n"
>>       ~"0x0000000000401116 in cond_fail () at /tmp/mi-condbreak-fail.c:24\n"
>>       ~"24\t  return *p;\t\t\t/* Crash here.  */\n"
>>       *stopped,reason="signal-received",signal-name="SIGSEGV",signal-meaning="Segmentation fault",frame={addr="0x0000000000401116",func="cond_fail",args=[],file="/tmp/mi-condbreak-fail.c",fullname="/tmp/mi-condbreak-fail.c",line="24",arch="i386:x86-64"},thread-id="1",stopped-threads="all",core="9"
>>       &"Error in testing condition for breakpoint 1:\n"
>>       &"The program being debugged was signaled while in a function called from GDB.\n"
>>       &"GDB remains in the frame where the signal was received.\n"
>>       &"To change this behavior use \"set unwindonsignal on\".\n"
>>       &"Evaluation of the expression containing the function\n"
>>       &"(cond_fail) will be abandoned.\n"
>>       &"When the function is done executing, GDB will silently stop.\n"
>>       =breakpoint-modified,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x000000000040111e",func="foo",file="/tmp/mi-condbreak-fail.c",fullname="/tmp/mi-condbreak-fail.c",line="30",thread-groups=["i1"],cond="cond_fail()",times="1",original-location="foo"}
>>       *stopped
>>       (gdb)
>>     
>>     Notice that we still see two '*stopped' lines, the first includes the
>>     full frame information, while the second has no frame information,
>>     this is a result of bpstat::print having been set.  Ideally, the
>>     second '*stopped' line should not be present.
>>     
>>     By setting bpstat::print I was addressing the problem too late, this
>>     flag really only changes how interp::on_normal_stop prints the stop
>>     event, and interp::on_normal_stop is called (indirectly) from the
>>     normal_stop function in infrun.c.  A better solution is to avoid
>>     calling normal_stop at all for the stops which should not be reported
>>     to the user, and this is what I do in this commit.
>>     
>>     This commit has 3 parts:
>>     
>>       1. In breakpoint.c, revert the above commit,
>>     
>>       2. In fetch_inferior_event (infrun.c), capture the stop-id before
>>       calling handle_inferior_event.  If, after calling
>>       handle_inferior_event, the stop-id has changed, then this indicates
>>       that somewhere within handle_inferior_event, a stop was announced to
>>       the user.  If this is the case then GDB should not call normal_stop,
>>       and we should rely on whoever announced the stop to ensure that we
>>       are in a PROMPT_NEEDED state, which means the prompt will be
>>       displayed once fetch_inferior_event returns.  And,
>>     
>>       3. In infcall.c, do two things:
>>     
>>          (a) In run_inferior_call, after making the inferior call, ensure
>>          that either async_disable_stdin or async_enable_stdin is called
>>          to put the prompt state, and stdin handling into the correct
>>          state based on whether the inferior call completed successfully
>>          or not, and
>>     
>>          (b) In call_thread_fsm::should_stop, call async_enable_stdin
>>          rather than changing the prompt state directly.  This isn't
>>          strictly necessary, but helped me understand this code more.
>>          This async_enable_stdin call is only reached if normal_stop is
>>          not going to be called, and replaces the async_enable_stdin call
>>          that exists in normal_stop.  Though we could just adjust the
>>          prompt state if felt (to me) much easier to understand when I
>>          could see this call and the corresponding call in normal_stop.
>>     
>>     With these changes in place now, when the inferior call (from the
>>     breakpoint condition) fails, infcall.c leaves the prompt state as
>>     PROMPT_NEEDED, and leaves stdin registered with the event loop.
>>     
>>     Back in fetch_inferior_event GDB notices that the stop-id has changed
>>     and so avoids calling normal_stop.
>>     
>>     And on return from fetch_inferior_event GDB will display the prompt
>>     and handle input from stdin.
>>     
>>     As normal_stop is not called the MI problem is solved, and the test
>>     added in the earlier mentioned commit still passes just fine, so the
>>     CLI has not regressed.
>>     
>>     [1] https://inbox.sourceware.org/gdb-patches/6fd4aa13-6003-2563-5841-e80d5a55d59e@palves.net/
>> 
>> diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
>> index d898167b7e1..93634bd7e51 100644
>> --- a/gdb/breakpoint.c
>> +++ b/gdb/breakpoint.c
>> @@ -5535,7 +5535,6 @@ bpstat_check_breakpoint_conditions (bpstat *bs, thread_info *thread)
>>  	  else
>>  	    within_current_scope = false;
>>  	}
>> -      CORE_ADDR pc_before_check = get_frame_pc (get_selected_frame (nullptr));
>>        if (within_current_scope)
>>  	{
>>  	  try
>> @@ -5555,17 +5554,6 @@ bpstat_check_breakpoint_conditions (bpstat *bs, thread_info *thread)
>>  		  (gdb_stderr, ex,
>>  		   "Error in testing condition for breakpoint %d:\n",
>>  		   b->number);
>> -
>> -	      /* If the pc value changed as a result of evaluating the
>> -		 condition then we probably stopped within an inferior
>> -		 function call due to some unexpected stop, e.g. the thread
>> -		 hit another breakpoint, or the thread received an
>> -		 unexpected signal.  In this case we don't want to also
>> -		 print the information about this breakpoint.  */
>> -	      CORE_ADDR pc_after_check
>> -		= get_frame_pc (get_selected_frame (nullptr));
>> -	      if (pc_before_check != pc_after_check)
>> -		bs->print = 0;
>>  	    }
>>  	}
>>        else
>> diff --git a/gdb/infcall.c b/gdb/infcall.c
>> index ddf325a62a5..0944097e18d 100644
>> --- a/gdb/infcall.c
>> +++ b/gdb/infcall.c
>> @@ -564,10 +564,13 @@ call_thread_fsm::should_stop (struct thread_info *thread)
>>  	 call..  */
>>        return_value = get_call_return_value (&return_meta_info);
>>  
>> -      /* Break out of wait_sync_command_done.  */
>> +      /* Break out of wait_sync_command_done.  This is similar to the
>> +	 async_enable_stdin call in normal_stop (which we don't call),
>> +	 however, in this case we only change the WAITING_UI, this is
>
> Full stop after WAITING_UI.
>
>> +	 enough for wait_sync_command_done.  */
>>        scoped_restore save_ui = make_scoped_restore (&current_ui, waiting_ui);
>> -      target_terminal::ours ();
>> -      waiting_ui->prompt_state = PROMPT_NEEDED;
>> +      gdb_assert (current_ui->prompt_state == PROMPT_BLOCKED);
>> +      async_enable_stdin ();
>>      }
>>  
>>    return true;
>> @@ -661,14 +664,30 @@ run_inferior_call (std::unique_ptr<call_thread_fsm> sm,
>>    infcall_debug_printf ("thread is now: %s",
>>  			inferior_ptid.to_string ().c_str ());
>>  
>> -  /* If GDB has the prompt blocked before, then ensure that it remains
>> -     so.  normal_stop calls async_enable_stdin, so reset the prompt
>> -     state again here.  In other cases, stdin will be re-enabled by
>> -     inferior_event_handler, when an exception is thrown.  */
>> +  /* After the inferior call async_enable_stdin has been called, either
>> +     from normal_stop or from call_thread_fsm::should_stop, and the prompt
>> +     state has been restored by the scoped_restore in the try block above.
>
> It took me several reads to understand this comment.  I kept misreading this
> as "After ... async_enable_stdin has been called, then ..."
>
> I think putting a comma here
>
>  /* After the inferior call, async_enable_stdin has been called, either
>                           ^^^
>
> would have helped me.  Maybe even say:
>
>    "After the inferior call finishes, ".
>
> ?
>
>> +
>> +     If the inferior call finished successfully then we should disable
>> +     stdin as we don't know yet whether the inferior will be stopping,
>
> The last comma should be a period, IMO.
>
>> +     calling async_disable_stdin restores things as they were when this
>> +     function was called.
>
> "restores things as they were" -> "restores things to how they were" ?
>
>> +
>> +     If the inferior call didn't complete successfully then normal_stop has
>
> Comma before "then".
>
>> +     already been called, and we know for sure that we are going to present
>> +     this stop to the user, in this case we call async_enable_stdin, this
>
> Period after "the user" instead of comma.  Comma after "this case".
> Also period after async_enable_stdin; alternatively, say "which" instead of
> "this".
>
>> +     changes the prompt state to PROMPT_NEEDED.
>> +
>> +     If the previous prompt state was PROMPT_NEEDED then, as
>
> I think you mean to put the comma before "then" instead of after?
> Or is this "then" refering to some previously-referred-to situation?
>
>> +     async_enable_stdin has already been called, nothing additional needs
>> +     to be done here.  */
>
> I found it much easier to understand the whole comment block without applying
> my suggestions above locally.  Here is the result for your reference, and to
> double check I'm parsing this all correctly:
>
>   /* After the inferior call finished, async_enable_stdin has been
>      called, either from normal_stop or from
>      call_thread_fsm::should_stop, and the prompt state has been
>      restored by the scoped_restore in the try block above.
>
>      If the inferior call finished successfully, then we should
>      disable stdin as we don't know yet whether the inferior will be
>      stopping.  Calling async_disable_stdin restores things to how
>      they were when this function was called.
>
>      If the inferior call didn't complete successfully, then
>      normal_stop has already been called, and we know for sure that we
>      are going to present this stop to the user.  In this case, we
>      call async_enable_stdin.  This changes the prompt state to
>      PROMPT_NEEDED.
>
>      If the previous prompt state was PROMPT_NEEDED, then as
>      async_enable_stdin has already been called, nothing additional
>      needs to be done here.  */
>
>
>>    if (current_ui->prompt_state == PROMPT_BLOCKED)
>> -    current_ui->unregister_file_handler ();
>> -  else
>> -    current_ui->register_file_handler ();
>> +    {
>> +      if (call_thread->thread_fsm ()->finished_p ())
>> +	async_disable_stdin ();
>> +      else
>> +	async_enable_stdin ();
>> +    }
>>  
>>    /* If the infcall does NOT succeed, normal_stop will have already
>>       finished the thread states.  However, on success, normal_stop
>> diff --git a/gdb/infrun.c b/gdb/infrun.c
>> index 58da1cef29e..95ab7c6f7dc 100644
>> --- a/gdb/infrun.c
>> +++ b/gdb/infrun.c
>> @@ -4395,6 +4395,8 @@ fetch_inferior_event ()
>>      auto defer_delete_threads
>>        = make_scope_exit (delete_just_stopped_threads_infrun_breakpoints);
>>  
>> +    int stop_id = get_stop_id ();
>> +
>>      /* Now figure out what to do with the result of the result.  */
>>      handle_inferior_event (&ecs);
>>  
>> @@ -4422,7 +4424,19 @@ fetch_inferior_event ()
>>  
>>  	    clean_up_just_stopped_threads_fsms (&ecs);
>>  
>> -	    if (thr != nullptr && thr->thread_fsm () != nullptr)
>> +	    if (stop_id != get_stop_id ())
>> +	      {
>> +		/* If the stop-id has changed then a stop has already been
>> +		   presented to the user in handle_inferior_event, this is
>> +		   likely a failed inferior call.  As the stop has already
>> +		   been announced then we should not notify again.
>> +
>> +		   Also, if the prompt state is not PROMPT_NEEDED then GDB
>> +		   will not be ready for user input after this function.  */
>> +		should_notify_stop = false;
>> +		gdb_assert (current_ui->prompt_state == PROMPT_NEEDED);
>> +	      }
>> +	    else if (thr != nullptr && thr->thread_fsm () != nullptr)
>>  	      should_notify_stop
>>  	       = thr->thread_fsm ()->should_notify_stop ();
>>  
>> diff --git a/gdb/testsuite/gdb.mi/mi-condbreak-fail.c b/gdb/testsuite/gdb.mi/mi-condbreak-fail.c
>> new file mode 100644
>> index 00000000000..94bd2484934
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.mi/mi-condbreak-fail.c
>> @@ -0,0 +1,39 @@
>> +/* Copyright 2023 Free Software Foundation, Inc.
>> +
>> +   This file is part of GDB.
>> +
>> +   This program is free software; you can redistribute it and/or modify
>> +   it under the terms of the GNU General Public License as published by
>> +   the Free Software Foundation; either version 3 of the License, or
>> +   (at your option) any later version.
>> +
>> +   This program is distributed in the hope that it will be useful,
>> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +   GNU General Public License for more details.
>> +
>> +   You should have received a copy of the GNU General Public License
>> +   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
>> +
>> +volatile int global_counter = 0;
>> +
>> +int
>> +cond_fail ()
>> +{
>> +  volatile int *p = 0;
>> +  return *p;			/* Crash here.  */
>> +}
>> +
>> +int
>> +foo ()
>> +{
>> +  global_counter += 1;		/* Set breakpoint here.  */
>> +  return 0;
>> +}
>> +
>> +int
>> +main ()
>> +{
>> +  int res = foo ();
>> +  return res;
>> +}
>> diff --git a/gdb/testsuite/gdb.mi/mi-condbreak-fail.exp b/gdb/testsuite/gdb.mi/mi-condbreak-fail.exp
>> new file mode 100644
>> index 00000000000..86b1db5a8dd
>> --- /dev/null
>> +++ b/gdb/testsuite/gdb.mi/mi-condbreak-fail.exp
>> @@ -0,0 +1,67 @@
>> +# Copyright (C) 2023 Free Software Foundation, Inc.
>> +
>> +# This program is free software; you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation; either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> +
>> +# Check that when GDB fails to evaluate the condition of a conditional
>> +# breakpoint we only get one *stopped message.
>
> "message" -> "async record" or "notification".
>
>> +
>> +load_lib mi-support.exp
>> +set MIFLAGS "-i=mi"
>> +
>> +standard_testfile
>> +
>> +if [build_executable ${testfile}.exp ${binfile} ${srcfile}] {
>> +    return -1
>> +}
>> +
>> +if {[mi_clean_restart $binfile]} {
>> +    return
>> +}
>> +
>> +if {[mi_runto_main] == -1} {
>> +    return
>> +}
>> +
>> +# Create the conditional breakpoint.
>> +set bp_location [gdb_get_line_number "Set breakpoint here"]
>> +mi_create_breakpoint "-c \"cond_fail ()\" $srcfile:$bp_location" \
>> +    "insert conditional breakpoint" \
>> +    -func foo -file ".*$srcfile" -line "$bp_location" \
>> +    -cond "cond_fail \\(\\)"
>> +
>> +# Number of the previous breakpoint.
>> +set bpnum [mi_get_valueof "/d" "\$bpnum" "INVALID" \
>> +	       "get number for breakpoint"]
>> +
>> +# The line where we expect the inferior to crash.
>> +set crash_linenum [gdb_get_line_number "Crash here"]
>> +
>> +# Run the inferior and wait for it to stop.
>> +mi_send_resuming_command "exec-continue" "continue the inferior"
>> +mi_gdb_test "" \
>> +    [multi_line \
>> +	 "~\"\\\\nProgram\"" \
>> +	 "~\" received signal SIGSEGV, Segmentation fault\\.\\\\n\"" \
>> +	 "~\"$hex in cond_fail \\(\\) at \[^\r\n\]+\"" \
>> +	 "~\"${crash_linenum}\\\\t\\s+return \\*p;\[^\r\n\]+\\\\n\"" \
>> +	 "\\*stopped,reason=\"signal-received\",signal-name=\"SIGSEGV\"\[^\r\n\]+" \
>> +	 "&\"Error in testing condition for breakpoint $bpnum:\\\\n\"" \
>> +	 "&\"The program being debugged was signaled while in a function called from GDB\\.\\\\n\"" \
>> +	 "&\"GDB remains in the frame where the signal was received\\.\\\\n\"" \
>> +	 "&\"To change this behavior use \\\\\"set unwindonsignal on\\\\\"\\.\\\\n\"" \
>> +	 "&\"Evaluation of the expression containing the function\\\\n\"" \
>> +	 "&\"\\(cond_fail\\) will be abandoned\\.\\\\n\"" \
>> +	 "&\"When the function is done executing, GDB will silently stop\\.\\\\n\"" \
>> +	 "=breakpoint-modified,bkpt={number=\"$bpnum\",type=\"breakpoint\",.*}"] \
>
> I wonder about matching times="1" too, to confirm we're incrementing the hit
> count even if the condition fails.
>
> Also, that ".*" in the last line gave me pause.  It makes it so that a future
> change that results in an output like:
>
>   =breakpoint-modified,bkpt={number=\"$bpnum\",type=\"breakpoint\", [snip]
>   *stopped
>   =something-else-that-ends-in-curly-braces,{...}
>
> would still pass.  Maybe use "\[^\r\n\]*" instead.
>
> With the nits fixed, this LGTM.

I made the fixes you suggested and pushed this patch.

Thanks,
Andrew


  reply	other threads:[~2023-08-03 13:57 UTC|newest]

Thread overview: 202+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-21  8:43 [PATCH 00/12] Infcalls from B/P conditions in multi-threaded inferiors Andrew Burgess
2022-10-21  8:43 ` [PATCH 01/12] gdb: int to bool conversion for normal_stop Andrew Burgess
2022-11-04 12:20   ` Lancelot SIX
2023-01-13 16:35     ` Andrew Burgess
2022-10-21  8:43 ` [PATCH 02/12] gdb/infrun: add debug print in print_signal_received_reason Andrew Burgess
2023-01-13 16:38   ` Andrew Burgess
2022-10-21  8:43 ` [PATCH 03/12] gdb: include breakpoint number in testing condition error message Andrew Burgess
2022-10-21  8:43 ` [PATCH 04/12] gdbserver: add comments to read_inferior_memory function Andrew Burgess
2023-01-13 16:42   ` Andrew Burgess
2022-10-21  8:43 ` [PATCH 05/12] gdbserver: allows agent_mem_read to return an error code Andrew Burgess
2022-10-21  8:43 ` [PATCH 06/12] gdbserver: allow agent expressions to fail with invalid memory access Andrew Burgess
2022-10-21  8:43 ` [PATCH 07/12] gdb: avoid repeated signal reporting during failed conditional breakpoint Andrew Burgess
2022-10-21  8:43 ` [PATCH 08/12] gdb: don't always print breakpoint location after failed condition check Andrew Burgess
2022-10-21  8:43 ` [PATCH 09/12] Revert "gdb: remove unnecessary parameter wait_ptid from do_target_wait" Andrew Burgess
2022-10-21  8:43 ` [PATCH 10/12] gdb: fix b/p conditions with infcalls in multi-threaded inferiors Andrew Burgess
2022-10-21  8:43 ` [PATCH 11/12] gdb: add timeouts for inferior function calls Andrew Burgess
2022-10-21 11:08   ` Eli Zaretskii
2023-01-14 11:00     ` Andrew Burgess
2023-01-14 11:48       ` Eli Zaretskii
2023-01-16 17:22         ` Andrew Burgess
2023-01-16 17:27           ` Eli Zaretskii
2022-11-04 23:17   ` Lancelot SIX
2023-01-13 16:49     ` Andrew Burgess
2023-01-16  9:44       ` Lancelot SIX
2022-10-21  8:43 ` [PATCH 12/12] gdb/remote: avoid SIGINT after calling remote_target::stop Andrew Burgess
2023-01-18 16:17 ` [PATCHv2 00/13] Infcalls from B/P conditions in multi-threaded inferiors Andrew Burgess
2023-01-18 16:17   ` [PATCHv2 01/13] gdb/doc: extended documentation for inferior function calls Andrew Burgess
2023-01-18 17:20     ` Eli Zaretskii
2023-03-16 17:15       ` Andrew Burgess
2023-01-19  9:00     ` Aktemur, Tankut Baris
2023-01-18 16:17   ` [PATCHv2 02/13] gdb/doc: extend the documentation for conditional breakpoints Andrew Burgess
2023-01-18 17:22     ` Eli Zaretskii
2023-01-19  9:04     ` Aktemur, Tankut Baris
2023-01-19 10:07       ` Eli Zaretskii
2023-01-18 16:17   ` [PATCHv2 03/13] gdb: include breakpoint number in testing condition error message Andrew Burgess
2023-01-19  9:54     ` Aktemur, Tankut Baris
2023-01-19 10:54     ` Aktemur, Tankut Baris
2023-01-19 11:34       ` Eli Zaretskii
2023-01-20  9:46         ` Aktemur, Tankut Baris
2023-01-25 16:49           ` Andrew Burgess
2023-01-25 17:09             ` Eli Zaretskii
2023-01-18 16:18   ` [PATCHv2 04/13] gdbserver: allows agent_mem_read to return an error code Andrew Burgess
2023-01-19  9:59     ` Aktemur, Tankut Baris
2023-01-18 16:18   ` [PATCHv2 05/13] gdbserver: allow agent expressions to fail with invalid memory access Andrew Burgess
2023-01-19 10:13     ` Aktemur, Tankut Baris
2023-01-18 16:18   ` [PATCHv2 06/13] gdb: avoid repeated signal reporting during failed conditional breakpoint Andrew Burgess
2023-01-19 10:33     ` Aktemur, Tankut Baris
2023-01-18 16:18   ` [PATCHv2 07/13] gdb: don't always print breakpoint location after failed condition check Andrew Burgess
2023-01-19 10:49     ` Aktemur, Tankut Baris
2023-01-18 16:18   ` [PATCHv2 08/13] Revert "gdb: remove unnecessary parameter wait_ptid from do_target_wait" Andrew Burgess
2023-01-19 11:05     ` Aktemur, Tankut Baris
2023-01-18 16:18   ` [PATCHv2 09/13] gdb: fix b/p conditions with infcalls in multi-threaded inferiors Andrew Burgess
2023-01-20  7:13     ` Aktemur, Tankut Baris
2023-01-18 16:18   ` [PATCHv2 10/13] gdb: add timeouts for inferior function calls Andrew Burgess
2023-01-18 17:30     ` Eli Zaretskii
2023-01-20  8:50     ` Aktemur, Tankut Baris
2023-01-18 16:18   ` [PATCHv2 11/13] gdb/remote: avoid SIGINT after calling remote_target::stop Andrew Burgess
2023-01-20  9:14     ` Aktemur, Tankut Baris
2023-01-18 16:18   ` [PATCHv2 12/13] gdb: introduce unwind-on-timeout setting Andrew Burgess
2023-01-18 17:33     ` Eli Zaretskii
2023-01-20  9:26     ` Aktemur, Tankut Baris
2023-01-18 16:18   ` [PATCHv2 13/13] gdb: rename unwindonsignal to unwind-on-signal Andrew Burgess
2023-01-18 17:35     ` Eli Zaretskii
2023-01-20  9:34   ` [PATCHv2 00/13] Infcalls from B/P conditions in multi-threaded inferiors Aktemur, Tankut Baris
2023-01-25 15:53     ` Andrew Burgess
2023-02-16 11:09       ` Aktemur, Tankut Baris
2023-01-31 17:27   ` [PATCHv3 " Andrew Burgess
2023-01-31 17:27     ` [PATCHv3 01/13] gdb/doc: extended documentation for inferior function calls Andrew Burgess
2023-01-31 17:27     ` [PATCHv3 02/13] gdb/doc: extend the documentation for conditional breakpoints Andrew Burgess
2023-01-31 18:07       ` Eli Zaretskii
2023-02-01 17:47         ` Andrew Burgess
2023-02-01 18:25           ` Eli Zaretskii
2023-02-02 13:34             ` Andrew Burgess
2023-01-31 17:27     ` [PATCHv3 03/13] gdb: include breakpoint number in testing condition error message Andrew Burgess
2023-02-16 10:15       ` Aktemur, Tankut Baris
2023-01-31 17:27     ` [PATCHv3 04/13] gdbserver: allows agent_mem_read to return an error code Andrew Burgess
2023-01-31 17:27     ` [PATCHv3 05/13] gdbserver: allow agent expressions to fail with invalid memory access Andrew Burgess
2023-02-16 10:29       ` Aktemur, Tankut Baris
2023-01-31 17:27     ` [PATCHv3 06/13] gdb: avoid repeated signal reporting during failed conditional breakpoint Andrew Burgess
2023-01-31 17:27     ` [PATCHv3 07/13] gdb: don't always print breakpoint location after failed condition check Andrew Burgess
2023-01-31 17:27     ` [PATCHv3 08/13] Revert "gdb: remove unnecessary parameter wait_ptid from do_target_wait" Andrew Burgess
2023-01-31 17:27     ` [PATCHv3 09/13] gdb: fix b/p conditions with infcalls in multi-threaded inferiors Andrew Burgess
2023-02-16 10:47       ` Aktemur, Tankut Baris
2023-01-31 17:27     ` [PATCHv3 10/13] gdb: add timeouts for inferior function calls Andrew Burgess
2023-01-31 18:11       ` Eli Zaretskii
2023-02-01 17:50         ` Andrew Burgess
2023-02-01 18:29           ` Eli Zaretskii
2023-02-16 10:53       ` Aktemur, Tankut Baris
2023-01-31 17:27     ` [PATCHv3 11/13] gdb/remote: avoid SIGINT after calling remote_target::stop Andrew Burgess
2023-01-31 17:27     ` [PATCHv3 12/13] gdb: introduce unwind-on-timeout setting Andrew Burgess
2023-01-31 18:09       ` Eli Zaretskii
2023-02-16 11:01       ` Aktemur, Tankut Baris
2023-01-31 17:27     ` [PATCHv3 13/13] gdb: rename unwindonsignal to unwind-on-signal Andrew Burgess
2023-01-31 18:12       ` Eli Zaretskii
2023-02-28 16:42     ` [PATCHv4 00/12] Infcalls from B/P conditions in multi-threaded inferiors Andrew Burgess
2023-02-28 16:42       ` [PATCHv4 01/12] gdb/doc: extended documentation for inferior function calls Andrew Burgess
2024-03-21  9:03         ` Tom de Vries
2024-03-21  9:11           ` Tom de Vries
2023-02-28 16:42       ` [PATCHv4 02/12] gdb: include breakpoint number in testing condition error message Andrew Burgess
2023-02-28 16:42       ` [PATCHv4 03/12] gdbserver: allows agent_mem_read to return an error code Andrew Burgess
2023-02-28 16:42       ` [PATCHv4 04/12] gdbserver: allow agent expressions to fail with invalid memory access Andrew Burgess
2023-02-28 16:42       ` [PATCHv4 05/12] gdb: avoid repeated signal reporting during failed conditional breakpoint Andrew Burgess
2023-02-28 16:42       ` [PATCHv4 06/12] gdb: don't always print breakpoint location after failed condition check Andrew Burgess
2023-02-28 16:42       ` [PATCHv4 07/12] Revert "gdb: remove unnecessary parameter wait_ptid from do_target_wait" Andrew Burgess
2023-02-28 16:42       ` [PATCHv4 08/12] gdb: fix b/p conditions with infcalls in multi-threaded inferiors Andrew Burgess
2023-02-28 16:42       ` [PATCHv4 09/12] gdb: add timeouts for inferior function calls Andrew Burgess
2023-02-28 16:42       ` [PATCHv4 10/12] gdb/remote: avoid SIGINT after calling remote_target::stop Andrew Burgess
2023-02-28 16:42       ` [PATCHv4 11/12] gdb: introduce unwind-on-timeout setting Andrew Burgess
2023-02-28 16:42       ` [PATCHv4 12/12] gdb: rename unwindonsignal to unwind-on-signal Andrew Burgess
2023-03-16 17:36       ` [PATCHv5 00/11] Infcalls from B/P conditions in multi-threaded inferiors Andrew Burgess
2023-03-16 17:36         ` [PATCHv5 01/11] gdb: include breakpoint number in testing condition error message Andrew Burgess
2023-04-03 13:50           ` Andrew Burgess
2023-07-07 12:08           ` Pedro Alves
2023-07-07 15:43             ` Andrew Burgess
2023-07-07 16:19               ` Pedro Alves
2023-07-10 10:30                 ` Andrew Burgess
2023-03-16 17:36         ` [PATCHv5 02/11] gdbserver: allows agent_mem_read to return an error code Andrew Burgess
2023-04-03 13:50           ` Andrew Burgess
2023-03-16 17:36         ` [PATCHv5 03/11] gdbserver: allow agent expressions to fail with invalid memory access Andrew Burgess
2023-04-03 13:50           ` Andrew Burgess
2023-07-07 12:25           ` Pedro Alves
2023-07-07 16:28             ` Andrew Burgess
2023-07-07 17:26               ` Pedro Alves
2023-07-07 21:19                 ` Andrew Burgess
2023-07-10 10:32                 ` Andrew Burgess
2023-07-10 10:44                   ` Pedro Alves
2023-07-10 13:44                     ` Andrew Burgess
2023-03-16 17:36         ` [PATCHv5 04/11] gdb: avoid repeated signal reporting during failed conditional breakpoint Andrew Burgess
2023-04-03 13:50           ` Andrew Burgess
2023-03-16 17:37         ` [PATCHv5 05/11] gdb: don't always print breakpoint location after failed condition check Andrew Burgess
2023-04-03 13:51           ` Andrew Burgess
2023-07-07 15:20           ` Pedro Alves
2023-07-07 15:24             ` Pedro Alves
2023-07-07 21:18               ` Andrew Burgess
2023-07-11 12:06                 ` Pedro Alves
2023-07-14 12:17                   ` Andrew Burgess
2023-07-17 17:17                     ` Pedro Alves
2023-08-03 13:57                       ` Andrew Burgess [this message]
2023-03-16 17:37         ` [PATCHv5 06/11] Revert "gdb: remove unnecessary parameter wait_ptid from do_target_wait" Andrew Burgess
2023-03-16 17:37         ` [PATCHv5 07/11] gdb: fix b/p conditions with infcalls in multi-threaded inferiors Andrew Burgess
2023-03-16 17:37         ` [PATCHv5 08/11] gdb: add timeouts for inferior function calls Andrew Burgess
2023-03-16 17:37         ` [PATCHv5 09/11] gdb/remote: avoid SIGINT after calling remote_target::stop Andrew Burgess
2023-03-16 17:37         ` [PATCHv5 10/11] gdb: introduce unwind-on-timeout setting Andrew Burgess
2023-03-16 17:37         ` [PATCHv5 11/11] gdb: rename unwindonsignal to unwind-on-signal Andrew Burgess
2023-04-03 14:01         ` [PATCHv6 0/6] Infcalls from B/P conditions in multi-threaded inferiors Andrew Burgess
2023-04-03 14:01           ` [PATCHv6 1/6] Revert "gdb: remove unnecessary parameter wait_ptid from do_target_wait" Andrew Burgess
2023-04-03 14:01           ` [PATCHv6 2/6] gdb: fix b/p conditions with infcalls in multi-threaded inferiors Andrew Burgess
2023-04-03 14:01           ` [PATCHv6 3/6] gdb: add timeouts for inferior function calls Andrew Burgess
2023-07-11 14:23             ` Pedro Alves
2023-07-14 15:20               ` Andrew Burgess
2023-07-14 19:52                 ` Andrew Burgess
2023-04-03 14:01           ` [PATCHv6 4/6] gdb/remote: avoid SIGINT after calling remote_target::stop Andrew Burgess
2023-04-03 14:01           ` [PATCHv6 5/6] gdb: introduce unwind-on-timeout setting Andrew Burgess
2023-04-03 14:01           ` [PATCHv6 6/6] gdb: rename unwindonsignal to unwind-on-signal Andrew Burgess
2023-05-15 19:22           ` [PATCHv7 0/6] Infcalls from B/P conditions in multi-threaded inferiors Andrew Burgess
2023-05-15 19:22             ` [PATCHv7 1/6] Revert "gdb: remove unnecessary parameter wait_ptid from do_target_wait" Andrew Burgess
2023-05-16 15:08               ` Aktemur, Tankut Baris
2023-05-15 19:22             ` [PATCHv7 2/6] gdb: fix b/p conditions with infcalls in multi-threaded inferiors Andrew Burgess
2023-05-16 15:09               ` Aktemur, Tankut Baris
2023-06-05 13:53                 ` Andrew Burgess
2023-05-15 19:22             ` [PATCHv7 3/6] gdb: add timeouts for inferior function calls Andrew Burgess
2023-05-16 15:42               ` Aktemur, Tankut Baris
2023-06-05 13:54                 ` Andrew Burgess
2023-05-15 19:22             ` [PATCHv7 4/6] gdb/remote: avoid SIGINT after calling remote_target::stop Andrew Burgess
2023-05-16 16:00               ` Aktemur, Tankut Baris
2023-06-05 13:55                 ` Andrew Burgess
2023-05-15 19:22             ` [PATCHv7 5/6] gdb: introduce unwind-on-timeout setting Andrew Burgess
2023-05-15 19:22             ` [PATCHv7 6/6] gdb: rename unwindonsignal to unwind-on-signal Andrew Burgess
2023-06-07 10:01             ` [PATCHv8 0/6] Infcalls from B/P conditions in multi-threaded inferiors Andrew Burgess
2023-06-07 10:01               ` [PATCHv8 1/6] Revert "gdb: remove unnecessary parameter wait_ptid from do_target_wait" Andrew Burgess
2023-06-07 10:01               ` [PATCHv8 2/6] gdb: fix b/p conditions with infcalls in multi-threaded inferiors Andrew Burgess
2023-06-07 10:01               ` [PATCHv8 3/6] gdb: add timeouts for inferior function calls Andrew Burgess
2023-06-07 10:01               ` [PATCHv8 4/6] gdb/remote: avoid SIGINT after calling remote_target::stop Andrew Burgess
2023-07-07 17:18                 ` Pedro Alves
2023-07-10 20:04                   ` Andrew Burgess
2023-06-07 10:01               ` [PATCHv8 5/6] gdb: introduce unwind-on-timeout setting Andrew Burgess
2023-06-07 10:01               ` [PATCHv8 6/6] gdb: rename unwindonsignal to unwind-on-signal Andrew Burgess
2023-06-07 12:41                 ` Eli Zaretskii
2023-06-07 14:29                   ` Andrew Burgess
2023-06-07 15:31                     ` Eli Zaretskii
2023-07-04 11:20               ` [PATCHv8 0/6] Infcalls from B/P conditions in multi-threaded inferiors Andrew Burgess
2023-12-02 10:52               ` [PATCHv9 0/5] " Andrew Burgess
2023-12-02 10:52                 ` [PATCHv9 1/5] Revert "gdb: remove unnecessary parameter wait_ptid from do_target_wait" Andrew Burgess
2023-12-02 10:52                 ` [PATCHv9 2/5] gdb: fix b/p conditions with infcalls in multi-threaded inferiors Andrew Burgess
2023-12-02 10:52                 ` [PATCHv9 3/5] gdb: add timeouts for inferior function calls Andrew Burgess
2023-12-02 10:52                 ` [PATCHv9 4/5] gdb: introduce unwind-on-timeout setting Andrew Burgess
2023-12-02 10:52                 ` [PATCHv9 5/5] gdb: rename unwindonsignal to unwind-on-signal Andrew Burgess
2024-01-02 15:57                 ` [PATCHv10 0/5] Infcalls from B/P conditions in multi-threaded inferiors Andrew Burgess
2024-01-02 15:57                   ` [PATCHv10 1/5] Revert "gdb: remove unnecessary parameter wait_ptid from do_target_wait" Andrew Burgess
2024-01-02 15:57                   ` [PATCHv10 2/5] gdb: fix b/p conditions with infcalls in multi-threaded inferiors Andrew Burgess
2024-01-02 15:57                   ` [PATCHv10 3/5] gdb: add timeouts for inferior function calls Andrew Burgess
2024-01-02 15:57                   ` [PATCHv10 4/5] gdb: introduce unwind-on-timeout setting Andrew Burgess
2024-01-02 15:57                   ` [PATCHv10 5/5] gdb: rename unwindonsignal to unwind-on-signal Andrew Burgess
2024-03-05 15:40                   ` [PATCHv11 0/5] Infcalls from B/P conditions in multi-threaded inferiors Andrew Burgess
2024-03-05 15:40                     ` [PATCHv11 1/5] Revert "gdb: remove unnecessary parameter wait_ptid from do_target_wait" Andrew Burgess
2024-03-05 15:40                     ` [PATCHv11 2/5] gdb: fix b/p conditions with infcalls in multi-threaded inferiors Andrew Burgess
2024-03-05 15:40                     ` [PATCHv11 3/5] gdb: add timeouts for inferior function calls Andrew Burgess
2024-03-05 15:40                     ` [PATCHv11 4/5] gdb: introduce unwind-on-timeout setting Andrew Burgess
2024-03-05 15:40                     ` [PATCHv11 5/5] gdb: rename unwindonsignal to unwind-on-signal Andrew Burgess
2024-03-14 16:08                     ` [PATCHv11 0/5] Infcalls from B/P conditions in multi-threaded inferiors Keith Seitz
2024-03-15 13:26                     ` Luis Machado
2024-03-25 17:47                     ` Andrew Burgess

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=87h6pgdy9f.fsf@redhat.com \
    --to=aburgess@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=pedro@palves.net \
    /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).