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 228D2389683E for ; Thu, 30 Apr 2020 13:59:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 228D2389683E 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=1588255183; bh=fvSENbMXH9dGUJIt87HkzGQQdQPbQqpTEEy8JTLUh/s=; h=X-UI-Sender-Class:From:To:Subject:Date; b=TQy/qxPelERWTxeChfDOw886N6kxgdXuozVv/ar/98glZ9q3rxkyxjsOo4T9Jwg6u WfyN0oLlT9n7cP9NZt7aCAVN5KU3f32E5Dt3r9j4aPcBxXE0o0TxoDIBsntyA1DThg GF0XuSHzzSN9iJAbd48Sqnr3Uz749KpGY1v/+DLs= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [188.146.230.17] ([188.146.230.17]) by web-mail.gmx.net (3c-app-mailcom-bs10.server.lan [172.19.170.178]) (via HTTP); Thu, 30 Apr 2020 15:59:43 +0200 MIME-Version: 1.0 Message-ID: From: "Kamil Rytarowski" To: gdb-patches@sourceware.org Subject: [PATCH] Add support for NetBSD thread events (create, exit) Content-Type: multipart/mixed; boundary=trekuen-81840b5b-39fa-4a95-92c2-44ec456176e1 Date: Thu, 30 Apr 2020 15:59:43 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:FdxMM24BT2HaBajiRWoGdEquXmCW3TXkVptxFSlBgiuOI1a4t6ombMNqCj0qybhFAKKKe /cvg+dw90TJ1SitZOgruESKbO8PAs9BfjQ2E6Y8TE+y4bDN5ThAxaIWQDc1BNvtXP5GVMIzUEKVG TdJR33MFz5RDtWsB/bYOOiWipiY/ftbvHJGTlqyj2Ps9ffCeUuSoyD8IeU3+ioznnz83gR06uXzZ 7z7KZF/EPGE6SU18eSueoaxF9Y6pG1eK2O75ALzmJpixV1dvjd/gfwAO0u+XfYtw5+KgL9oaJsxX pE= X-UI-Out-Filterresults: notjunk:1;V03:K0:6+RnbjK9prk=:Nmw9xcKNV5IhdehdOsTBqi 0QFc1X/BmFjy1pRb+M0EEkDAX8z6Oxr0YQCzzwXJ3Dg1zviMKNeQY2pxINCGB85p0T7pperr6 zgBvPiojuV0NQ2O48W5cYYQ3Dszn0moDE7/6xFDkeUaH821OxYS5phJwN6RgB3WDnDZxgrt57 /s+wrRVZqJ/XaJGAz21N7fYSOs01IZGja1gJTZr6iE259O29RP83iX5AlAdtyhiNzoZjSsH66 VlSDVaskgcg2IEBPD+/EIwovGoFwiBbRIlH6gWe/pAoHoZDPrP1udGF5RYx64eZVnXoVjhaET CI7uGttXX1giBjp2ob5BXHOygtqrq/ga7rehw6kKKrEFN6JHC+bLzzJUN6xa2xSNQmrCiPUYz O6xRaAwGZO9SEOk9LGz9nLNnrRDUpOTWuBfElS4NKVei67oZ9vqurpMxnB9XBBwhl1TPYDLrG uIytOnwAe6avJolw104CdkUxWgdhazDgYAi5ZNfjv3/jZVwoV96O0pTuqS4RnJNH0isLRzmmS WoudeLYExRwUVVP5znu9V3GMnzwUEpupLQA0s1BaUDe49oX+wTsvOFC4zgb/g4JcisMN2FtqL QarpmDj5H0sWVA8hKikfMdHo439CHft+wxAOi50Mq6p/TGar14tdKs6z4pNq42MUfV9LbQhgz k45IabEc0KvJu7dCHWFY7LdO+Sbs4bGdL2WpU+6E60gCj/n8sLhGKGRKVbYfw4CGnw+w= X-Spam-Status: No, score=-21.3 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, RCVD_IN_MSPIKE_H2, 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: Thu, 30 Apr 2020 13:59:55 -0000 --trekuen-81840b5b-39fa-4a95-92c2-44ec456176e1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hello, Please review. commit 5446f5e7983ad9383e3bc0469327c94baa5e0587 (HEAD -> netbsd-3) Author: Kamil Rytarowski Date: Thu Apr 30 16:13:33 2020 +0200 Add support for NetBSD thread events (create, exit) Report LWP CREATE and LWP EXIT events and setup this on post_attach() and post_startup_inferior(). Stop reinitializing the list of recognized threads in update_thread_li= st(). Handle LWP CREATE and EXIT events in nbsd_nat_target::wait(). gdb/ChangeLog: * nbsd-nat.c (nbsd_enable_proc_events) (nbsd_nat_target::post_startup_inferior): Add. (nbsd_nat_target::post_attach): Call `nbsd_enable_proc_events'= . (nbsd_nat_target::update_thread_list): Rewrite. (nbsd_nat_target::wait): Handle "PTRACE_LWP_EXIT" and "PTRACE_LWP_CREATE". * nbsd-nat.h (nbsd_nat_target::post_startup_inferior): Add. --trekuen-81840b5b-39fa-4a95-92c2-44ec456176e1 Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Add-support-for-NetBSD-thread-events-create-exit.patch Content-Transfer-Encoding: quoted-printable =46rom 5446f5e7983ad9383e3bc0469327c94baa5e0587 Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski Date: Thu, 30 Apr 2020 16:13:33 +0200 Subject: [PATCH] Add support for NetBSD thread events (create, exit) Report LWP CREATE and LWP EXIT events and setup this on post_attach() and post_startup_inferior(). Stop reinitializing the list of recognized threads in update_thread_list()= . Handle LWP CREATE and EXIT events in nbsd_nat_target::wait(). gdb/ChangeLog: * nbsd-nat.c (nbsd_enable_proc_events) (nbsd_nat_target::post_startup_inferior): Add. (nbsd_nat_target::post_attach): Call `nbsd_enable_proc_events'. (nbsd_nat_target::update_thread_list): Rewrite. (nbsd_nat_target::wait): Handle "PTRACE_LWP_EXIT" and "PTRACE_LWP_CREATE". * nbsd-nat.h (nbsd_nat_target::post_startup_inferior): Add. =2D-- gdb/ChangeLog | 10 ++++++ gdb/nbsd-nat.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++-- gdb/nbsd-nat.h | 1 + 3 files changed, 90 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 830bc30979..22099db259 100644 =2D-- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2020-04-30 Kamil Rytarowski + + * nbsd-nat.c (nbsd_enable_proc_events) + (nbsd_nat_target::post_startup_inferior): Add. + (nbsd_nat_target::post_attach): Call `nbsd_enable_proc_events'. + (nbsd_nat_target::update_thread_list): Rewrite. + (nbsd_nat_target::wait): Handle "PTRACE_LWP_EXIT" and + "PTRACE_LWP_CREATE". + * nbsd-nat.h (nbsd_nat_target::post_startup_inferior): Add. + 2020-04-29 Simon Marchi * gdbarch.sh (do_read): Add shellcheck disable directive for diff --git a/gdb/nbsd-nat.c b/gdb/nbsd-nat.c index b04e634b54..f8c917076b 100644 =2D-- a/gdb/nbsd-nat.c +++ b/gdb/nbsd-nat.c @@ -222,11 +222,37 @@ nbsd_add_threads (nbsd_nat_target *target, pid_t pid= ) nbsd_thread_lister (pid, fn); } +/* Enable additional event reporting on new processes. */ + +static void +nbsd_enable_proc_events (pid_t pid) +{ + int events; + + if (ptrace (PT_GET_EVENT_MASK, pid, &events, sizeof (events)) =3D=3D -1= ) + perror_with_name (("ptrace")); + + events |=3D PTRACE_LWP_CREATE; + events |=3D PTRACE_LWP_EXIT; + + if (ptrace (PT_SET_EVENT_MASK, pid, &events, sizeof (events)) =3D=3D -1= ) + perror_with_name (("ptrace")); +} + +/* Implement the "post_startup_inferior" target_ops method. */ + +void +nbsd_nat_target::post_startup_inferior (ptid_t ptid) +{ + nbsd_enable_proc_events (ptid.pid ()); +} + /* Implement the "post_attach" target_ops method. */ void nbsd_nat_target::post_attach (int pid) { + nbsd_enable_proc_events (pid); nbsd_add_threads (this, pid); } @@ -235,9 +261,7 @@ nbsd_nat_target::post_attach (int pid) void nbsd_nat_target::update_thread_list () { - prune_threads (); - - nbsd_add_threads (this, inferior_ptid.pid ()); + delete_exited_threads (); } /* Convert PTID to a string. */ @@ -686,9 +710,61 @@ nbsd_nat_target::wait (ptid_t ptid, struct target_wai= tstatus *ourstatus, if (code <=3D SI_USER || code =3D=3D SI_NOINFO) return wptid; + /* Process state for threading events */ + ptrace_state_t pst =3D {}; + if (code =3D=3D TRAP_LWP) + { + if (ptrace (PT_GET_PROCESS_STATE, pid, &pst, sizeof (pst)) =3D=3D -= 1) + perror_with_name (("ptrace")); + } + + if (code =3D=3D TRAP_LWP && pst.pe_report_event =3D=3D PTRACE_LWP_EXIT) + { + /* If GDB attaches to a multi-threaded process, exiting + threads might be skipped during post_attach that + have not yet reported their PTRACE_LWP_EXIT event. + Ignore exited events for an unknown LWP. */ + thread_info *thr =3D find_thread_ptid (this, wptid); + if (thr =3D=3D nullptr) + ourstatus->kind =3D TARGET_WAITKIND_SPURIOUS; + else + { + ourstatus->kind =3D TARGET_WAITKIND_THREAD_EXITED; + /* NetBSD does not store an LWP exit status. */ + ourstatus->value.integer =3D 0; + + if (print_thread_events) + printf_unfiltered (_("[%s exited]\n"), + target_pid_to_str (wptid).c_str ()); + delete_thread (thr); + } + + /* The GDB core expects that the rest of the threads are running. = */ + if (ptrace (PT_CONTINUE, pid, (void *) 1, 0) =3D=3D -1) + perror_with_name (("ptrace")); + + return wptid; + } + if (in_thread_list (this, ptid_t (pid))) thread_change_ptid (this, ptid_t (pid), wptid); + if (code =3D=3D TRAP_LWP && pst.pe_report_event =3D=3D PTRACE_LWP_CREAT= E) + { + /* If GDB attaches to a multi-threaded process, newborn + threads might be added by nbsd_add_threads that have + not yet reported their PTRACE_LWP_CREATE event. Ignore + born events for an already-known LWP. */ + if (in_thread_list (this, wptid)) + ourstatus->kind =3D TARGET_WAITKIND_SPURIOUS; + else + { + add_thread (this, wptid); + ourstatus->kind =3D TARGET_WAITKIND_THREAD_CREATED; + } + return wptid; + } + if (code =3D=3D TRAP_EXEC) { ourstatus->kind =3D TARGET_WAITKIND_EXECD; diff --git a/gdb/nbsd-nat.h b/gdb/nbsd-nat.h index 6e14cbb889..4a8b96026e 100644 =2D-- a/gdb/nbsd-nat.h +++ b/gdb/nbsd-nat.h @@ -32,6 +32,7 @@ struct nbsd_nat_target : public inf_ptrace_target bool thread_alive (ptid_t ptid) override; const char *thread_name (struct thread_info *thr) override; + void post_startup_inferior (ptid_t ptid) override; void post_attach (int pid) override; void update_thread_list () override; std::string pid_to_str (ptid_t ptid) override; =2D- 2.25.2 --trekuen-81840b5b-39fa-4a95-92c2-44ec456176e1--