Date: Fri, 09 Nov 2012 08:36:11 -0600 From: Bryan Drewery <bdrewery@freebsd.org> To: Raphael Kubo da Costa <rakuco@freebsd.org>, Luca Pizzamiglio <luca.pizzamiglio@gmail.com> Cc: svn-ports-head@freebsd.org, svn-ports-all@freebsd.org, ports-committers@freebsd.org Subject: Re: svn commit: r306581 - in head/devel/gdb: . files Message-ID: <509D14DB.3080402@FreeBSD.org> In-Reply-To: <201210282150.q9SLoYAI007166@svn.freebsd.org> References: <201210282150.q9SLoYAI007166@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 10/28/2012 4:50 PM, Raphael Kubo da Costa wrote: > Author: rakuco > Date: Sun Oct 28 21:50:34 2012 > New Revision: 306581 > URL: http://svn.freebsd.org/changeset/ports/306581 > > Log: > - Show thread names, closing ports/172572. Thanks to Mark Lokowich. > - It is now possible to choose which readline version to use, closing > ports/172077. Thanks to Jan Beich. > - Fix patches to remove compilation warnings. > - Clean configure arguments to remove a compilation warning. > - Fix file permissions when the PYTHON option is enabled. > - Trim Makefile header. > > PR: ports/172828 > Submitted by: Luca Pizzammiglio <luca.pizzamiglio@gmail.com> (maintainer) > Feature safe: yes > For some reason this is now failing on amd64: http://pointyhat.freebsd.org/errorlogs/amd64-errorlogs/e.9.20121104103132/gdb-7.5_1.log Snippet: > checking for C compiler default output file name... > configure: error: in `/wrkdirs/usr/ports/devel/gdb/work/gdb-7.5': > configure: error: C compiler cannot create executables > See `config.log' for more details. > ===> Script "configure" failed unexpectedly. > Please report the problem to luca.pizzamiglio@gmail.com [maintainer] and > attach the "/wrkdirs/usr/ports/devel/gdb/work/gdb-7.5/config.log" including > the output of the failure of your make command. Also, it might be a good idea > to provide an overview of all packages installed on your system (e.g. a > /usr/local/sbin/pkg info -g -Ea). > *** Error code 1 Bryan > Modified: > head/devel/gdb/Makefile > head/devel/gdb/files/fbsd-threads.c > head/devel/gdb/files/patch-gdb-amd64fbsd-nat.c > head/devel/gdb/files/patch-gdb-i386fbsd-nat.c > > Modified: head/devel/gdb/Makefile > ============================================================================== > --- head/devel/gdb/Makefile Sun Oct 28 21:44:23 2012 (r306580) > +++ head/devel/gdb/Makefile Sun Oct 28 21:50:34 2012 (r306581) > @@ -24,13 +24,12 @@ CONFIGURE_ENV= CONFIGURED_M4=m4 CONFIGUR > CONFIGURE_ARGS= --program-suffix=${PORTVERSION:S/.//g} \ > --with-gdb-datadir=${PREFIX}/share/gdb${PORTVERSION:S/.//g} \ > --with-libiconv-prefix=${LOCALBASE} \ > - --with-system-readline \ > - --without-libunwind \ > + --without-libunwind-ia64 \ > --enable-target=all \ > --enable-tui > CFLAGS:= ${CFLAGS:C/ +$//} # blanks at EOL creep in sometimes > CFLAGS+= -DRL_NO_COMPAT > -EXCLUDE= dejagnu expect readline sim texinfo intl > +EXCLUDE= dejagnu expect sim texinfo intl > EXTRACT_AFTER_ARGS= | ${TAR} -xf - ${EXCLUDE:S/^/--exclude /} \ > --no-same-owner --no-same-permissions > VER= ${PORTVERSION:S/.//g} > @@ -39,13 +38,14 @@ MAN1= gdb${VER}.1 > > ONLY_FOR_ARCHS= i386 amd64 # untested elsewhere, might work > > -# Forcing to use readline.6 from ports (newer readline in FreeBSD world is not > -# compatible anymore). > -USE_READLINE= port > - > OPTIONS_DEFINE= DEBUG EXPAT PYTHON THREADS GDB_LINK > +OPTIONS_SINGLE_READLINE= BASE_READLINE BUNDLED_READLINE PORT_READLINE > +OPTIONS_SINGLE= READLINE > +BASE_READLINE_DESC= from base system (EXPERIMENTAL) > +BUNDLED_READLINE_DESC= from gdb distfile > +PORT_READLINE_DESC= from devel/readline port > GDB_LINK_DESC= Create the gdb link > -OPTIONS_DEFAULT= THREADS GDB_LINK > +OPTIONS_DEFAULT= THREADS GDB_LINK PORT_READLINE > > .include <bsd.port.options.mk> > > @@ -59,6 +59,19 @@ PLIST_SUB+= GDB_LINK="@comment " > USE_PYTHON= 2.5-2.7 > .endif > > +.if empty(PORT_OPTIONS:MBUNDLED_READLINE) > +EXCLUDE+= readline > +CONFIGURE_ARGS+= --with-system-readline > +.endif > + > +.if ${PORT_OPTIONS:MBASE_READLINE} > +CFLAGS+= -D_rl_echoing_p=readline_echoing_p > +USE_READLINE= base > +.endif > + > +.if ${PORT_OPTIONS:MPORT_READLINE} > +USE_READLINE= port > +.endif > .include <bsd.port.pre.mk> > > .if ${PORT_OPTIONS:MTHREADS} > @@ -97,7 +110,7 @@ post-patch: > > do-install: > ${INSTALL_PROGRAM} ${WRKSRC}/gdb/gdb ${PREFIX}/bin/gdb${VER} > - ${LN} ${PREFIX}/bin/gdb${VER} ${PREFIX}/bin/gdbtui${VER} > + ${LN} -sf ${PREFIX}/bin/gdb${VER} ${PREFIX}/bin/gdbtui${VER} > ${INSTALL_MAN} ${WRKSRC}/gdb/gdb.1 ${MAN1PREFIX}/man/man1/gdb${VER}.1 > .if ${PORT_OPTIONS:MGDB_LINK} > ${LN} -sf gdb${VER} ${PREFIX}/bin/gdb > @@ -107,4 +120,10 @@ do-install: > (cd ${WRKSRC}/gdb/data-directory; ${GMAKE} install-python ) > .endif > > +post-install: > +.if ${PORT_OPTIONS:MPYTHON} > + ${CHMOD} u+w ${PREFIX}/share/gdb${VER}/python/gdb/*.py* > + ${CHMOD} u+w ${PREFIX}/share/gdb${VER}/python/gdb/command/*.py* > +.endif > + > .include <bsd.port.post.mk> > > Modified: head/devel/gdb/files/fbsd-threads.c > ============================================================================== > --- head/devel/gdb/files/fbsd-threads.c Sun Oct 28 21:44:23 2012 (r306580) > +++ head/devel/gdb/files/fbsd-threads.c Sun Oct 28 21:50:34 2012 (r306581) > @@ -18,6 +18,15 @@ > along with this program; if not, write to the Free Software > Foundation, Inc., 59 Temple Place - Suite 330, > Boston, MA 02111-1307, USA. */ > +#include <stdio.h> > +#include <stdlib.h> > +#include <string.h> > +#include <err.h> > + > +#include <sys/param.h> > +#include <sys/sysctl.h> > +#include <sys/user.h> > +#include <libutil.h> > > #include <dlfcn.h> > #include <sys/types.h> > @@ -48,11 +57,19 @@ > > #define LIBTHREAD_DB_SO "libthread_db.so" > > +struct private_thread_info > +{ > + char *lwp_name; > +}; > + > struct ps_prochandle > { > pid_t pid; > }; > > +/* Defining the prototype of _initialize_thread_db to remove warning */ > +extern initialize_file_ftype _initialize_thread_db; > + > /* This module's target vectors. */ > static struct target_ops fbsd_thread_ops; > > @@ -76,8 +93,8 @@ static td_thragent_t *thread_agent; > /* The last thread we are single stepping */ > static ptid_t last_single_step_thread; > > -/* Pointers to the libthread_db functions. */ > > +/* Pointers to the libthread_db functions. */ > static td_err_e (*td_init_p) (void); > > static td_err_e (*td_ta_new_p) (struct ps_prochandle *ps, td_thragent_t **ta); > @@ -133,6 +150,7 @@ static CORE_ADDR td_create_bp_addr; > static CORE_ADDR td_death_bp_addr; > > /* Prototypes for local functions. */ > +static void fbsd_find_lwp_name(long lwpid, struct private_thread_info *info); > static void fbsd_thread_find_new_threads (struct target_ops *ops); > static int fbsd_thread_alive (struct target_ops *ops, ptid_t ptid); > static void attach_thread (ptid_t ptid, const td_thrhandle_t *th_p, > @@ -140,6 +158,9 @@ static void attach_thread (ptid_t ptid, > static void fbsd_thread_detach (struct target_ops *ops, char *args, > int from_tty); > > +CORE_ADDR fbsd_thread_get_local_address(struct target_ops *ops, > + ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset); > + > /* Building process ids. */ > > #define GET_PID(ptid) ptid_get_pid (ptid) > @@ -152,6 +173,13 @@ static void fbsd_thread_detach (struct t > #define BUILD_LWP(lwp, pid) ptid_build (pid, lwp, 0) > #define BUILD_THREAD(tid, pid) ptid_build (pid, 0, tid) > > +static void > +free_private_thread_info(struct private_thread_info *info) > +{ > + xfree(info->lwp_name); > + xfree(info); > +} > + > static char * > thread_db_err_str (td_err_e err) > { > @@ -237,7 +265,7 @@ static ptid_t > thread_from_lwp (ptid_t ptid, td_thrhandle_t *th, td_thrinfo_t *ti) > { > td_err_e err; > - > + > gdb_assert (IS_LWP (ptid)); > > if (fbsd_thread_active) > @@ -252,7 +280,7 @@ thread_from_lwp (ptid_t ptid, td_thrhand > } > } > > - /* the LWP is not mapped to user thread */ > + /* the LWP is not mapped to user thread */ > return BUILD_LWP (GET_LWP (ptid), GET_PID (ptid)); > } > > @@ -463,7 +491,7 @@ check_for_thread_db (void) > that at this point there is no guarantee that we actually have a > child process. */ > proc_handle.pid = GET_PID (inferior_ptid); > - > + > /* Now attempt to open a connection to the thread library. */ > err = td_ta_new_p (&proc_handle, &thread_agent); > switch (err) > @@ -477,7 +505,7 @@ check_for_thread_db (void) > push_target(&fbsd_thread_ops); > fbsd_thread_present = 1; > fbsd_thread_activate(); > - > + > break; > > default: > @@ -631,11 +659,24 @@ static void > attach_thread (ptid_t ptid, const td_thrhandle_t *th_p, > const td_thrinfo_t *ti_p, int verbose) > { > + struct private_thread_info *private; > + struct thread_info *tp = NULL; > + char *lwpstr = NULL; > td_err_e err; > > /* Add the thread to GDB's thread list. */ > if (!in_thread_list (ptid)) > - add_thread (ptid); > + { > + /* Add thread with info */ > + private = xmalloc(sizeof(struct private_thread_info)); > + gdb_assert(private != NULL); > + // Thread name is assigned when printed > + memset(private, 0, sizeof(struct private_thread_info)); > + > + tp = add_thread_with_info(ptid, private); > + tp->private = private; > + tp->private_dtor = free_private_thread_info; > + } > > if (ti_p->ti_state == TD_THR_UNKNOWN || ti_p->ti_state == TD_THR_ZOMBIE) > return; /* A zombie thread -- do not attach. */ > @@ -743,7 +784,7 @@ fbsd_thread_wait (struct target_ops *ops > a non-existing thread to fbsd_thread_resume causes error. However, > if the exiting thread is the currently selected thread, > then that is handled later in handle_inferior_event(), and we must > - not delete the currently selected thread. > + not delete the currently selected thread. > */ > if (!fbsd_thread_alive (ops, inferior_ptid) && !ptid_equal(inferior_ptid, ret)) > { > @@ -781,7 +822,7 @@ fbsd_lwp_fetch_registers (struct target_ > if (ptrace (PT_GETREGS, lwp, (caddr_t) &gregs, 0) == -1) > error ("Cannot get lwp %d registers: %s\n", lwp, safe_strerror (errno)); > supply_gregset (regcache, &gregs); > - > + > #ifdef PT_GETXMMREGS > if (ptrace (PT_GETXMMREGS, lwp, xmmregs, 0) == 0) > { > @@ -819,7 +860,7 @@ fbsd_thread_fetch_registers (struct targ > err = td_ta_map_id2thr_p (thread_agent, GET_THREAD (inferior_ptid), &th); > if (err != TD_OK) > error ("Cannot find thread %d: Thread ID=%ld, %s", > - pid_to_thread_id (inferior_ptid), > + pid_to_thread_id (inferior_ptid), > GET_THREAD (inferior_ptid), thread_db_err_str (err)); > > err = td_thr_getgregs_p (&th, gregset); > @@ -1051,7 +1092,7 @@ fbsd_thread_alive (struct target_ops *op > { > lwp = GET_LWP (ptid); > bfd_map_over_sections (core_bfd, fbsd_core_check_lwp, &lwp); > - return (lwp == 0); > + return (lwp == 0); > } > > /* check lwp in kernel */ > @@ -1091,10 +1132,74 @@ fbsd_thread_find_new_threads (struct tar > error ("Cannot find new threads: %s", thread_db_err_str (err)); > } > > +static void > +fbsd_find_lwp_name(long lwpid, struct private_thread_info *info) > +{ > + int error, name[4]; > + unsigned int i; > + struct kinfo_proc *kipp, *kip; > + char *lwpstr = info->lwp_name; > + int pid = inferior_ptid.pid; > + size_t len = 0; > + > + name[0] = CTL_KERN; > + name[1] = KERN_PROC; > + name[2] = KERN_PROC_PID | KERN_PROC_INC_THREAD; > + name[3] = pid; > + > + error = sysctl(name, 4, NULL, &len, NULL, 0); > + if (error < 0 && errno != ESRCH) { > + warn("sysctl: kern.proc.pid: %d", pid); > + return; > + } > + if (error < 0) > + return; > + > + kip = malloc(len); > + if (kip == NULL) > + err(-1, "malloc"); > + > + if (sysctl(name, 4, kip, &len, NULL, 0) < 0) { > + warn("sysctl: kern.proc.pid: %d", pid); > + free(kip); > + return; > + } > + > + for (i = 0; i < len / sizeof(*kipp); i++) { > + kipp = &kip[i]; > + if ((kipp->ki_tid == lwpid) && strlen(kipp->ki_ocomm) && > + (strcmp(kipp->ki_comm, kipp->ki_ocomm) != 0)) > + { > + // Found the LWP, update the name field > + if (lwpstr != NULL) > + { > + if (strcmp(lwpstr, kipp->ki_ocomm) != 0) > + { > + xfree(lwpstr); > + } > + else > + { > + // Name hasn't changed, just return > + break; > + } > + } > + > + len = strlen(kipp->ki_ocomm); > + lwpstr = xmalloc(len); > + strcpy(lwpstr, kipp->ki_ocomm); > + info->lwp_name = lwpstr; > + break; > + } > + } > + > + free(kip); > +} > + > static char * > fbsd_thread_pid_to_str (struct target_ops *ops, ptid_t ptid) > { > static char buf[64]; > + struct thread_info *tinfo = NULL; > > if (IS_THREAD (ptid)) > { > @@ -1112,10 +1217,25 @@ fbsd_thread_pid_to_str (struct target_op > error ("Cannot get thread info, Thread ID=%ld, %s", > GET_THREAD (ptid), thread_db_err_str (err)); > > + tinfo = find_thread_ptid(ptid); > + gdb_assert(tinfo != NULL); > + > if (ti.ti_lid != 0) > { > - snprintf (buf, sizeof (buf), "Thread %llx (LWP %d)", > - (unsigned long long)th.th_thread, ti.ti_lid); > + // Need to find the name of this LWP, even though it shouldn't change > + fbsd_find_lwp_name(ti.ti_lid, tinfo->private); > + > + if (tinfo->private->lwp_name == NULL) > + { > + snprintf(buf, sizeof (buf), "Thread %llx (LWP %d)", > + (unsigned long long)th.th_thread, ti.ti_lid); > + } > + else > + { > + snprintf(buf, sizeof (buf), "Thread %llx (LWP %d %s)", > + (unsigned long long)th.th_thread, ti.ti_lid, > + tinfo->private->lwp_name); > + } > } > else > { > @@ -1170,7 +1290,7 @@ static int > tsd_cb (thread_key_t key, void (*destructor)(void *), void *ignore) > { > struct minimal_symbol *ms; > - char *name; > + const char *name; > > ms = lookup_minimal_symbol_by_pc (extract_func_ptr (&destructor)); > if (!ms) > @@ -1333,7 +1453,7 @@ thread_db_load (void) > td_ta_event_getmsg_p = dlsym (handle, "td_ta_event_getmsg"); > td_thr_event_enable_p = dlsym (handle, "td_thr_event_enable"); > td_thr_tls_get_addr_p = dlsym (handle, "td_thr_tls_get_addr"); > - > + > return 1; > } > > @@ -1514,7 +1634,7 @@ ps_lstop(struct ps_prochandle *ph, lwpid > { > if (ptrace (PT_SUSPEND, lwpid, 0, 0) == -1) > return PS_ERR; > - return PS_OK; > + return PS_OK; > } > > ps_err_e > @@ -1522,7 +1642,7 @@ ps_lcontinue(struct ps_prochandle *ph, l > { > if (ptrace (PT_RESUME, lwpid, 0, 0) == -1) > return PS_ERR; > - return PS_OK; > + return PS_OK; > } > > ps_err_e > > Modified: head/devel/gdb/files/patch-gdb-amd64fbsd-nat.c > ============================================================================== > --- head/devel/gdb/files/patch-gdb-amd64fbsd-nat.c Sun Oct 28 21:44:23 2012 (r306580) > +++ head/devel/gdb/files/patch-gdb-amd64fbsd-nat.c Sun Oct 28 21:50:34 2012 (r306581) > @@ -1,6 +1,12 @@ > --- gdb/amd64fbsd-nat.c.orig 2012-02-09 17:06:44.000000000 +0100 > -+++ gdb/amd64fbsd-nat.c 2012-08-22 23:51:38.000000000 +0200 > -@@ -26,6 +26,7 @@ > ++++ gdb/amd64fbsd-nat.c 2012-08-30 10:58:55.000000000 +0200 > +@@ -21,11 +21,13 @@ > + #include "inferior.h" > + #include "regcache.h" > + #include "target.h" > ++#include "gregset.h" > + > + #include "gdb_assert.h" > #include <signal.h> > #include <stddef.h> > #include <sys/types.h> > @@ -8,7 +14,7 @@ > #include <sys/ptrace.h> > #include <sys/sysctl.h> > #include <machine/reg.h> > -@@ -93,6 +94,47 @@ > +@@ -93,6 +95,46 @@ > }; > > > @@ -28,7 +34,7 @@ > + do this for all registers. */ > + > +void > -+fill_gregset (struct regcache *regcache, gregset_t *gregsetp, int regnum) > ++fill_gregset (const struct regcache *regcache, gdb_gregset_t *gregsetp, int regnum) > +{ > + amd64_collect_native_gregset (regcache, gregsetp, regnum); > +} > @@ -47,12 +53,11 @@ > + do this for all registers. */ > + > +void > -+fill_fpregset (struct regcache *regcache, fpregset_t *fpregsetp, int regnum) > ++fill_fpregset (const struct regcache *regcache, gdb_fpregset_t *fpregsetp, int regnum) > +{ > + amd64_collect_fxsave (regcache, regnum, fpregsetp); > +} > + > -+ > /* Support for debugging kernel virtual memory images. */ > > #include <sys/types.h> > > Modified: head/devel/gdb/files/patch-gdb-i386fbsd-nat.c > ============================================================================== > --- head/devel/gdb/files/patch-gdb-i386fbsd-nat.c Sun Oct 28 21:44:23 2012 (r306580) > +++ head/devel/gdb/files/patch-gdb-i386fbsd-nat.c Sun Oct 28 21:50:34 2012 (r306581) > @@ -1,14 +1,17 @@ > ---- gdb/i386fbsd-nat.c.orig 2010-01-01 02:31:36.000000000 -0500 > -+++ gdb/i386fbsd-nat.c 2010-10-22 13:57:48.705926000 -0400 > -@@ -24,6 +24,7 @@ > +--- gdb/i386fbsd-nat.c.orig 2012-05-24 18:39:09.000000000 +0200 > ++++ gdb/i386fbsd-nat.c 2012-08-29 17:19:57.000000000 +0200 > +@@ -21,8 +21,10 @@ > + #include "inferior.h" > + #include "regcache.h" > #include "target.h" > ++#include "gregset.h" > > #include <sys/types.h> > +#include <sys/procfs.h> > #include <sys/ptrace.h> > #include <sys/sysctl.h> > > -@@ -81,6 +82,49 @@ > +@@ -80,6 +82,49 @@ > } > > > @@ -28,7 +31,7 @@ > + do this for all registers. */ > + > +void > -+fill_gregset (struct regcache *regcache, gregset_t *gregsetp, int regnum) > ++fill_gregset (const struct regcache *regcache, gdb_gregset_t *gregsetp, int regnum) > +{ > + i386bsd_collect_gregset (regcache, gregsetp, regnum); > +} > @@ -49,7 +52,7 @@ > + do this for all registers. */ > + > +void > -+fill_fpregset (struct regcache *regcache, fpregset_t *fpregsetp, int regnum) > ++fill_fpregset (const struct regcache *regcache, gdb_fpregset_t *fpregsetp, int regnum) > +{ > + i387_collect_fsave (regcache, regnum, fpregsetp); > +} > @@ -58,7 +61,7 @@ > /* Support for debugging kernel virtual memory images. */ > > #include <sys/types.h> > -@@ -141,7 +185,6 @@ > +@@ -141,7 +186,6 @@ > #endif /* HAVE_PT_GETDBREGS */ > > > -- Regards, Bryan Drewery bdrewery@freenode/EFNet
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?509D14DB.3080402>