From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 51033 invoked by alias); 13 Jan 2016 21:46:31 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 50991 invoked by uid 89); 13 Jan 2016 21:46:31 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=1.5 required=5.0 tests=AWL,BAYES_50,SPF_HELO_PASS,SPF_SOFTFAIL autolearn=no version=3.3.2 spammy=elfc, UD:elf.c, elf.c, 797 X-Spam-User: qpsmtpd, 2 recipients X-HELO: bigwig.baldwin.cx Received: from bigwig.baldwin.cx (HELO bigwig.baldwin.cx) (96.47.65.170) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Wed, 13 Jan 2016 21:46:29 +0000 Received: from ralph.com (c-73-231-226-104.hsd1.ca.comcast.net [73.231.226.104]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 80955B93C; Wed, 13 Jan 2016 16:46:26 -0500 (EST) From: John Baldwin To: gdb-patches@sourceware.org, binutils@sourceware.org Subject: [PATCH v2 0/6] Support kernel-backed user threads on FreeBSD Date: Wed, 13 Jan 2016 21:46:00 -0000 Message-Id: <1452721551-657-1-git-send-email-jhb@FreeBSD.org> X-IsSubscribed: yes X-SW-Source: 2016-01/txt/msg00274.txt.bz2 This set of patches adds support for examining kernel-backed user threads on FreeBSD. There is more history in a comment in fbsd-nat.c, but this target uses ptrace directly (instead of libthread_db) to support the current threading library (libthr) on FreeBSD which uses a kernel thread for each user thread. Support for thread names in both core dumps (via FreeBSD's OS-specific NT_THRMISC core note) and live is supported as is scheduler locking. gcore generates register notes for each thread as well. The first two patches are to binutils to support FreeBSD-specific core notes. The last four are to GDB. Changes since the first version are that ptids for fbsd-nat always include an LWP. The default ptid for an inferior is changed to include the lwp via thread_change_ptid() on the first stop in fbsd_wait(). I also changed the fork tracing to include the LWP of the new child process in the ptid for the child from the start. I did not let the new child "auto-discover" its LWP due to the following race: The first stop of a new child process is not reported directly to the main loop (it is reported instead via the 'related_pid' of the parent process fork event). As such, there is no 'thread' in gdb yet whose ptid can be updated to include the LWP when that first stop is reported. If the next stop from the child process reports the birth of a new LWP, the existing logic would have use that LWP to replace the sole thread and would not include the "main" thread in the thread list. Rather than rescanning all threads in that case, it seems simpler and more straightforward to simulate the effect of thread_change_ptid() on the first child stop by reporting the full ptid (including LWP) of the new child process in 'related_pid'. John Baldwin (6): Add support to readelf for reading FreeBSD ELF core notes. Add a psuedosection for the NT_FREEBSD_THRMISC note. Display per-thread information for threads in FreeBSD cores. Use LWP IDs with ptrace register requests on FreeBSD. Add support for LWP-based threads on FreeBSD. Dump register notes for each thread when generating a FreeBSD core. bfd/ChangeLog | 4 + bfd/elf.c | 7 + binutils/ChangeLog | 5 + binutils/readelf.c | 35 +++++ gdb/ChangeLog | 71 +++++++++ gdb/amd64bsd-nat.c | 35 +++-- gdb/config.in | 3 + gdb/configure | 16 ++ gdb/configure.ac | 7 + gdb/fbsd-nat.c | 414 ++++++++++++++++++++++++++++++++++++++++++++++---- gdb/fbsd-tdep.c | 185 ++++++++++++++++++---- gdb/i386bsd-nat.c | 41 +++-- gdb/ppcfbsd-nat.c | 23 ++- include/elf/ChangeLog | 27 ++++ include/elf/common.h | 14 ++ 15 files changed, 797 insertions(+), 90 deletions(-) create mode 100644 include/elf/ChangeLog -- 2.7.0