From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) by sourceware.org (Postfix) with ESMTPS id 569C9384A880 for ; Tue, 7 May 2024 23:44:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 569C9384A880 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 569C9384A880 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1715125453; cv=none; b=OO1i3eB6xn92bCXyCg55i07TBUlKMF2g7/LOxzn1Dtd6i8BYSz4m1+D+8mh5NLG1y944F5QonXLus3NBT2uoCrb3sTV9U2Ess+H4ikDWDasOJsHzL2lMGWEcq035fkWj0aswsSWtgxbWRN6fESQGQP784JnIfzOT8aqUz8UP4Cs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1715125453; c=relaxed/simple; bh=LyrzD1YLdKNsYGUDMT8gqXUXFZllxNuXurjg2skcKpI=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=fVGOJzj1RSy+xNRdWitiQSkpu3m0EPbRxUfPezB1JdSVNs5V0vUePOBn/6y5H7xRVZXaOyttxVjUvR+99JOQYoMy898l5Y+929yY6MATVsuQnAuL+AzAo/777z28cmLs0REZhnI2HaGQjxUOPV7yHfOq0ZjealqLmwjt7qp9F0g= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-41ba1ba55ffso1469865e9.1 for ; Tue, 07 May 2024 16:44:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715125448; x=1715730248; 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=bjhh47r7HDmAxEPZNypC4eM7f7XKjms5SBszBEMmwgg=; b=cULFXw6da7XRHCgPfdx3/ZXnDk0W94OprnpRTYoHN+5Xl/FBLBzynRrSrq7KbzQFwL BCF2GX7tvyLRECJFys9Zd51ZRSy1+fRmkphfCLAUyHoZiTyix4j+bB9O6RO4Uv2lrFGg AxwWZmt7L4g78K+Q5BqNIAoqo2JjMX12bxvnr9udV8ry2UgU6FqqP8Ry6N0OgU0QXgR3 90mF1xktESMm0HG7dubda0l6WOnlAPojdLoBoh0FPnbU+WPP7+Q/MdKh76nUahBP3vLX vabNhnWULVPUjcWQtNctJOo1g3IgFUTloqYCKkkDQlNoApZlfJV5U4HK9/HR3sOHguP2 sLFA== X-Gm-Message-State: AOJu0Yw8XcvD5h3T9TZsR7ImvDiZLoTHTVqOWkN4EjS5dl/W/dpoJ5kd vnhyDAmhpAMSmjOvhkcyfo1mfui9qoSJwssq+qHw2IypBAyl/BBW6lxTvLRQ X-Google-Smtp-Source: AGHT+IF1a7/bvFyEsb3uv2o6HYlewyOr1BOfnXrVQ6fGPWjyCo2ZVmfYZmPKTvmyUT4Juq35jeWg8A== X-Received: by 2002:a05:600c:4fcc:b0:41c:ab7:fa22 with SMTP id 5b1f17b1804b1-41f71ad0bb1mr10092895e9.5.1715125447994; Tue, 07 May 2024 16:44:07 -0700 (PDT) Received: from localhost ([2001:8a0:f908:4900:2dd1:1a0d:2b75:dc42]) by smtp.gmail.com with UTF8SMTPSA id cx8-20020a056000092800b0034e01a80176sm13915586wrb.114.2024.05.07.16.44.07 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 07 May 2024 16:44:07 -0700 (PDT) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 22/34] Windows gdb+gdbserver: Make last_sig per-thread state Date: Wed, 8 May 2024 00:42:21 +0100 Message-ID: <20240507234233.371123-23-pedro@palves.net> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20240507234233.371123-1-pedro@palves.net> References: <20240507234233.371123-1-pedro@palves.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: 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: Ice09a5d932c912210608d5af25e1898f823e3c99 --- 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 cabc61fb2d2..57604312ccb 100644 --- a/gdb/nat/windows-nat.c +++ b/gdb/nat/windows-nat.c @@ -369,8 +369,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: @@ -504,7 +502,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 73c828ec2c9..aab76d66ec8 100644 --- a/gdb/nat/windows-nat.h +++ b/gdb/nat/windows-nat.h @@ -98,6 +98,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 { @@ -141,7 +145,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 1a01ae57e54..dd59bd2d383 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -1348,6 +1348,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 @@ -1448,7 +1449,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 @@ -1472,11 +1473,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; - #ifdef __x86_64__ if (windows_process.wow64_process) { @@ -1589,8 +1588,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 (); @@ -1909,7 +1906,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 5608fb902b1..40575e36501 100644 --- a/gdbserver/win32-low.cc +++ b/gdbserver/win32-low.cc @@ -302,7 +302,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; @@ -415,6 +414,7 @@ continue_one_thread (thread_info *thread, int thread_id) } th->resume (); + th->last_sig = GDB_SIGNAL_0; } } } @@ -775,11 +775,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); @@ -980,7 +980,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.43.2