Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 19 Apr 2012 18:02:20 GMT
From:      Steve Wills <swills@FreeBSD.org>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   bin/167103: dtrace generates core dump trying to build perl with dtrace enabled
Message-ID:  <201204191802.q3JI2KtZ038058@red.freebsd.org>
Resent-Message-ID: <201204191810.q3JIA9Xj081390@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         167103
>Category:       bin
>Synopsis:       dtrace generates core dump trying to build perl with dtrace enabled
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Apr 19 18:10:08 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator:     Steve Wills
>Release:        
>Organization:
>Environment:
>Description:
Try to build perl with dtrace enabled. In this case, I am getting perl from their git repo:

  git clone git://perl5.git.perl.org/perl.git perl

then applying a small patch:


diff --git a/Makefile.SH b/Makefile.SHindex ba5ab79..d4f609d 100755
--- a/Makefile.SH
+++ b/Makefile.SH
@@ -225,7 +225,7 @@ minidtrace_o=''
 case "$usedtrace" in
 define|true)
        dtrace_h='perldtrace.h' 
-       $dtrace -G -s perldtrace.d -o perldtrace.tmp >/dev/null 2>&1 \
+       $dtrace -64 -G -s perldtrace.d -o perldtrace.tmp >/dev/null 2>&1 \
                && rm -f perldtrace.tmp && dtrace_o='perldtrace$(OBJ_EXT)' \
                && minidtrace_o='miniperldtrace$(OBJ_EXT)'        ;;
@@ -548,6 +548,7 @@ splintfiles = $(c1)
  .c$(OBJ_EXT):
         $(CCCMD) $(PLDLFLAGS) $*.c
+       ctfconvert -L DEFAULT $@  .c.i: 

        $(CCCMDSRC) -E $*.c > $*.i
diff --git a/hints/freebsd.sh b/hints/freebsd.sh
index a67c0bb..344a847 100644
--- a/hints/freebsd.sh
+++ b/hints/freebsd.sh
@@ -309,3 +309,7 @@ esac
 # Meanwhile, the following workaround should be safe on all versions
 # of FreeBSD.
 d_printf_format_null='undef'
+
+case "$usedtrace" in
+$define|true|[Yy]*) libswanted="$libswanted dtrace dwarf elf proc ctf rtld_db z pthread"
+esac

Note, the fact that the -64 is needed there may be another, separate bug.

After this, I configure with:

/usr/bin/env CC="cc" CPP="cpp" CXX="c++"  CFLAGS="-O2 -pipe -g -fno-omit-frame-pointer -fno-strict-aliasing" CPPFLAGS="" CXXFLAGS="-O2 -pipe -g -fno-omit-frame-pointer -fno-strict-aliasing"  LDFLAGS=""  INSTALL="/usr/bin/install -c "  INSTALL_DATA="install   -m 444"  INSTALL_LIB="install    -m 444"  INSTALL_PROGRAM="install    -m 555"  INSTALL_SCRIPT="install   -m 555"  LANG="" LC_ALL="" LC_COLLATE="" LC_CTYPE=""  LC_MESSAGES="" LC_MONETARY="" LC_NUMERIC=""  LC_TIME="" UNAME_v="$(uname -v | sed 'y/=/ /')" SHELL=/bin/sh CONFIG_SHELL=/bin/sh ./Configure -sde -Dprefix=/usr/local  -Ui_malloc -Ui_iconv -Uinstallusrbinperl  -Dcc="cc" -Duseshrplib -Dinc_version_list=none  -Dccflags=-DAPPLLIB_EXP=\"/usr/local/lib/perl5/5.12.4/BSDPAN\" -Doptimize="-O2 -pipe -g -fno-omit-frame-pointer -fno-strict-aliasing" -Ui_gdbm -Dusedtrace=define -Dusethreads=n -Dusemymalloc=n -Duse64bitint -Dusedevel

Then build via make. This produces this error:

/usr/sbin/dtrace -G -s perldtrace.d -o miniperldtrace.o perlmini.o opmini.o miniperlmain.o   gv.o toke.o perly.o pad.o regcomp.o dump.o util.o mg.o reentr.o mro.o keywords.o hv.o av.o run.o pp_hot.o sv.o pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o utf8.o taint.o deb.o universal.o globals.o perlio.o perlapi.o numeric.o mathoms.o locale.o pp_pack.o pp_sort.o  perlmini.o
dtrace: (malloc) /usr/src/lib/libc/stdlib/malloc.c:2644: Failed assertion: "(run->regs_mask[elm] & (1U << bit)) == 0"*** [miniperldtrace.o] Signal 6

Which shows a core dump in the dtrace command line utility. Backtrace on that looks like this:

% gdb /usr/sbin/dtrace dtrace.core [GDB will not be able to debug user-mode threads: Undefined symbol "td_thr_getxmmregs"]GNU gdb 6.1.1 [FreeBSD]Copyright 2004 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type "show copying" to see the conditions.There is absolutely no warranty for GDB.  Type "show warranty" for details.This GDB was configured as "amd64-marcel-freebsd"...Core was generated by `dtrace'.Program terminated with signal 6, Aborted.Reading symbols from /lib/libthr.so.3...done.
Loaded symbols for /lib/libthr.so.3Reading symbols from /lib/libdtrace.so.2...done.Loaded symbols for /lib/libdtrace.so.2
Reading symbols from /usr/lib/libproc.so.2...done.
Loaded symbols for /usr/lib/libproc.so.2
Reading symbols from /lib/libctf.so.2...done.
Loaded symbols for /lib/libctf.so.2Reading symbols from /usr/lib/libelf.so.1...done.
Loaded symbols for /usr/lib/libelf.so.1
Reading symbols from /lib/libz.so.6...done.
Loaded symbols for /lib/libz.so.6
Reading symbols from /lib/libutil.so.9...done.
Loaded symbols for /lib/libutil.so.9
Reading symbols from /usr/lib/librtld_db.so.2...done.
Loaded symbols for /usr/lib/librtld_db.so.2
Reading symbols from /lib/libc.so.7...done.
Loaded symbols for /lib/libc.so.7
Reading symbols from /libexec/ld-elf.so.1...done.
Loaded symbols for /libexec/ld-elf.so.1
#0  0x000000080198be7c in thr_kill () at thr_kill.S:3
3       RSYSCALL(thr_kill)
(gdb) bt
#0  0x000000080198be7c in thr_kill () at thr_kill.S:3
#1  0x0000000801a2f72b in abort () at /usr/src/lib/libc/stdlib/abort.c:65
#2  0x00000008019af43c in arena_dalloc_bin (arena=0x607f30, chunk=0x802000000, ptr=0x802066800, mapelm=Variable "mapelm" is not available.
) at /usr/src/lib/libc/stdlib/malloc.c:2586
#3  0x00000008019b0f13 in idalloc (ptr=0x802066800) at /usr/src/lib/libc/stdlib/malloc.c:4318
#4  0x00000008019b1cf5 in free (ptr=0x802066800) at /usr/src/lib/libc/stdlib/malloc.c:6168
#5  0x0000000800a5d244 in dt_link_error (dtp=0x80202c000, elf=Variable "elf" is not available.
) at /usr/src/cddl/lib/libdtrace/../../../cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c:1095
#6  0x0000000800a5d34f in process_obj (dtp=0x80202c000, obj=0x7fffffffd6a3 "pp_ctl.o", eprobesp=0x7fffffffc4e8)
    at /usr/src/cddl/lib/libdtrace/../../../cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c:1587
#7  0x0000000800a5e4f5 in dtrace_program_link (dtp=0x80202c000, pgp=0x8042f1a00, dflags=2, file=0x80201e030 "miniperldtrace.o", objc=39, objv=0x802018188)
    at /usr/src/cddl/lib/libdtrace/../../../cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c:1682
#8  0x0000000000404789 in main (argc=Variable "argc" is not available.
) at /usr/src/cddl/usr.sbin/dtrace/../../../cddl/contrib/opensolaris/cmd/dtrace/dtrace.c:682
Current language:  auto; currently asm
(gdb)
>How-To-Repeat:
See above
>Fix:
no idea

>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201204191802.q3JI2KtZ038058>