From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) by sourceware.org (Postfix) with ESMTPS id 27536383879B for ; Sat, 25 Jun 2022 17:29:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 27536383879B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=qyriad.me Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-f41.google.com with SMTP id eo8so7610416edb.0 for ; Sat, 25 Jun 2022 10:29:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=5NFuhnQakldxWnkxxFJ/boHYtJUEk0FfRjKAl69regY=; b=5j/zmphU45jGm0lyc//M6G1iwAX6GKThswpXcsoEfcdBy78WeBdQP8nX4pY6GvdcY2 7lc32AafPv2BomLq5Czzb0m4jsju40DXngOJrWnnwySfkDT5osBWprERFvu6xGbqt47Q DQFiyS6HAaoH26edSHWL3FmzFecZm6aZC2sCFbJ5b/LSiJztklEoJRahXsZV5vjS5ZDI 7GSQmmO9Ah4fuzccYegLZcrulqqdc5HyRuY3qRFijzPHGBXkq3VC36XXMn6yco75pQOW CBY5jx+YmxxuA0rRi6ud9i2HB0eT/0mNrLyQPET5vqJEUQFf0N0MTxRhCz+xHy/ISjD/ C/zA== X-Gm-Message-State: AJIora8kZWCyaiEQhfYCholl/QlkzdoltBepm85C6bsJteIPdEF10G9T p+gSxk+JGdabltFsfne3NopcqqEbphYIxHV2 X-Google-Smtp-Source: AGRyM1tRBrMcrM7182JUwNbXvETANWdLi9alMwffFOo7VsaFlC3T3j/3N8Xix5/759mRVS+7YBomjg== X-Received: by 2002:a05:6402:378a:b0:431:6d8d:9023 with SMTP id et10-20020a056402378a00b004316d8d9023mr6351239edb.98.1656178185564; Sat, 25 Jun 2022 10:29:45 -0700 (PDT) Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com. [209.85.218.46]) by smtp.gmail.com with ESMTPSA id g3-20020aa7dd83000000b0042ab87ea713sm4324115edv.22.2022.06.25.10.29.45 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 25 Jun 2022 10:29:45 -0700 (PDT) Received: by mail-ej1-f46.google.com with SMTP id q6so10730498eji.13 for ; Sat, 25 Jun 2022 10:29:45 -0700 (PDT) X-Received: by 2002:a17:906:9508:b0:723:ef49:fe4c with SMTP id u8-20020a170906950800b00723ef49fe4cmr4860710ejx.489.1656178185170; Sat, 25 Jun 2022 10:29:45 -0700 (PDT) MIME-Version: 1.0 References: <20220419220135.1714665-1-mikaela.szekely@qyriad.me> In-Reply-To: <20220419220135.1714665-1-mikaela.szekely@qyriad.me> From: Mikaela Szekely Date: Sat, 25 Jun 2022 11:29:33 -0600 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH][PR gdb/28874] gdb/remote: switch to added threads if there isn't one already To: gdb-patches@sourceware.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.8 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_INFOUSMEBIZ, 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.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Jun 2022 17:29:49 -0000 Are there any thoughts on this? I'm happy to answer any questions if there are any. On Tue, Apr 19, 2022 at 4:01 PM Mikaela Szekely wrote: > > Bug PR gdb/28874 reports a failed assertion when attaching to remote > targets. This assertion is checked after a call to > gdb::observers::new_thread.notify from set_running. > The call to set_running in remote_target::remote_add_thread, however, > appears to always be called before any call to switch_to_thread > for remote targets that have set non-stop off. > > This commit proposes a new internal function has_inferior_thread in > gdb/thread.c, which allows remote_target::remote_add_thread to check if > the current thread has been set or not. And thus I have also adjusted > the logic of ::remote_add_thread to call switch_to_thread upon thread > creation if has_inferior_thread returns false. > > Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28874 > --- > gdb/gdbthread.h | 3 +++ > gdb/remote.c | 6 ++++++ > gdb/thread.c | 7 +++++++ > 3 files changed, 16 insertions(+) > > diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h > index 1a33eb61221..bf230410a12 100644 > --- a/gdb/gdbthread.h > +++ b/gdb/gdbthread.h > @@ -875,6 +875,9 @@ class scoped_restore_current_thread > enum language m_lang; > }; > > +/* Returns true if there is a current inferior thread. */ > +extern bool has_inferior_thread (void); > + > /* Returns a pointer into the thread_info corresponding to > INFERIOR_PTID. INFERIOR_PTID *must* be in the thread list. */ > extern struct thread_info* inferior_thread (void); > diff --git a/gdb/remote.c b/gdb/remote.c > index aa6a67a96e0..d35387650b3 100644 > --- a/gdb/remote.c > +++ b/gdb/remote.c > @@ -2572,6 +2572,12 @@ remote_target::remote_add_thread (ptid_t ptid, bool running, bool executing, > else > thread = add_thread (this, ptid); > > + /* If there isn't already an active thread, then switch to the > + thread we just added, so bare-metal targets don't assert the > + current thread as null. */ > + if (!has_inferior_thread()) > + switch_to_thread(thread); > + > /* We start by assuming threads are resumed. That state then gets updated > when we process a matching stop reply. */ > get_remote_thread_info (thread)->set_resumed (); > diff --git a/gdb/thread.c b/gdb/thread.c > index 9d0693bd0b8..e7b418b1c85 100644 > --- a/gdb/thread.c > +++ b/gdb/thread.c > @@ -79,6 +79,13 @@ is_current_thread (const thread_info *thr) > return thr == current_thread_; > } > > + > +bool > +has_inferior_thread (void) > +{ > + return current_thread_ != nullptr; > +} > + > struct thread_info* > inferior_thread (void) > { > -- > 2.35.1 >