bin/167103: dtrace generates core dump trying to build perl with
dtrace enabled
Steve Wills
swills at FreeBSD.org
Thu Apr 19 18:10:09 UTC 2012
>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:
More information about the freebsd-bugs
mailing list