public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Natalia Saiapova <natalia.saiapova@intel.com>
To: gdb-patches@sourceware.org
Subject: [PATCH v2 2/6] gdb/infrun: in condition evaluation resume only current thread.
Date: Fri,  9 Oct 2020 13:27:14 +0200	[thread overview]
Message-ID: <20201009112719.629-3-natalia.saiapova@intel.com> (raw)
In-Reply-To: <20201009112719.629-1-natalia.saiapova@intel.com>

When stopped at a conditional BP, GDB evaluates the condition for the
event thread in order to decide whether the thread should be stopped or
resumed.  Thus, if the condition includes an inferior call, during
the call not all threads have finalized state, some of them might
still be shown as running.  While executing the proceed for the inferior
call, GDB tries to resume all non-exited threads.  This leads to
the following assertion, when GDB tries to resume a running thread:

    (gdb) b 43 if foo()
    Breakpoint 1 at 0x119b: file main.c, line 43.
    (gdb) run
    Starting program: main
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
    [New Thread 0x7ffff77c4700 (LWP 21421)]
    [New Thread 0x7ffff6fc3700 (LWP 21422)]
    gdb/nat/x86-linux-dregs.c:146: internal-error: void x86_linux_update_debug_registers(lwp_info*): Assertion `lwp_is_stopped (lwp)' failed.
    A problem internal to GDB has been detected,
    further debugging may prove unreliable.

    This is a bug, please report it.  For instructions, see:
    <https://www.gnu.org/software/gdb/bugs/>.

This patch changes the behavior, so if the current thread is in the
middle of a condition evaluation, only the current thread is resumed.

gdb/ChangeLog:
2020-08-26  Natalia Saiapova  <natalia.saiapova@intel.com>
	    Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>

	* infrun.c (user_visible_resume_ptid): In BP condition
	evaluation, resume only the current thread

Co-authored-by: Natalia Saiapova <natalia.saiapova@intel.com>
Co-authored-by: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>

Signed-off-by: Natalia Saiapova <natalia.saiapova@intel.com>
---
 gdb/infrun.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/gdb/infrun.c b/gdb/infrun.c
index d552fb3adb2..91271c2ddbe 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -2156,6 +2156,14 @@ user_visible_resume_ptid (int step)
 	 mode.  */
       resume_ptid = inferior_ptid;
     }
+  else if (inferior_ptid != null_ptid
+	   && inferior_thread ()->control.in_cond_eval)
+    {
+      /* The inferior thread is evaluating a BP condition.  Other threads
+	 might be stopped or running and we do not want to change their
+	 state, thus, resume only the current thread.  */
+      resume_ptid = inferior_ptid;
+    }
   else if (!sched_multi && target_supports_multi_process ())
     {
       /* Resume all threads of the current process (and none of other
-- 
2.17.1

Intel Deutschland GmbH
Registered Address: Am Campeon 10-12, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de
Managing Directors: Christin Eisenschmid, Gary Kershaw
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928


  parent reply	other threads:[~2020-10-09 11:28 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20200831123519.16232-1-natalia.saiapova () intel ! com>
2020-10-09 11:27 ` [PATCH v2 0/6] Fix inferior calls from breakpoint condition Natalia Saiapova
2020-10-09 11:27   ` [PATCH v2 1/6] gdb: add in_cond_eval field to thread_control_state struct Natalia Saiapova
2021-03-02 10:43     ` Andrew Burgess
2020-10-09 11:27   ` Natalia Saiapova [this message]
2021-03-02 11:15     ` [PATCH v2 2/6] gdb/infrun: in condition evaluation resume only current thread Andrew Burgess
2020-10-09 11:27   ` [PATCH v2 3/6] gdb/infcall: in condition evaluation register target back after infcall Natalia Saiapova
2020-10-19  0:53     ` Kevin Buettner
2021-03-02 11:26     ` Andrew Burgess
2020-10-09 11:27   ` [PATCH v2 4/6] gdb/infrun: in condition evaluation wait only for the current inferior Natalia Saiapova
2020-10-19  1:44     ` Kevin Buettner
2020-10-26 12:11       ` Saiapova, Natalia
2021-03-02 12:17         ` Andrew Burgess
2020-10-09 11:27   ` [PATCH v2 5/6] gdb/infrun: in condition evaluation do not stop all threads Natalia Saiapova
2020-10-09 11:27   ` [PATCH v2 6/6] gdb/testsuite: add tests for inferior calls in breakpoint conditions Natalia Saiapova
2020-10-12  0:49   ` [PATCH v2 0/6] Fix inferior calls from breakpoint condition Kevin Buettner

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=20201009112719.629-3-natalia.saiapova@intel.com \
    --to=natalia.saiapova@intel.com \
    --cc=gdb-patches@sourceware.org \
    /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).