From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id 29DDC3937430 for ; Thu, 19 Mar 2020 01:35:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 29DDC3937430 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=simark.ca Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=simark@simark.ca Received: from [10.0.0.11] (unknown [192.222.164.54]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 72D431E5F9; Wed, 18 Mar 2020 21:35:52 -0400 (EDT) Subject: Re: [PATCH] Avoid get_ptrace_pid() usage on NetBSD in x86-bsd-nat.c To: Kamil Rytarowski , gdb-patches@sourceware.org References: <20200318161328.24088-1-n54@gmx.com> From: Simon Marchi Message-ID: <6b3250d6-027d-46c7-2884-569d9a0aaa13@simark.ca> Date: Wed, 18 Mar 2020 21:35:51 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200318161328.24088-1-n54@gmx.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US-large Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-25.0 required=5.0 tests=GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Thu, 19 Mar 2020 01:35:54 -0000 On 2020-03-18 12:13 p.m., Kamil Rytarowski wrote: > Add gdb_ptrace() that wraps the ptrace(2) API and correctly passes > the pid,lwp pair to the calls on NetBSD; and the result of > get_ptrace_pid() on other BSD Operating Systems. > > gdb/ChangeLog: > > * x86-bsd-nat.c (gdb_ptrace): New. > * (x86bsd_dr_get, x86bsd_dr_set): Use gdb_ptrace. > --- > gdb/ChangeLog | 5 +++++ > gdb/x86-bsd-nat.c | 39 +++++++++++++++++++-------------------- > 2 files changed, 24 insertions(+), 20 deletions(-) > > diff --git a/gdb/ChangeLog b/gdb/ChangeLog > index 84964dc00ac..1beb835df78 100644 > --- a/gdb/ChangeLog > +++ b/gdb/ChangeLog > @@ -1,3 +1,8 @@ > +2020-03-18 Kamil Rytarowski > + > + * x86-bsd-nat.c (gdb_ptrace): New. > + * (x86bsd_dr_get, x86bsd_dr_set): Use gdb_ptrace. > + > 2020-03-17 Kamil Rytarowski > > * regformats/regdef.h: Put reg in gdb namespace. > diff --git a/gdb/x86-bsd-nat.c b/gdb/x86-bsd-nat.c > index 640a3c28110..37d0bfda37c 100644 > --- a/gdb/x86-bsd-nat.c > +++ b/gdb/x86-bsd-nat.c > @@ -33,6 +33,19 @@ > #include "inf-ptrace.h" > > > +static int > +gdb_ptrace (PTRACE_TYPE_ARG1 request, ptid_t ptid, PTRACE_TYPE_ARG3 addr) > +{ > +#ifdef __NetBSD__ > + /* Support for NetBSD threads: unlike other ptrace implementations in this > + file, NetBSD requires that we pass both the pid and lwp. */ > + return ptrace (request, ptid.pid (), addr, ptid.lwp ()); > +#else > + pid_t pid = get_ptrace_pid (ptid); > + return ptrace (request, pid, addr, 0); > +#endif > +} > + > #ifdef PT_GETXSTATE_INFO > size_t x86bsd_xsave_len; > #endif > @@ -56,14 +69,9 @@ static unsigned long > x86bsd_dr_get (ptid_t ptid, int regnum) > { > struct dbreg dbregs; > -#ifdef __NetBSD__ > - int lwp = inferior_ptid.lwp (); > -#else > - int lwp = 0; > -#endif > > - if (ptrace (PT_GETDBREGS, get_ptrace_pid (inferior_ptid), > - (PTRACE_TYPE_ARG3) &dbregs, lwp) == -1) > + if (gdb_ptrace (PT_GETDBREGS, inferior_ptid, > + (PTRACE_TYPE_ARG3) &dbregs) == -1) > perror_with_name (_("Couldn't read debug registers")); This function accepts a ptid parameter but does not use it. Can you change it so it uses the parameter, and not inferior_ptid? All the callers pass inferior_ptid, so it won't change the behavior. > > return DBREG_DRX ((&dbregs), regnum); > @@ -73,14 +81,9 @@ static void > x86bsd_dr_set (int regnum, unsigned long value) > { > struct dbreg dbregs; > -#ifdef __NetBSD__ > - int lwp = inferior_ptid.lwp (); > -#else > - int lwp = 0; > -#endif > > - if (ptrace (PT_GETDBREGS, get_ptrace_pid (inferior_ptid), > - (PTRACE_TYPE_ARG3) &dbregs, lwp) == -1) > + if (gdb_ptrace (PT_GETDBREGS, inferior_ptid, > + (PTRACE_TYPE_ARG3) &dbregs) == -1) > perror_with_name (_("Couldn't get debug registers")); For symmetry, can you please change this function to accept a ptid, just like x86bsd_dr_get, and update the callers to pass inferior_ptid? Simon