From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) by sourceware.org (Postfix) with ESMTPS id E4EC2385C017 for ; Thu, 19 Mar 2020 12:29:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E4EC2385C017 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gmx.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=n54@gmx.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1584620981; bh=iK8STdfdlGNU7qBupajQfGHtBOXTRmBYjDfi1WN1kJg=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=FCpgMiK0CftNQQIDsLlD+yGRoodxUqF/7oXAMZ1dwxOAs50GxNCaz4yLXEoBGCX4H cR97hjq+ZwPfET+1oNl6x1e2pj0rEoXC5c5gNBRlysk+CjC3SDuJefPgSRup0JfYnV qtKQ/Bi6srdpTO+LWG5GwMKDz01/w8GEgtzcR1MQ= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from localhost.localdomain ([89.79.191.25]) by mail.gmx.com (mrgmx004 [212.227.17.184]) with ESMTPSA (Nemesis) id 1MQvCv-1it83W1ndf-00Ny5v; Thu, 19 Mar 2020 13:29:41 +0100 From: Kamil Rytarowski To: gdb-patches@sourceware.org Cc: simark@simark.ca, tom@tromey.com, Kamil Rytarowski Subject: [PATCH v4] Disable get_ptrace_pid for NetBSD Date: Thu, 19 Mar 2020 13:28:44 +0100 Message-Id: <20200319122844.24558-1-n54@gmx.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200318231651.18045-1-n54@gmx.com> References: <20200318231651.18045-1-n54@gmx.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:B7M74jEPtDNSyPj2clgSuHMj5JfBoeKBHyka4h2M15tUjjM+Vx4 EqkafIYmwFnp31kgSxKaWIrh5hObSOILeT88tvKKncNi0aoh2ZAL0H/3HQDPkHMNeSpyxfI flEdNBQvdXws5E1vrp9mHkgRX0P6n61xhuV1XKoWsIfMoQc0GTGh6zWE68ihFQCGMZxGLl8 x/sGlEUyZgFYoC/H5qlqw== X-UI-Out-Filterresults: notjunk:1;V03:K0:41ziIIK9alY=:yWvv0j4GuYLQgQgwLRiYdX 7iUDlAty10cJJPb9Y7pTN+uPIZ/FrR3cnQ9QaJ5RlM0KVQhGxjRE2l70M2tAPjQXI4CPHH6oy GdOpnI8vdGIDQEzp5x0zxW4lxmh6nM1VYaEUHVMRX3waGF/N+9m+833iYcnAUfEUy/Ww+uioB 9YsIm2b3a/7bwny9UuBhbCPLtYWrx/mk6z7DSOyqfvyJCkHkFRIL6v4zCyMCyjhMAxAxw/eOt YX4y+n58ezCJ5mW0q1RHHA7hVr9Iea6yo/NHiD5p0X+c5knsbijbOC1SOL7xH+aIPZW7psSBY Z48yVkW9dm6BAFKRWeaEAMsIngI5XBHxNFY8i+bdsNqYogH/ClpbMB86ysOf+Hh4Ok/K1JrGn kXFRmVC+ppt5Aimt/b7n/a3ljOpnosoaUKey5wMlbS1jVklpQ48xtgUcn8gn+SFjG1vDKGlyk PMxpsyijLE/x/2n/GFI7qKkC4IV0lk+MeHqK/+WHnYyivIxpq/3EGOQ0qQdMLWotrJ/MA3VvF HEH3ekN7JW3IX0WWoisuWOTsihJxQdVq2/3H6AWaFrnP6S3eoT9XW4Y9MoBoU1XhY9C5V5+fe s6lNK8kwlI4oFtTJX49YhhMh/xPoP8a//frQEmvQyWO81FRe7BAywOEMXcmm0eAVnKAbFmwYG hQvXLQPXAMNQsV1Z470xYzzXGB3r7TSJkeF+uYD27YwY9VuaX4pkHuvzVWCKA40GcfqdgCWjP Z0w4ZWRya1dKzbafZ+CKiD4nPU+Ito0tiJFXrNVcXJXzezSzRjQuTo5HNw9aPP39+5oglsn0u 80HL4NSoqg5/UxzNxYM6IMGoNReSv4OGDOp2tVkDjAKVeKYHUwMgsQdVrGqU5q/MKtc8WADCL Rmruz2K5rDeOGuJ9NPrkT/yGDCa4QcLI1W2+hYvUnPrCYxIg/Une6Cdos9dQ6bCxjgFJBqdak FbC/qH0GzGnnSRplFECZm+b0hjpivicm+8bLUp6sbj//KmZ1FXe+A69+bC4ENsjJLODeROQp+ czGkqMBMexOIAM2cloliEBOzuYeEw8BgTtpPDwq8ez8lC/sZDVwJnCMHEQtSJw/6Qv+ERjAjv n2CSM+9n3nPzpkybadyIgLz/X8RJwPEiRXLXeZO6GOysEY/8wIB+jamhUaXrZJfi1uAouedhV 2P3dCe8XN5O4BaUXusOs6c/lFgxWNChxl3n4RyajvPhN9yWTFlTIMAMuuFczplnCEDqEU= X-Spam-Status: No, score=-25.4 required=5.0 tests=DKIM_SIGNED, DKIM_VALID, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, 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 12:29:58 -0000 Unlike most other Operating Systems, NetBSD tracks both pid and lwp. The process id on NetBSD is stored always in the pid field of ptid. gdb/ChangeLog: * inf-ptrace.h: Disable get_ptrace_pid on NetBSD. * inf-ptrace.c: Likewise. * (gdb_ptrace): Add. * (inf_ptrace_target::resume): Update. * (inf_ptrace_target::xfer_partial): Likewise. * (inf_ptrace_peek_poke): Change argument `pid' to `ptid'. * (inf_ptrace_peek_poke): Update. =2D-- gdb/ChangeLog | 10 ++++++++++ gdb/inf-ptrace.c | 47 +++++++++++++++++++++++++++++------------------ gdb/inf-ptrace.h | 7 ++++++- 3 files changed, 45 insertions(+), 19 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7f87eceaf70..78c6893cfe8 100644 =2D-- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2020-03-19 Kamil Rytarowski + + * inf-ptrace.h: Disable get_ptrace_pid on NetBSD. + * inf-ptrace.c: Likewise. + * (gdb_ptrace): Add. + * (inf_ptrace_target::resume): Update. + * (inf_ptrace_target::xfer_partial): Likewise. + * (inf_ptrace_peek_poke): Change argument `pid' to `ptid'. + * (inf_ptrace_peek_poke): Update. + 2020-03-19 Andrew Burgess * remote.c (remote_target::process_stop_reply): Handle events for diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c index db17a76d946..6c338cd5d14 100644 =2D-- a/gdb/inf-ptrace.c +++ b/gdb/inf-ptrace.c @@ -37,6 +37,18 @@ =0C +static int +gdb_ptrace (PTRACE_TYPE_ARG1 request, ptid_t ptid, PTRACE_TYPE_ARG3 addr, + PTRACE_TYPE_ARG4 data) +{ +#ifdef __NetBSD__ + return ptrace (request, ptid.pid (), addr, data); +#else + pid_t pid =3D get_ptrace_pid (ptid); + return ptrace (request, pid, addr, data); +#endif +} + /* A unique_ptr helper to unpush a target. */ struct target_unpusher @@ -313,8 +325,9 @@ inf_ptrace_target::kill () target_mourn_inferior (inferior_ptid); } -/* Return which PID to pass to ptrace in order to observe/control the - tracee identified by PTID. */ +#ifndef __NetBSD__ + +/* See inf-ptrace.h. */ pid_t get_ptrace_pid (ptid_t ptid) @@ -328,6 +341,7 @@ get_ptrace_pid (ptid_t ptid) pid =3D ptid.pid (); return pid; } +#endif /* Resume execution of thread PTID, or all threads if PTID is -1. If STEP is nonzero, single-step it. If SIGNAL is nonzero, give it @@ -336,15 +350,12 @@ get_ptrace_pid (ptid_t ptid) void inf_ptrace_target::resume (ptid_t ptid, int step, enum gdb_signal signal) { - pid_t pid; - int request; + PTRACE_TYPE_ARG1 request; if (minus_one_ptid =3D=3D ptid) /* Resume all threads. Traditionally ptrace() only supports single-threaded processes, so simply resume the inferior. */ - pid =3D inferior_ptid.pid (); - else - pid =3D get_ptrace_pid (ptid); + ptid =3D ptid_t (inferior_ptid.pid ()); if (catch_syscall_enabled () > 0) request =3D PT_SYSCALL; @@ -365,7 +376,7 @@ inf_ptrace_target::resume (ptid_t ptid, int step, enum= gdb_signal signal) where it was. If GDB wanted it to start some other way, we have already written a new program counter value to the child. */ errno =3D 0; - ptrace (request, pid, (PTRACE_TYPE_ARG3)1, gdb_signal_to_host (signal))= ; + gdb_ptrace (request, ptid, (PTRACE_TYPE_ARG3)1, gdb_signal_to_host (sig= nal)); if (errno !=3D 0) perror_with_name (("ptrace")); } @@ -460,7 +471,7 @@ inf_ptrace_target::wait (ptid_t ptid, struct target_wa= itstatus *ourstatus, be non-null. Return the number of transferred bytes. */ static ULONGEST -inf_ptrace_peek_poke (pid_t pid, gdb_byte *readbuf, +inf_ptrace_peek_poke (ptid_t ptid, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST addr, ULONGEST len) { @@ -491,8 +502,8 @@ inf_ptrace_peek_poke (pid_t pid, gdb_byte *readbuf, if (readbuf !=3D NULL || chunk < sizeof (PTRACE_TYPE_RET)) { errno =3D 0; - buf.word =3D ptrace (PT_READ_I, pid, - (PTRACE_TYPE_ARG3)(uintptr_t) addr, 0); + buf.word =3D gdb_ptrace (PT_READ_I, ptid, + (PTRACE_TYPE_ARG3)(uintptr_t) addr, 0); if (errno !=3D 0) break; if (readbuf !=3D NULL) @@ -502,15 +513,15 @@ inf_ptrace_peek_poke (pid_t pid, gdb_byte *readbuf, { memcpy (buf.byte + skip, writebuf + n, chunk); errno =3D 0; - ptrace (PT_WRITE_D, pid, (PTRACE_TYPE_ARG3)(uintptr_t) addr, + gdb_ptrace (PT_WRITE_D, ptid, (PTRACE_TYPE_ARG3)(uintptr_t) addr, buf.word); if (errno !=3D 0) { /* Using the appropriate one (I or D) is necessary for Gould NP1, at least. */ errno =3D 0; - ptrace (PT_WRITE_I, pid, (PTRACE_TYPE_ARG3)(uintptr_t) addr, - buf.word); + gdb_ptrace (PT_WRITE_I, ptid, (PTRACE_TYPE_ARG3)(uintptr_t) addr, + buf.word); if (errno !=3D 0) break; } @@ -528,7 +539,7 @@ inf_ptrace_target::xfer_partial (enum target_object ob= ject, const gdb_byte *writebuf, ULONGEST offset, ULONGEST len, ULONGEST *xfered_len) { - pid_t pid =3D get_ptrace_pid (inferior_ptid); + ptid_t ptid =3D inferior_ptid; switch (object) { @@ -552,7 +563,7 @@ inf_ptrace_target::xfer_partial (enum target_object ob= ject, piod.piod_len =3D len; errno =3D 0; - if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) =3D=3D 0) + if (gdb_ptrace (PT_IO, ptid, (caddr_t)&piod, 0) =3D=3D 0) { /* Return the actual number of bytes read or written. */ *xfered_len =3D piod.piod_len; @@ -565,7 +576,7 @@ inf_ptrace_target::xfer_partial (enum target_object ob= ject, return TARGET_XFER_EOF; } #endif - *xfered_len =3D inf_ptrace_peek_poke (pid, readbuf, writebuf, + *xfered_len =3D inf_ptrace_peek_poke (ptid, readbuf, writebuf, offset, len); return *xfered_len !=3D 0 ? TARGET_XFER_OK : TARGET_XFER_EOF; @@ -588,7 +599,7 @@ inf_ptrace_target::xfer_partial (enum target_object ob= ject, piod.piod_len =3D len; errno =3D 0; - if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) =3D=3D 0) + if (gdb_ptrace (PT_IO, ptid, (caddr_t)&piod, 0) =3D=3D 0) { /* Return the actual number of bytes read or written. */ *xfered_len =3D piod.piod_len; diff --git a/gdb/inf-ptrace.h b/gdb/inf-ptrace.h index dd0733736f2..dea82d005e3 100644 =2D-- a/gdb/inf-ptrace.h +++ b/gdb/inf-ptrace.h @@ -78,9 +78,14 @@ struct inf_ptrace_target : public inf_child_target void detach_success (inferior *inf); }; +#ifndef __NetBSD__ /* Return which PID to pass to ptrace in order to observe/control the - tracee identified by PTID. */ + tracee identified by PTID. + + Unlike most other Operating Systems, NetBSD tracks both pid and lwp + and avoids this function. */ extern pid_t get_ptrace_pid (ptid_t); +#endif #endif =2D- 2.25.0