From patchwork Mon Nov 13 15:04:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 79755 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D6B19392C2AB for ; Mon, 13 Nov 2023 15:07:23 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) by sourceware.org (Postfix) with ESMTPS id 5B64D382B2CE for ; Mon, 13 Nov 2023 15:05:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5B64D382B2CE 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 5B64D382B2CE Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699887926; cv=none; b=J2cvmWVma1/ny0M84lDBmXY4XTDNdMPARZbaPfg13t7ZqBBgnsDqhvv7bfMcg2tt8GT/7F46urzO8ovz6qvfs21TIurqsThJgSy0Msmp26gq/8m5C8zPWqfz6CyWfPQKFt3dd+A6j4bEZ2DbrvQOQJMPlFsDWo7ZOxZn3lQzG5c= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699887926; c=relaxed/simple; bh=gUidjwalzCsYa7EHzbBOWtMTE9mxKOAthPMh13YBzls=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=py69JtEIs0e9VCw+hXcOkSSbX9+bIKzORfZ108rurtflFtgxQnMHSfL+syhmmaXEJWL64E4G7BBTe0n7umW0EwJ8bv/jIKR6EGs65zOK3LAW+LaGgaq/aXO22d6mmS4a2TC3K34LOBW4tgiADoJzG2L//I/x9nUs2TAKLIPXcf8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-40836ea8cbaso33895845e9.0 for ; Mon, 13 Nov 2023 07:05:25 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699887924; x=1700492724; 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=nEfCH2DxcuV0cIZlMGdgTheGJrLkZZV+Niu5ImeTCsc=; b=KF5UvXEwA1h59EaliEOS/BqAVHCa1YuTcyHtkK/fFcxTWO21LDEL7UE3UKahinWrLI GpTGU8tjsqNWgjRp2cOAadc/2ph/UBU7Yym1WLWM6uVk402xjV3HLHBsS+GccaNgA7Mr Pu4GhxWDe3NwSe23jJhSXdsk+kZd4COvto67g6J/NMaLJMekBjAZyznoYgJWOFaI840h seIWDmS7sgREkWbBQG72w81rYDx058K0wHlRK9vTGxtWrnjI1CSQUB3UUfBAD0fR6bfF YN7XyWRe5cnqkZYb3SvLigx+kYUwO/0gf6cPBZqfujwlIh7pfqJLaz6y3RApS0U8/iJV M9gA== X-Gm-Message-State: AOJu0Ywb3JXccDT/QU/QmDEXjJ/RCm9zdagfULcyr9kqsk+kPXi8Iwik 2PopaOanP4uOc9VzXN1LkiT3nziY8Bw= X-Google-Smtp-Source: AGHT+IEXgrAh1z4QegycbDfd1a7df3sZYne5WWVYHjCXViHE0LEsuBU8jw8/wG647xBATYCUcZ8l5A== X-Received: by 2002:a05:600c:3b91:b0:405:3455:e1a3 with SMTP id n17-20020a05600c3b9100b004053455e1a3mr5582136wms.17.1699887923947; Mon, 13 Nov 2023 07:05:23 -0800 (PST) Received: from localhost ([2001:8a0:f91e:1a00:8060:1e54:fb28:9635]) by smtp.gmail.com with UTF8SMTPSA id e20-20020a05600c219400b004083996dad8sm13929117wme.18.2023.11.13.07.05.23 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 13 Nov 2023 07:05:23 -0800 (PST) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [FYI/pushed v4 11/25] all-stop/synchronous RSP support thread-exit events Date: Mon, 13 Nov 2023 15:04:13 +0000 Message-Id: <20231113150427.477431-12-pedro@palves.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231113150427.477431-1-pedro@palves.net> References: <20231113150427.477431-1-pedro@palves.net> MIME-Version: 1.0 X-Spam-Status: No, score=-9.9 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, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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+patchwork=sourceware.org@sourceware.org Currently, GDB does not understand the THREAD_EXITED stop reply in remote all-stop mode. There's no good reason for this, it just happened that THREAD_EXITED was only ever reported in non-stop mode so far. This patch teaches GDB to parse that event in all-stop RSP too. There is no need to add a qSupported feature for this, because the server won't send a THREAD_EXITED event unless GDB explicitly asks for it, with QThreadEvents, or with the GDB_THREAD_OPTION_EXIT QThreadOptions option added in the next patch. Change-Id: Ide5d12391adf432779fe4c79526801c4a5630966 --- gdb/remote.c | 7 ++++++- gdbserver/server.cc | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/gdb/remote.c b/gdb/remote.c index 991a4344c7f..eb537fc48a5 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -8415,6 +8415,11 @@ remote_target::process_stop_reply (struct stop_reply *stop_reply, /* Expedited registers. */ if (!stop_reply->regcache.empty ()) { + /* 'w' stop replies don't cary expedited registers (which + wouldn't make any sense for a thread that is gone + already). */ + gdb_assert (status->kind () != TARGET_WAITKIND_THREAD_EXITED); + struct regcache *regcache = get_thread_arch_regcache (this, ptid, stop_reply->arch); @@ -8599,7 +8604,7 @@ remote_target::wait_as (ptid_t ptid, target_waitstatus *status, again. Keep waiting for events. */ rs->waiting_for_stop_reply = 1; break; - case 'N': case 'T': case 'S': case 'X': case 'W': + case 'N': case 'T': case 'S': case 'X': case 'W': case 'w': { /* There is a stop reply to handle. */ rs->waiting_for_stop_reply = 0; diff --git a/gdbserver/server.cc b/gdbserver/server.cc index 2a70ca63cbd..4a312da40bc 100644 --- a/gdbserver/server.cc +++ b/gdbserver/server.cc @@ -3045,6 +3045,7 @@ resume (struct thread_resume *actions, size_t num_actions) if (cs.last_status.kind () != TARGET_WAITKIND_EXITED && cs.last_status.kind () != TARGET_WAITKIND_SIGNALLED + && cs.last_status.kind () != TARGET_WAITKIND_THREAD_EXITED && cs.last_status.kind () != TARGET_WAITKIND_NO_RESUMED) current_thread->last_status = cs.last_status;