From patchwork Tue Oct 29 19:13:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 35445 Received: (qmail 101392 invoked by alias); 29 Oct 2019 19:13:56 -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 101381 invoked by uid 89); 29 Oct 2019 19:13:56 -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 autolearn=ham version=3.3.1 spammy=born, D*FreeBSD.org, sparc, sk:get_cur X-HELO: us-smtp-delivery-1.mimecast.com Received: from us-smtp-2.mimecast.com (HELO us-smtp-delivery-1.mimecast.com) (205.139.110.61) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 29 Oct 2019 19:13:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1572376432; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nwYYgbVjVMJcw3jG2JmJjpkewJwgVohI7fUKRMGLK7w=; b=dk7iPj67T1K9xvf2X67YOgiwj01LjE4w8HvjufW7K/qTaAAs07vcMGNowat0s1SHbd+aHE uSvqHzilNIA9EePp+GZ9/Q+lYze/ZaKgJ1vwHSF0GO1724NSeJF1nryFXumMPn+U6YakyD y04Iat/8a6ifrHcj+WDw+7J17bqwouM= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-194-f7L6t5e5OOOuUrgM7HXAjQ-1; Tue, 29 Oct 2019 15:13:50 -0400 Received: by mail-wr1-f69.google.com with SMTP id a15so9092198wrr.0 for ; Tue, 29 Oct 2019 12:13:50 -0700 (PDT) Return-Path: Received: from ?IPv6:2001:8a0:f913:f700:56ee:75ff:fe8d:232b? ([2001:8a0:f913:f700:56ee:75ff:fe8d:232b]) by smtp.gmail.com with ESMTPSA id 6sm4680090wmd.36.2019.10.29.12.13.48 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 29 Oct 2019 12:13:48 -0700 (PDT) Subject: Re: [PATCH v2 00/24] Multi-target support To: John Baldwin , gdb-patches@sourceware.org References: <20191017225026.30496-1-palves@redhat.com> From: Pedro Alves Message-ID: Date: Tue, 29 Oct 2019 19:13:47 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1 MIME-Version: 1.0 In-Reply-To: X-Mimecast-Spam-Score: 0 On 10/18/19 9:22 PM, John Baldwin wrote: > On 10/17/19 3:50 PM, Pedro Alves wrote: >> Here's v2 of the multi-target patchset, which addresses all the review >> comments so far, I believe. Patch 15 is new, so all following patches >> are shifted by one. >> >> This time, I've adjusted the host-specific nat files to function API >> changes. I tried to find spots that would need changes using grep. I >> built the series on AIX, x86/SPARC Solaris, 64-bit Windows, x86 >> GNU/Linux -m64/-m32, and Aarch64 GNU/Linux. I'm currently running >> this through the buildbot, will have results tomorrow. I don't expect >> any serious major issue, if any, as so far runs that completed seem >> OK. > > I (finally) have a patch to fix the build on FreeBSD/amd64 (and probably > FreeBSD on other platforms) here: > > https://github.com/bsdjhb/gdb/commit/e58a36eaef6244d2040ce6f377497ee898978db4 > Thanks! > It's a combined patch but has some commentary on bsd-kvm.c which is > kind of special. That target adds new commands that need to find a > target to operate on. I opted to have it look at the current inferior > and if (using a dynamic cast) it is a bsd-kvm target the commands > modify the state of that inferior. I haven't tested it though as I don't > use bsd-kvm.c. I'd rather not merge the bsd-kvm.c parts into my patches as is, for the reason that it doesn't appear necessary for a minimal keep-working-as-before change. I think it would be fine as a follow up patch, though. A couple comments: - I think we should get away from doing this inferior_ptid = null_ptid; exit_inferior_silent (current_inferior ()); in 'bsd_kvm_target::close ()'. - Class private fields should be named 'm_foo', so m_kd, m_corefile, etc. For bsd-kvm.c, I _think_ that the only change necessary to keep things building would be this: --- a/gdb/bsd-kvm.c +++ b/gdb/bsd-kvm.c @@ -136,7 +136,7 @@ bsd_kvm_target_open (const char *arg, int from_tty) core_kd = temp_kd; push_target (&bsd_kvm_ops); - add_thread_silent (bsd_kvm_ptid); + add_thread_silent (&bsd_kvm_ops, bsd_kvm_ptid); inferior_ptid = bsd_kvm_ptid; Right? See updated patch below. > I did try a simple test of creating two inferiors both of which were > running /bin/ls and gdb hung trying to run the second inferior via > 'start'. I suspect this is some kind of bug in the FreeBSD target not > being multi-target ready that I will have to debug. Does that work without the multi-target series? I mean, maybe it's more a multi-process debugging issue than a multi-target issue? From 3f879fe9334cbd69f50efd0131c2bed5498cde92 Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Fri, 18 Oct 2019 13:12:11 -0700 Subject: [PATCH] Update FreeBSD native build for multi-target-v2. --- gdb/bsd-kvm.c | 2 +- gdb/fbsd-nat.c | 33 +++++++++++++++++---------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/gdb/bsd-kvm.c b/gdb/bsd-kvm.c index 21f978728d..5ffc303f46 100644 --- a/gdb/bsd-kvm.c +++ b/gdb/bsd-kvm.c @@ -136,7 +136,7 @@ bsd_kvm_target_open (const char *arg, int from_tty) core_kd = temp_kd; push_target (&bsd_kvm_ops); - add_thread_silent (bsd_kvm_ptid); + add_thread_silent (&bsd_kvm_ops, bsd_kvm_ptid); inferior_ptid = bsd_kvm_ptid; target_fetch_registers (get_current_regcache (), -1); diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c index 0274ff542e..bb34a9769d 100644 --- a/gdb/fbsd-nat.c +++ b/gdb/fbsd-nat.c @@ -991,11 +991,11 @@ fbsd_enable_proc_events (pid_t pid) called to discover new threads each time the thread list is updated. */ static void -fbsd_add_threads (pid_t pid) +fbsd_add_threads (fbsd_nat_target *target, pid_t pid) { int i, nlwps; - gdb_assert (!in_thread_list (ptid_t (pid))); + gdb_assert (!in_thread_list (target, ptid_t (pid))); nlwps = ptrace (PT_GETNUMLWPS, pid, NULL, 0); if (nlwps == -1) perror_with_name (("ptrace")); @@ -1010,7 +1010,7 @@ fbsd_add_threads (pid_t pid) { ptid_t ptid = ptid_t (pid, lwps[i], 0); - if (!in_thread_list (ptid)) + if (!in_thread_list (target, ptid)) { #ifdef PT_LWP_EVENTS struct ptrace_lwpinfo pl; @@ -1026,7 +1026,7 @@ fbsd_add_threads (pid_t pid) fprintf_unfiltered (gdb_stdlog, "FLWP: adding thread for LWP %u\n", lwps[i]); - add_thread (ptid); + add_thread (target, ptid); } } } @@ -1043,7 +1043,7 @@ fbsd_nat_target::update_thread_list () #else prune_threads (); - fbsd_add_threads (inferior_ptid.pid ()); + fbsd_add_threads (this, inferior_ptid.pid ()); #endif } @@ -1174,7 +1174,7 @@ fbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo) if (ptid.lwp_p ()) { /* If ptid is a specific LWP, suspend all other LWPs in the process. */ - inferior *inf = find_inferior_ptid (ptid); + inferior *inf = find_inferior_ptid (this, ptid); for (thread_info *tp : inf->non_exited_threads ()) { @@ -1193,7 +1193,7 @@ fbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo) { /* If ptid is a wildcard, resume all matching threads (they won't run until the process is continued however). */ - for (thread_info *tp : all_non_exited_threads (ptid)) + for (thread_info *tp : all_non_exited_threads (this, ptid)) if (ptrace (PT_RESUME, tp->ptid.lwp (), NULL, 0) == -1) perror_with_name (("ptrace")); ptid = inferior_ptid; @@ -1239,7 +1239,8 @@ fbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo) core, return true. */ static bool -fbsd_handle_debug_trap (ptid_t ptid, const struct ptrace_lwpinfo &pl) +fbsd_handle_debug_trap (fbsd_nat_target *target, ptid_t ptid, + const struct ptrace_lwpinfo &pl) { /* Ignore traps without valid siginfo or for signals other than @@ -1266,7 +1267,7 @@ fbsd_handle_debug_trap (ptid_t ptid, const struct ptrace_lwpinfo &pl) if (pl.pl_siginfo.si_code == TRAP_BRKPT) { /* Fixup PC for the software breakpoint. */ - struct regcache *regcache = get_thread_regcache (ptid); + struct regcache *regcache = get_thread_regcache (target, ptid); struct gdbarch *gdbarch = regcache->arch (); int decr_pc = gdbarch_decr_pc_after_break (gdbarch); @@ -1340,7 +1341,7 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus, threads might be skipped during post_attach that have not yet reported their PL_FLAG_EXITED event. Ignore EXITED events for an unknown LWP. */ - thread_info *thr = find_thread_ptid (wptid); + thread_info *thr = find_thread_ptid (this, wptid); if (thr != nullptr) { if (debug_fbsd_lwp) @@ -1364,13 +1365,13 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus, PL_FLAG_BORN in case the first stop reported after attaching to an existing process is a PL_FLAG_BORN event. */ - if (in_thread_list (ptid_t (pid))) + if (in_thread_list (this, ptid_t (pid))) { if (debug_fbsd_lwp) fprintf_unfiltered (gdb_stdlog, "FLWP: using LWP %u for first thread\n", pl.pl_lwpid); - thread_change_ptid (ptid_t (pid), wptid); + thread_change_ptid (this, ptid_t (pid), wptid); } #ifdef PT_LWP_EVENTS @@ -1380,13 +1381,13 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus, threads might be added by fbsd_add_threads that have not yet reported their PL_FLAG_BORN event. Ignore BORN events for an already-known LWP. */ - if (!in_thread_list (wptid)) + if (!in_thread_list (this, wptid)) { if (debug_fbsd_lwp) fprintf_unfiltered (gdb_stdlog, "FLWP: adding thread for LWP %u\n", pl.pl_lwpid); - add_thread (wptid); + add_thread (this, wptid); } ourstatus->kind = TARGET_WAITKIND_SPURIOUS; return wptid; @@ -1474,7 +1475,7 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus, #endif #ifdef USE_SIGTRAP_SIGINFO - if (fbsd_handle_debug_trap (wptid, pl)) + if (fbsd_handle_debug_trap (this, wptid, pl)) return wptid; #endif @@ -1633,7 +1634,7 @@ void fbsd_nat_target::post_attach (int pid) { fbsd_enable_proc_events (pid); - fbsd_add_threads (pid); + fbsd_add_threads (this, pid); } #ifdef PL_FLAG_EXEC