From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 40831 invoked by alias); 14 Jan 2016 15:03:56 -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 40811 invoked by uid 89); 14 Jan 2016 15:03:55 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.8 required=5.0 tests=BAYES_50,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=sk:normal_, alloca, D*FreeBSD.org, jhbFreeBSDorg X-Spam-User: qpsmtpd, 2 recipients X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Thu, 14 Jan 2016 15:03:53 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 807FCC1F92; Thu, 14 Jan 2016 15:03:52 +0000 (UTC) Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u0EF3pT6010701; Thu, 14 Jan 2016 10:03:51 -0500 Message-ID: <5697B8D6.9010301@redhat.com> Date: Thu, 14 Jan 2016 15:03:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: John Baldwin , gdb-patches@sourceware.org, binutils@sourceware.org Subject: Re: [PATCH v2 3/6] Display per-thread information for threads in FreeBSD cores. References: <1452721551-657-1-git-send-email-jhb@FreeBSD.org> <1452721551-657-4-git-send-email-jhb@FreeBSD.org> In-Reply-To: <1452721551-657-4-git-send-email-jhb@FreeBSD.org> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-SW-Source: 2016-01/txt/msg00300.txt.bz2 On 01/13/2016 09:45 PM, John Baldwin wrote: > Display the LWP ID of each thread in a FreeBSD core. Extract thread names > from the per-thread THRMISC note. > > gdb/ChangeLog: > > * fbsd_tdep.c (fbsd_core_pid_to_str): New function. > (fbsd_init_abi): Add "core_pid_to_str" gdbarch method. > --- > gdb/ChangeLog | 5 +++++ > gdb/fbsd-tdep.c | 41 +++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 46 insertions(+) > > diff --git a/gdb/ChangeLog b/gdb/ChangeLog > index 471d02b..93760ba 100644 > --- a/gdb/ChangeLog > +++ b/gdb/ChangeLog > @@ -1,3 +1,8 @@ > +2016-01-09 John Baldwin > + > + * fbsd_tdep.c (fbsd_core_pid_to_str): New function. > + (fbsd_init_abi): Add "core_pid_to_str" gdbarch method. > + > 2016-01-08 Yao Qi > > * extension.c: Include target.h. > diff --git a/gdb/fbsd-tdep.c b/gdb/fbsd-tdep.c > index 0ef94d6..6851cc1 100644 > --- a/gdb/fbsd-tdep.c > +++ b/gdb/fbsd-tdep.c > @@ -28,6 +28,46 @@ > #include "fbsd-tdep.h" > > > +/* This is how we want PTIDs from core files to be printed. */ > + > +static char * > +fbsd_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid) > +{ > + static char buf[80], name[64]; This static "name" buffer appears unused, and then masked by the "name" pointer below. > + struct bfd_section *section; > + bfd_size_type size; > + char sectionstr[32]; > + > + if (ptid_get_lwp (ptid) != 0) > + { > + snprintf (sectionstr, sizeof sectionstr, ".thrmisc/%ld", > + ptid_get_lwp (ptid)); xsnprintf. > + section = bfd_get_section_by_name (core_bfd, sectionstr); > + if (section != NULL) > + { > + char *name; > + > + size = bfd_section_size (core_bfd, section); > + name = alloca (size + 1); > + if (bfd_get_section_contents (core_bfd, section, name, (file_ptr) 0, > + size) && name[0] != '\0') This indentation / line break reads unusual to me. I think breaking before the && would be clearer: if (bfd_get_section_contents (core_bfd, section, name, (file_ptr) 0, size) && name[0] != '\0') Guess this should check size > 0 as well, otherwise name[0] contains garbage. > + { > + name[size] = '\0'; > + if (strcmp(name, elf_tdata (core_bfd)->core->program) != 0) Missing space after strcmp. Is this ".thrmisc" section documented somewhere? Could you add a small comment on what this entry you're skipping means? > + { > + snprintf (buf, sizeof buf, "LWP %ld \"%s\"", > + ptid_get_lwp (ptid), name); xsnprintf. > + return buf; > + } > + } > + } > + snprintf (buf, sizeof buf, "LWP %ld", ptid_get_lwp (ptid)); xsnprintf. > + return buf; > + } > + > + return normal_pid_to_str (ptid); > +} > + > static int > find_signalled_thread (struct thread_info *info, void *data) > { > @@ -132,5 +172,6 @@ fbsd_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size) > void > fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) > { > + set_gdbarch_core_pid_to_str (gdbarch, fbsd_core_pid_to_str); > set_gdbarch_make_corefile_notes (gdbarch, fbsd_make_corefile_notes); > } > Thanks, Pedro Alves