From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id yLSLARszK2g2NyoAWB0awg (envelope-from ) for ; Mon, 19 May 2025 09:33:15 -0400 Received: by simark.ca (Postfix, from userid 112) id 00D2B1E11F; Mon, 19 May 2025 09:33:15 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-9.0 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE autolearn=ham autolearn_force=no version=4.0.1 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id C03EA1E11B for ; Mon, 19 May 2025 09:33:13 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 71A6F385829B for ; Mon, 19 May 2025 13:33:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 71A6F385829B Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by sourceware.org (Postfix) with ESMTPS id A7140385842C for ; Mon, 19 May 2025 13:24:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A7140385842C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=palves.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A7140385842C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1747661074; cv=none; b=tyokRyz80LVJPcQCeqISa+zcDVLIUzXNua+4B24kZRvMILBPitnSwnGvat18BMn2+jlCpZNrfA3N9mGX8xZ9HWgX0/OZY9rOK2lYf2wU/yWty4V6EjNtZRxcMXXpjdM6ZUOKvp/EZcp6w2pXL84yzHA50ukySh7Cn3CZw9+isP4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1747661074; c=relaxed/simple; bh=sBxBGojNYPzy4WryADrTfS2tb6jM/4aZG/IrP9XlXfo=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=CdWzPFuipNBKcl6DK/wGgvYeG4e8E/lDaPAbXc5awVopl2OMpyygAvNGhInXBjmjgn6eITXyiNzNUDpvgCoqgvQxUVG1biJpsswgMQcRmON4PB9alFUsHNotUPzMkVjFveTwOiRJnIinp2z/O6zr2hbLMDtbkLaLTMSyCpSw+yA= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A7140385842C Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-3a1fb18420aso4508610f8f.1 for ; Mon, 19 May 2025 06:24:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747661073; x=1748265873; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rjQIvTBDgoxqw7eFmvqZY9JmhPXpdN0DnrU0LQqIzmI=; b=R337ogklSHOw/eBl/gLsQ4yXdORNrTkmvibgW5coSNXEJHUrhfdsZp9B9RHR7rIeHr jFoGPjqF+jGshepE/uKDTKFJpFzgDFjSzEvHTkkjrDd7GtUw1utnV1NqtCgMLoRvY2p0 Xue09WZY/e3n0j6pGyes3LoXe5ameVx9tDMcBLHMPsQy48AOzCNOYj3JjhfoBMLILD6W cQ8M6XGAnKO8n9PS6HS38wTmrdM3l+rvm2mzbJ0pw+m/2QMDzACoM65VeQ8/m4nMNL1+ FpvONolvtpHmpuBjGhm6AufAoXjAXgVD7ugGTs44SDiR45LoqaAmq/AASJhe45e0AXZw P07A== X-Gm-Message-State: AOJu0Ywxe3dGxcMH91PamaZvnGoeGfcIi7bNXNsN2H4AYobL4SK7uEn3 1VCN648bhE9klmeZfEQ98iPLxCZY2eMJNlEav3K9y4PWMe0WEKcGrrUovoPJzJOJ X-Gm-Gg: ASbGnctD6njb+eS53TjJNMdxW4U9+nzYIiYmS3PCZfQBZYHwmIo0SSVGe3U/D8HpOPj m8Xkeq6UERFT0/IidcnZHMwM4qH3XgapDdf98ILdF4EL1rLLtVSsgvol4C1n5vKhWTk6wKeY90b eB0y0i0GnkfMrox3/FtFm1jIDpK96tPFITSFoljck78tc3wVpmEc/50OYRqpJSFh6fPwpxKp0JU RQkYollgjqMR3B1333+kk4Eamz6g13Qt+CzXKLXGkkXY+1LGOwndIIn/Hq1YYXp9mXqkUc3dv5F /H1RphBlPPY2fWFWJzJZi0pcL0CN2fyDIuOr790U7n8jsY/DSl8= X-Google-Smtp-Source: AGHT+IGfrvPgZWwlBTOqaqeUy3AaT5p5l3Opk13dHlLCqthu3TFi5JhDxt3Q39b/MMVXwgbyMEspoQ== X-Received: by 2002:a05:6000:2907:b0:3a3:64b7:620b with SMTP id ffacd0b85a97d-3a364b7643cmr7953269f8f.20.1747661073079; Mon, 19 May 2025 06:24:33 -0700 (PDT) Received: from localhost ([2001:8a0:4fe9:b400:8d90:6f0d:36bf:32df]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3a368136014sm8582519f8f.92.2025.05.19.06.24.32 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 19 May 2025 06:24:32 -0700 (PDT) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH v2 27/47] Windows gdb+gdbserver: Make last_sig per-thread state Date: Mon, 19 May 2025 14:22:48 +0100 Message-ID: <20250519132308.3553663-28-pedro@palves.net> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250519132308.3553663-1-pedro@palves.net> References: <20250519132308.3553663-1-pedro@palves.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org With non-stop mode, each thread is controlled independently of the others, and each thread has its own independent reason for its last stop. Thus, any thread-specific state that is currently per-process must be converted to per-thread state. This patch converts windows_process_info::last_sig to per-thread state, moving it to windows_thread_info instead. This adjusts both native gdb and gdbserver. Change-Id: Ie8c673a819be445753d967afd3a6084565648448 --- gdb/nat/windows-nat.c | 8 +++++--- gdb/nat/windows-nat.h | 5 ++++- gdb/windows-nat.c | 10 +++------- gdbserver/win32-low.cc | 7 +++---- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c index 53d891f65d0..864788ec125 100644 --- a/gdb/nat/windows-nat.c +++ b/gdb/nat/windows-nat.c @@ -359,8 +359,6 @@ windows_process_info::handle_exception (DEBUG_EVENT ¤t_event, memcpy (&siginfo_er, rec, sizeof siginfo_er); - last_sig = GDB_SIGNAL_0; - switch (code) { case EXCEPTION_ACCESS_VIOLATION: @@ -494,7 +492,11 @@ windows_process_info::handle_exception (DEBUG_EVENT ¤t_event, } if (ourstatus->kind () == TARGET_WAITKIND_STOPPED) - last_sig = ourstatus->sig (); + { + ptid_t ptid (current_event.dwProcessId, current_event.dwThreadId, 0); + windows_thread_info *th = find_thread (ptid); + th->last_sig = ourstatus->sig (); + } return result; diff --git a/gdb/nat/windows-nat.h b/gdb/nat/windows-nat.h index 0b89c751e89..71cb118f5d6 100644 --- a/gdb/nat/windows-nat.h +++ b/gdb/nat/windows-nat.h @@ -104,6 +104,10 @@ struct windows_thread_info thread. */ DEBUG_EVENT last_event {}; + /* The last signal reported for this thread, extracted out of + last_event. */ + enum gdb_signal last_sig = GDB_SIGNAL_0; + /* The context of the thread, including any manipulations. */ union { @@ -147,7 +151,6 @@ struct windows_process_info HANDLE handle = 0; DWORD process_id = 0; DWORD main_thread_id = 0; - enum gdb_signal last_sig = GDB_SIGNAL_0; /* Contents of $_siginfo */ EXCEPTION_RECORD siginfo_er {}; diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 8ccb7048665..87cf5e1a4e8 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -1258,6 +1258,7 @@ windows_per_inferior::continue_one_thread (windows_thread_info *th, }); th->resume (); + th->last_sig = GDB_SIGNAL_0; } /* Resume thread specified by ID, or all artificially suspended @@ -1358,7 +1359,7 @@ windows_nat_target::resume (ptid_t ptid, int step, enum gdb_signal sig) DEBUG_EXCEPT ("Cannot continue with signal %d here. " "Not stopped for EXCEPTION_DEBUG_EVENT", sig); } - else if (sig == windows_process.last_sig) + else if (sig == th->last_sig) continue_status = DBG_EXCEPTION_NOT_HANDLED; else #if 0 @@ -1382,11 +1383,9 @@ windows_nat_target::resume (ptid_t ptid, int step, enum gdb_signal sig) } #endif DEBUG_EXCEPT ("Can only continue with received signal %d.", - windows_process.last_sig); + th->last_sig); } - windows_process.last_sig = GDB_SIGNAL_0; - windows_process.with_context (th, [&] (auto *context) { if (step) @@ -1486,8 +1485,6 @@ windows_nat_target::get_windows_debug_event } } - windows_process.last_sig = GDB_SIGNAL_0; - if ((options & TARGET_WNOHANG) != 0 && !m_debug_event_pending) { ourstatus->set_ignore (); @@ -1806,7 +1803,6 @@ windows_nat_target::do_initial_windows_stuff (DWORD pid, bool attaching) { struct inferior *inf; - windows_process.last_sig = GDB_SIGNAL_0; windows_process.open_process_used = 0; #ifdef __CYGWIN__ windows_process.cygwin_load_start = 0; diff --git a/gdbserver/win32-low.cc b/gdbserver/win32-low.cc index a4000980f67..c3e35a6f602 100644 --- a/gdbserver/win32-low.cc +++ b/gdbserver/win32-low.cc @@ -289,7 +289,6 @@ do_initial_child_stuff (HANDLE proch, DWORD pid, int attached) { struct process_info *proc; - windows_process.last_sig = GDB_SIGNAL_0; windows_process.handle = proch; windows_process.process_id = pid; windows_process.main_thread_id = 0; @@ -396,6 +395,7 @@ continue_one_thread (thread_info *thread, int thread_id) } th->resume (); + th->last_sig = GDB_SIGNAL_0; } } } @@ -758,11 +758,11 @@ resume_one_thread (thread_info *thread, bool step, gdb_signal sig, "Not stopped for EXCEPTION_DEBUG_EVENT.\n", gdb_signal_to_string (sig))); } - else if (sig == windows_process.last_sig) + else if (sig == th->last_sig) *continue_status = DBG_EXCEPTION_NOT_HANDLED; else OUTMSG (("Can only continue with received signal %s.\n", - gdb_signal_to_string (windows_process.last_sig))); + gdb_signal_to_string (th->last_sig))); } win32_prepare_to_resume (th); @@ -957,7 +957,6 @@ get_child_debug_event (DWORD *continue_status, { ptid_t ptid; - windows_process.last_sig = GDB_SIGNAL_0; ourstatus->set_spurious (); *continue_status = DBG_CONTINUE; -- 2.49.0