Date: Wed, 10 Oct 2012 11:54:14 GMT From: Norbert Koch <nkoch@demig.de> To: freebsd-gnats-submit@FreeBSD.org Subject: ports/172572: [patch] devel/gdb: add missing thread names Message-ID: <201210101154.q9ABsEwS091306@red.freebsd.org> Resent-Message-ID: <201210101200.q9AC01Gl029177@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 172572 >Category: ports >Synopsis: [patch] devel/gdb: add missing thread names >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: update >Submitter-Id: current-users >Arrival-Date: Wed Oct 10 12:00:01 UTC 2012 >Closed-Date: >Last-Modified: >Originator: Norbert Koch >Release: 9.0-RELEASE >Organization: >Environment: >Description: I have an application that sets thread names using pthread_set_name_np(). Those names are visible using FreeBSD's gdb 6.1.1, but not using the latest gdb 7.5 from ports. The required function and its use in fbsd-threads.c are missing in the port's fbsd-threads.c.patch. I simply added the function without changes and it seems to work. Any reason why this is missing in the port? Any known problems? >How-To-Repeat: >Fix: --- gdb.org/Makefile 2012-10-02 08:40:29.000000000 +0200 +++ gdb/Makefile 2012-10-10 13:34:42.000000000 +0200 @@ -7,7 +7,7 @@ PORTNAME= gdb PORTVERSION= 7.5 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= devel MASTER_SITES= GNU --- gdb.org/files/fbsd-threads.c 2012-08-28 09:24:15.000000000 +0200 +++ gdb/files/fbsd-threads.c 2012-10-10 13:34:18.000000000 +0200 @@ -431,6 +431,46 @@ fbsd_thread_present = 0; } +static char * +fbsd_thread_get_name (lwpid_t lwpid) +{ + static char last_thr_name[MAXCOMLEN + 1]; + char section_name[32]; + struct ptrace_lwpinfo lwpinfo; + bfd_size_type size; + struct bfd_section *section; + + if (target_has_execution) + { + if (ptrace (PT_LWPINFO, lwpid, (caddr_t)&lwpinfo, sizeof (lwpinfo)) == -1) + goto fail; + strncpy (last_thr_name, lwpinfo.pl_tdname, sizeof (last_thr_name) - 1); + } + else + { + snprintf (section_name, sizeof (section_name), ".tname/%u", lwpid); + section = bfd_get_section_by_name (core_bfd, section_name); + if (! section) + goto fail; + + /* Section size fix-up. */ + size = bfd_section_size (core_bfd, section); + if (size > sizeof (last_thr_name)) + size = sizeof (last_thr_name); + + if (! bfd_get_section_contents (core_bfd, section, last_thr_name, + (file_ptr)0, size)) + goto fail; + if (last_thr_name[0] == '\0') + goto fail; + } + last_thr_name[sizeof (last_thr_name) - 1] = '\0'; + return last_thr_name; +fail: + strcpy (last_thr_name, "<unknown>"); + return last_thr_name; +} + static void check_for_thread_db (void) { @@ -1114,8 +1154,9 @@ if (ti.ti_lid != 0) { - snprintf (buf, sizeof (buf), "Thread %llx (LWP %d)", - (unsigned long long)th.th_thread, ti.ti_lid); + snprintf (buf, sizeof (buf), "Thread %llx (LWP %d/%s)", + (unsigned long long)th.th_thread, ti.ti_lid, + fbsd_thread_get_name (ti.ti_lid)); } else { >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201210101154.q9ABsEwS091306>