From patchwork Mon Oct 1 10:32:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 29594 Received: (qmail 96479 invoked by alias); 1 Oct 2018 10:32:58 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 96461 invoked by uid 89); 1 Oct 2018 10:32:57 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=naturally, suppressed, print_frame, sk:find_in X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 01 Oct 2018 10:32:56 +0000 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0F6A76662 for ; Mon, 1 Oct 2018 10:32:55 +0000 (UTC) Received: from localhost.localdomain (ovpn04.gateway.prod.ext.ams2.redhat.com [10.39.146.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8E10260BC6 for ; Mon, 1 Oct 2018 10:32:54 +0000 (UTC) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 1/3] Avoid find_thread_ptid with null_ptid Date: Mon, 1 Oct 2018 11:32:50 +0100 Message-Id: <20181001103252.5150-2-palves@redhat.com> In-Reply-To: <20181001103252.5150-1-palves@redhat.com> References: <20181001103252.5150-1-palves@redhat.com> With a following patch, find_thread_ptid will first find the inferior for the passed-in ptid, using find_inferior_pid, and then look for the thread in that inferior's thread list. If we pass down null_ptid to find_thread_ptid then that means we'll end up passing 0 to find_inferior_pid, which hits this assertion: > struct inferior * > find_inferior_pid (int pid) > { > struct inferior *inf; > > /* Looking for inferior pid == 0 is always wrong, and indicative of > a bug somewhere else. There may be more than one with pid == 0, > for instance. */ > gdb_assert (pid != 0); This patch prepares for the change, by avoiding passing down null_ptid to find_thread_ptid or to functions that naturally use it, such as the target_pid_to_str call in inferior.c:add_inferior. In that latter case, the patch changes GDB output, from: (gdb) add-inferior [New inferior 2 (process 0)] to: (gdb) add-inferior [New inferior 2] which seems like a good change to me. It might not even make sense to talk about "process" for the current target, for example. The python_on_normal_stop change ends up avoiding looking up the same thread twice (inferior_thread also does a look up). gdb/ChangeLog: yyyy-mm-dd Pedro Alves * cli/cli-interp.c (cli_on_user_selected_context_changed): Use inferior_thread instead of find_thread_ptid, and only when inferior_ptid is not null_ptid. * inferior.c (add_inferior): Don't include target_pid_to_str output when the inferior is not started. * python/py-inferior.c (python_on_normal_stop): Don't use find_thread_ptid. (tui_on_user_selected_context_changed): Use inferior_thread instead of find_thread_ptid, and only when inferior_ptid is not null_ptid. --- gdb/cli/cli-interp.c | 4 +--- gdb/inferior.c | 11 ++++++++--- gdb/python/py-inferior.c | 4 ++-- gdb/tui/tui-interp.c | 4 +--- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c index 2aa41d6c8b..2d8482fa49 100644 --- a/gdb/cli/cli-interp.c +++ b/gdb/cli/cli-interp.c @@ -251,13 +251,11 @@ cli_on_command_error (void) static void cli_on_user_selected_context_changed (user_selected_what selection) { - struct thread_info *tp; - /* This event is suppressed. */ if (cli_suppress_notification.user_selected_context) return; - tp = find_thread_ptid (inferior_ptid); + thread_info *tp = inferior_ptid != null_ptid ? inferior_thread () : NULL; SWITCH_THRU_ALL_UIS () { diff --git a/gdb/inferior.c b/gdb/inferior.c index 17d28c4cf5..394386a4b7 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -122,9 +122,14 @@ add_inferior (int pid) struct inferior *inf = add_inferior_silent (pid); if (print_inferior_events) - printf_unfiltered (_("[New inferior %d (%s)]\n"), - inf->num, - target_pid_to_str (ptid_t (pid))); + { + if (pid != 0) + printf_unfiltered (_("[New inferior %d (%s)]\n"), + inf->num, + target_pid_to_str (ptid_t (pid))); + else + printf_unfiltered (_("[New inferior %d]\n"), inf->num); + } return inf; } diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c index 5bba676478..7f8644b94b 100644 --- a/gdb/python/py-inferior.c +++ b/gdb/python/py-inferior.c @@ -86,8 +86,8 @@ python_on_normal_stop (struct bpstats *bs, int print_frame) if (!gdb_python_initialized) return; - if (!find_thread_ptid (inferior_ptid)) - return; + if (inferior_ptid == null_ptid) + return; stop_signal = inferior_thread ()->suspend.stop_signal; diff --git a/gdb/tui/tui-interp.c b/gdb/tui/tui-interp.c index acc8f0371c..a4f3925198 100644 --- a/gdb/tui/tui-interp.c +++ b/gdb/tui/tui-interp.c @@ -210,13 +210,11 @@ tui_on_command_error (void) static void tui_on_user_selected_context_changed (user_selected_what selection) { - struct thread_info *tp; - /* This event is suppressed. */ if (cli_suppress_notification.user_selected_context) return; - tp = find_thread_ptid (inferior_ptid); + thread_info *tp = inferior_ptid != null_ptid ? inferior_thread () : NULL; SWITCH_THRU_ALL_UIS () {