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 E0626386F02B for ; Mon, 20 Apr 2020 10:29:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E0626386F02B 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=1587378571; bh=9wl+ny+W0dyA9/ouEyh4xcpDZu7T+pgpBHs8lHGVb+A=; h=X-UI-Sender-Class:Subject:To:References:From:Date:In-Reply-To; b=No3pTiwWssAhlQWgfifUaqfg3k+SU2FxZUNxkLJ5TWuSkLIcdd1zh2Mwf+2wph8fG /Z0Ubmvtp7bLbf9mXIgaWIIbOHNjlFvLEgGaG6tYlwj/ve6DqkAhhh9QsSKaMS5ius vbFDy5f9fhh5W4yZ1FTb02+wD/GkEiRC49CjFDOI= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.0.241] ([89.79.191.25]) by mail.gmx.com (mrgmx004 [212.227.17.184]) with ESMTPSA (Nemesis) id 1Mw9Q6-1j7qrn0D2K-00s54W for ; Mon, 20 Apr 2020 12:29:31 +0200 Subject: Re: [PATCH] Add basic event handling in the NetBSD target To: gdb-patches References: <20200417144508.6366-1-n54@gmx.com> From: Kamil Rytarowski Autocrypt: addr=n54@gmx.com; prefer-encrypt=mutual; keydata= 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 4XSbcg== Message-ID: Date: Mon, 20 Apr 2020 12:28:11 +0200 User-Agent: Mozilla/5.0 (X11; NetBSD amd64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: <20200417144508.6366-1-n54@gmx.com> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="8SIYVkxfDZ4WdfPIwh1JydQjEfF3KWlm3" X-Provags-ID: V03:K1:g3t96awNWetZX6yR4hG5Ccwrwr1Cphx/iJpncqhrcyXmED08M3r TkBMu/FEtEMGVV0wN1ezsZWrCZ5bj6ZO18CLeK5MsxxVm8BFkivgPqalA/L4LMUB1zWuA8I Y/E+0IQsndxMD/8Gssh6W2A5Cs11vA+Sb66u/GmqtnK8yg/bPmEjCPB6AdoLpPcbOIDCb// /9ENM7KaEOaBcyWQUyiKA== X-UI-Out-Filterresults: notjunk:1;V03:K0:h5mNayOvsy4=:meoGnfk1WfMOXh/eshixrO ciPeq3mxwWIKueCwFORpILAWHbkkS6OPbP6UZzKat1XcmFt6ZUDeqlaV2HB/LxhlZz5zupviG NzuT2Msi9Q40aAIPcyzN60eauOPbekHQlnpXky1tmv5kge3NQ9P8Yap83DM7jBaQKta5ACNjW 6LXJzbiTS8Fevq0hR1HAUCiMs08pU1aR21xEXWj1zSbw6GnUbiNkEEsm0YyW2SN2dMu7piZd3 8ZuVZ6++cM5JJNNPnLm9xyJJmQyLGJz4Qtjq1AurD6b36/55mQzbJr/JVOmK8HxvLxk0pX1Tx hms3lmER5u2vTkWj/C09mIOZX7/Ia+SMh453+sNmr0eMzotoGfLLdNHIxfCmLrsVrqVZVL6uA POG2ZdEeJbXNAxEG1gHeqGlPvcI3HbkCHLZnKOysaS+548u/FRpoCo54sQ/2zx3p60GPQfavK VXd4euHJHpHJybqti0IuMCmmB+CL0t5xZfdcSPSoOZwRmUDCgDjKe26roNPY2VP0pmfg4rA/l 3ftMp6PgkfclKNYijpEfDbkKwgV5q2KXNwFIRUD+Q4ZsX8KBt5JqWMTaMCPyQG4WQpOJC6sxk 1LYYPd7UNMC2XCpXVAf7dZKmox8oIdBEck5ENCDpI2Roi/zHV4RM1tBs3RlclUhj31bThFCdr oPEOvCb33Rq9nvl30+FSOjkPl7lIhUuxFzFKrRMxyU8N7lU7L0Y6tBCUbDqTupnzvFx+qH5X4 gu2X8ATbQmonBKR9Tg83IaPernnkGIJQSubT+5SyBeHwjm7NuI4CadvB7d34RfAwWdxl9r2ZC CYwU/VcJrizFVhaLighE4uhVox/bWkslaC3KjZjOdJjscCFEGhSxunMYuevXIqSXabfKThvDc IhpoCO5Ba3UnfMJKv4NJNBG9RNmXcWXhvLgalsoGpU0khlXTdWMVzgW7MIZKBnLvyhUCK5fN0 Jk4NCxdPYGfdsF1kYkQaaEaMVlaKc1XvHGfz1j0r/v3LkYJ7uFrgLpJIwprEp3SLFjjK7QZ9W FvOlTZuDwc5EgYJcE2ZIj1Q79hGZmMcOGkDG54OWZa26rl0PWfZlBo/4AlQ19io8il0S4ajF8 2wBJADBCpLFhgSQYwUJQEtbjf1uO8mgn3/+rnXKXAc6W8WXAqyMQCWtGxWAo6+qUsfkhNjgdD RlfiAVpePm9tMBKwOFXOOS1mhBISzhqRbGgkiz5sEYwSyo6lDNt/RU3HkIqLGqpndbAnk= X-Spam-Status: No, score=-27.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS, TXREP 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: Mon, 20 Apr 2020 10:29:49 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --8SIYVkxfDZ4WdfPIwh1JydQjEfF3KWlm3 Content-Type: multipart/mixed; boundary="Bl3TR7zBTpEJJQ0AM3JeulNIn5jJBfp7e"; protected-headers="v1" From: Kamil Rytarowski To: gdb-patches Message-ID: Subject: Re: [PATCH] Add basic event handling in the NetBSD target References: <20200417144508.6366-1-n54@gmx.com> In-Reply-To: <20200417144508.6366-1-n54@gmx.com> --Bl3TR7zBTpEJJQ0AM3JeulNIn5jJBfp7e Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable Ping? On 17.04.2020 16:45, Kamil Rytarowski wrote: > Implement the following events: > - single step (TRAP_TRACE) > - software breakpoint (TRAP_DBREG) > - exec() (TRAP_EXEC) > - syscall entry/exit (TRAP_SCE / TRAP_SCX) >=20 > Add support for NetBSD specific ::wait () and ::resume (). >=20 > Instruct the generic code that exec and syscall events are supported. >=20 > Define an empty nbsd_get_syscall_number as it is prerequisite for > catching syscall entry and exit events, even if it is unused. > This function is used to detect whether the gdbarch supports the > 'catch syscall' feature. >=20 > gdb/ChangeLog: >=20 > * nbsd-nat.c: Include "sys/wait.h". > * (nbsd_nat_target::resume, nbsd_wait, nbsd_nat_target::wait) > (nbsd_nat_target::insert_exec_catchpoint) > (nbsd_nat_target::remove_exec_catchpoint) > (nbsd_nat_target::set_syscall_catchpoint): Add. > * nbsd-nat.h (nbsd_nat_target::resume, nbsd_nat_target::wait) > (nbsd_nat_target::insert_exec_catchpoint) > (nbsd_nat_target::remove_exec_catchpoint) > (nbsd_nat_target::set_syscall_catchpoint): Add. > * nbsd-tdep.c (nbsd_get_syscall_number): Add. > (nbsd_init_abi): Call `set_gdbarch_get_syscall_number' and pass > `nbsd_get_syscall_number'. > --- > gdb/ChangeLog | 15 ++++ > gdb/nbsd-nat.c | 211 ++++++++++++++++++++++++++++++++++++++++++++++++= > gdb/nbsd-nat.h | 9 +++ > gdb/nbsd-tdep.c | 18 +++++ > 4 files changed, 253 insertions(+) >=20 > diff --git a/gdb/ChangeLog b/gdb/ChangeLog > index 0caeca04e79..9652daabbbd 100644 > --- a/gdb/ChangeLog > +++ b/gdb/ChangeLog > @@ -1,3 +1,18 @@ > +2020-04-16 Kamil Rytarowski > + > + * nbsd-nat.c: Include "sys/wait.h". > + * (nbsd_nat_target::resume, nbsd_wait, nbsd_nat_target::wait) > + (nbsd_nat_target::insert_exec_catchpoint) > + (nbsd_nat_target::remove_exec_catchpoint) > + (nbsd_nat_target::set_syscall_catchpoint): Add. > + * nbsd-nat.h (nbsd_nat_target::resume, nbsd_nat_target::wait) > + (nbsd_nat_target::insert_exec_catchpoint) > + (nbsd_nat_target::remove_exec_catchpoint) > + (nbsd_nat_target::set_syscall_catchpoint): Add. > + * nbsd-tdep.c (nbsd_get_syscall_number): Add. > + (nbsd_init_abi): Call `set_gdbarch_get_syscall_number' and pass > + `nbsd_get_syscall_number'. > + > 2020-04-16 Kamil Rytarowski >=20 > * inf-ptrace.h (follow_fork, insert_fork_catchpoint) > diff --git a/gdb/nbsd-nat.c b/gdb/nbsd-nat.c > index d41cfc815d3..f9e85e10b16 100644 > --- a/gdb/nbsd-nat.c > +++ b/gdb/nbsd-nat.c > @@ -28,6 +28,7 @@ > #include > #include > #include > +#include >=20 > /* Return the name of a file that can be opened to get the symbols for= > the child process identified by PID. */ > @@ -539,3 +540,213 @@ nbsd_nat_target::info_proc (const char *args, enu= m info_proc_what what) >=20 > return true; > } > + > +/* 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 > + that signal. */ > + > +void > +nbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signal= ) > +{ > + int request; > + > + if (ptid.lwp_p ()) > + { > + /* If ptid is a specific LWP, suspend all other LWPs in the proc= ess. */ > + inferior *inf =3D find_inferior_ptid (this, ptid); > + > + for (thread_info *tp : inf->non_exited_threads ()) > + { > + if (tp->ptid.lwp () =3D=3D ptid.lwp ()) > + request =3D PT_RESUME; > + else > + request =3D PT_SUSPEND; > + > + if (ptrace (request, tp->ptid.pid (), NULL, tp->ptid.lwp ())= =3D=3D -1) > + perror_with_name (("ptrace")); > + } > + } > + else > + { > + /* 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 (this, ptid)) > + if (ptrace (PT_RESUME, tp->ptid.pid (), NULL, tp->ptid.lwp ())= =3D=3D -1) > + perror_with_name (("ptrace")); > + ptid =3D inferior_ptid; > + } > + > + if (step) > + { > + for (thread_info *tp : all_non_exited_threads (this, ptid)) > + if (ptrace (PT_SETSTEP, tp->ptid.pid (), NULL, tp->ptid.lwp ())= =3D=3D -1) > + perror_with_name (("ptrace")); > + } > + else > + { > + for (thread_info *tp : all_non_exited_threads (this, ptid)) > + if (ptrace (PT_CLEARSTEP, tp->ptid.pid (), NULL, tp->ptid.lwp (= )) =3D=3D -1) > + perror_with_name (("ptrace")); > + } > + > + if (minus_one_ptid =3D=3D ptid) > + /* Resume all threads. Traditionally ptrace() only supports > + single-threaded processes, so simply resume the inferior. */ > + ptid =3D ptid_t (inferior_ptid.pid ()); > + > + if (catch_syscall_enabled () > 0) > + request =3D PT_SYSCALL; > + else > + request =3D PT_CONTINUE; > + > + /* An address of (void *)1 tells ptrace to continue from > + where it was. If GDB wanted it to start some other way, we have > + already written a new program counter value to the child. */ > + if (ptrace (request, ptid.pid (), (void *)1, gdb_signal_to_host (sig= nal)) =3D=3D -1) > + perror_with_name (("ptrace")); > +} > + > +/* Implement the "update_thread_list" target_ops method. */ > + > +static ptid_t > +nbsd_wait (ptid_t ptid, struct target_waitstatus *ourstatus, int optio= ns) > +{ > + pid_t pid; > + int status; > + > + set_sigint_trap (); > + > + do > + { > + /* The common code passes WNOHANG that leads to crashes, overwri= te it. */ > + pid =3D waitpid (ptid.pid (), &status, 0); > + } > + while (pid =3D=3D -1 && errno =3D=3D EINTR); > + > + clear_sigint_trap (); > + > + if (pid =3D=3D -1) > + perror_with_name (_("Child process unexpectedly missing")); > + > + store_waitstatus (ourstatus, status); > + return ptid_t (pid); > +} > + > +/* Wait for the child specified by PTID to do something. Return the > + process ID of the child, or MINUS_ONE_PTID in case of error; store > + the status in *OURSTATUS. */ > + > +ptid_t > +nbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatu= s, > + int target_options) > +{ > + ptid_t wptid =3D nbsd_wait(ptid, ourstatus, target_options); > + > + /* If the child stopped, keep investigating its status. */ > + if (ourstatus->kind !=3D TARGET_WAITKIND_STOPPED) > + return wptid; > + > + pid_t pid =3D wptid.pid (); > + > + /* Extract the event and thread that received a signal. */ > + ptrace_siginfo_t psi; > + if (ptrace (PT_GET_SIGINFO, pid, &psi, sizeof (psi)) =3D=3D -1) > + perror_with_name (("ptrace")); > + > + /* Pick child's siginfo_t. */ > + siginfo_t *si =3D &psi.psi_siginfo; > + > + int lwp =3D psi.psi_lwpid; > + > + int signo =3D si->si_signo; > + const int code =3D si->si_code; > + > + /* Construct PTID with a specified thread that received the event. > + If a signal was targeted to the whole process, lwp is 0. */ > + wptid =3D ptid_t (pid, lwp, 0); > + > + /* Bail out on non-debugger oriented signals.. */ > + if (signo !=3D SIGTRAP) > + return wptid; > + > + /* Stop examining non-debugger oriented SIGTRAP codes. */ > + if (code <=3D SI_USER || code =3D=3D SI_NOINFO) > + return wptid; > + > + if (in_thread_list (this, ptid_t (pid))) > + { > + thread_change_ptid (this, ptid_t (pid), wptid); > + } > + > + if (code =3D=3D TRAP_EXEC) > + { > + ourstatus->kind =3D TARGET_WAITKIND_EXECD; > + ourstatus->value.execd_pathname =3D xstrdup (pid_to_exec_file (p= id)); > + return wptid; > + } > + > + if (code =3D=3D TRAP_TRACE) > + { > + /* Unhandled at this level. */ > + return wptid; > + } > + > + if (code =3D=3D TRAP_SCE || code =3D=3D TRAP_SCX) > + { > + int sysnum =3D si->si_sysnum; > + > + if (!catch_syscall_enabled () || !catching_syscall_number (sysnu= m)) > + { > + /* If the core isn't interested in this event, ignore it. */ > + ourstatus->kind =3D TARGET_WAITKIND_SPURIOUS; > + return wptid; > + } > + > + ourstatus->kind =3D > + (code =3D=3D TRAP_SCE) ? TARGET_WAITKIND_SYSCALL_ENTRY : > + TARGET_WAITKIND_SYSCALL_RETURN; > + ourstatus->value.syscall_number =3D sysnum; > + return wptid; > + } > + > + if (code =3D=3D TRAP_BRKPT) > + { > + /* Unhandled at this level. */ > + return wptid; > + } > + > + /* Unclassified SIGTRAP event. */ > + ourstatus->kind =3D TARGET_WAITKIND_SPURIOUS; > + return wptid; > +} > + > +/* Implement the "insert_exec_catchpoint" target_ops method. */ > + > +int > +nbsd_nat_target::insert_exec_catchpoint (int pid) > +{ > + /* Nothing to do. */ > + return 0; > +} > + > +/* Implement the "remove_exec_catchpoint" target_ops method. */ > + > +int > +nbsd_nat_target::remove_exec_catchpoint (int pid) > +{ > + /* Nothing to do. */ > + return 0; > +} > + > +/* Implement the "set_syscall_catchpoint" target_ops method. */ > + > +int > +nbsd_nat_target::set_syscall_catchpoint (int pid, bool needed, > + int any_count, > + gdb::array_view sy= scall_counts) > +{ > + /* Ignore the arguments. inf-ptrace.c will use PT_SYSCALL which > + will catch all system call entries and exits. The system calls > + are filtered by GDB rather than the kernel. */ > + return 0; > +} > diff --git a/gdb/nbsd-nat.h b/gdb/nbsd-nat.h > index 256db4b9017..6e14cbb889d 100644 > --- a/gdb/nbsd-nat.h > +++ b/gdb/nbsd-nat.h > @@ -38,6 +38,15 @@ struct nbsd_nat_target : public inf_ptrace_target >=20 > int find_memory_regions (find_memory_region_ftype func, void *data) = override; > bool info_proc (const char *, enum info_proc_what) override; > + > + void resume (ptid_t, int, enum gdb_signal) override; > + ptid_t wait (ptid_t, struct target_waitstatus *, int) override; > + int insert_exec_catchpoint (int pid) override; > + int remove_exec_catchpoint (int pid) override; > + int set_syscall_catchpoint (int pid, bool needed, int any_count, > + gdb::array_view syscall_counts) > + override; > + > }; >=20 > #endif /* nbsd-nat.h */ > diff --git a/gdb/nbsd-tdep.c b/gdb/nbsd-tdep.c > index 52e0640e35c..d5d1b7211c1 100644 > --- a/gdb/nbsd-tdep.c > +++ b/gdb/nbsd-tdep.c > @@ -444,6 +444,21 @@ nbsd_info_proc_mappings_entry (int addr_bit, ULONG= EST kve_start, > } > } >=20 > +/* Implement the "get_syscall_number" gdbarch method. */ > + > +static LONGEST > +nbsd_get_syscall_number (struct gdbarch *gdbarch, thread_info *thread)= > +{ > + > + /* FreeBSD doesn't use gdbarch_get_syscall_number since NetBSD > + native targets fetch the system call number from the > + 'si_sysnum' member of siginfo_t in nbsd_nat_target::wait. > + However, system call catching requires this function to be > + set. */ > + > + internal_error (__FILE__, __LINE__, _("nbsd_get_sycall_number called= ")); > +} > + > /* See nbsd-tdep.h. */ >=20 > void > @@ -453,4 +468,7 @@ nbsd_init_abi (struct gdbarch_info info, struct gdb= arch *gdbarch) > set_gdbarch_gdb_signal_to_target (gdbarch, nbsd_gdb_signal_to_target= ); > set_gdbarch_skip_solib_resolver (gdbarch, nbsd_skip_solib_resolver);= > set_gdbarch_auxv_parse (gdbarch, svr4_auxv_parse); > + > + /* `catch syscall' */ > + set_gdbarch_get_syscall_number (gdbarch, nbsd_get_syscall_number); > } > -- > 2.25.0 >=20 --Bl3TR7zBTpEJJQ0AM3JeulNIn5jJBfp7e-- --8SIYVkxfDZ4WdfPIwh1JydQjEfF3KWlm3 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEELaxVpweEzw+lMDwuS7MI6bAudmwFAl6deUMACgkQS7MI6bAu dmxouQ//QjMiS1ZH98fOirluzpFM1fPxF1o1MEn7gL65J7+kGXsaekq4c8Ckt3k1 U/1hRK7saAVLjELfVULtfm3ManJPqNNaHKlB0nCwqnGYeANf4eVsyntBsVjC6X1x Ldp12Z2T2GX9znSKuEXxh3kMlSIUh/nE2ST/Z/sCXkArHjrTTGPJyYMXcGopOYCM lRX815d6McZRMOZGcgWPzCiRWEUBKjqYvV6KK3U2eXgFcBnYRi8N93FPi37MRikQ TxiyPZGkmLx8gw34VM+6/SzCN24foz7aUmj9lWktKrv/Uu176CSr60jZ6a9jXmFg bgmImA3YKhC4IfzPC9qt2o0qgo2qvVHoO9eA+/PVmp9vXtr/8Gg38pQ1xvA+9iaK 95MI+Ka8qV2r7gZoM2SoQAys83p6A2cFFcb7Ho8E58+pzgk1Dp3/HyeEN3C1J4qy /raSglR1w17fggt4qW9F0L9Bev5yiGbmyXyFkjEbguiIE5J7lXI0POMNuuqEFewB Yd4naFGBm8IiClN/SBw4gn9NEULJrz/ZvULSCLOpVBgjxHji44KBVjcJCR+bUnjS B2SC7imwYQyxKXjiEUdn/KE5mFZ4A/Rsv6Fcj/mUCqHLgAPvCtyL4j5oGBxSBrdR Rt6cPOrqAooaWcge6EGG5Oagbzhn9hGPavmxdnvSFdk+i+LA8WQ= =I1PC -----END PGP SIGNATURE----- --8SIYVkxfDZ4WdfPIwh1JydQjEfF3KWlm3--