Bug #13041
closedruby 2.4 rc1 dtrace build fixes
Description
In FreeBSD before 11.0, using dtrace -G or -h will not work in a jail or without dtrace kernel modules loaded unless the -xnolibs flag is passed as well. Since we build in jails, this is needed during our build, so we have this patch:
We have used it with ruby 2.2, and 2.3 for a long time. Please consider it or a similar change for Ruby 2.4
Updated by swills (Steve Wills) about 8 years ago
Sorry, forgot the configure fix as well:
(first part only, rest is other fixes)
Updated by nobu (Nobuyoshi Nakada) about 8 years ago
- Status changed from Open to Feedback
Does this patch work?
diff --git c/Makefile.in i/Makefile.in
index 9c8748aa4d..52618232b0 100644
--- c/Makefile.in
+++ i/Makefile.in
@@ -174,7 +174,7 @@ OBJDUMP = @OBJDUMP@
OBJCOPY = @OBJCOPY@
VCS = @VCS@
VCSUP = @VCSUP@
-DTRACE = @DTRACE@
+DTRACE = @DTRACE@ @DTRACE_OPT@
DTRACE_EXT = @DTRACE_EXT@
DTRACE_OBJ = @DTRACE_OBJ@
DTRACE_REBUILD= @DTRACE_REBUILD@
diff --git c/configure.in i/configure.in
index 3e41be3b6d..2ab336ee23 100644
--- c/configure.in
+++ i/configure.in
@@ -640,18 +640,19 @@ AC_DEFUN([RUBY_DTRACE_AVAILABLE],
[AC_CACHE_CHECK(whether dtrace USDT is available, rb_cv_dtrace_available,
[
echo "provider conftest{ probe fire(); };" > conftest_provider.d
- if $DTRACE -h -o conftest_provider.h -s conftest_provider.d >/dev/null 2>/dev/null; then
- AC_TRY_COMPILE([@%:@include "conftest_provider.h"], [CONFTEST_FIRE();], [
- # DTrace is available on the system
- rb_cv_dtrace_available=yes
- ], [rb_cv_dtrace_available=no])
- else
- # DTrace is not available while dtrace command exists
- # for example FreeBSD 8 or FreeBSD 9 without DTrace build option
- rb_cv_dtrace_available=no
- fi
+ rb_cv_dtrace_available=no
+ AS_FOR(opt, rb_dtrace_opt, ["-xnolibs" ""], [
+ AS_IF([$DTRACE -h -o conftest_provider.h -s conftest_provider.d >/dev/null 2>/dev/null],
+ [AC_TRY_COMPILE([@%:@include "conftest_provider.h"], [CONFTEST_FIRE();], [
+ # DTrace is available on the system
+ rb_cv_dtrace_available=yes${rb_dtrace_opt:+"(opt)"}
+ break
+ ])])
+ ])
rm -f conftest.[co] conftest_provider.[dho]
])
+AS_CASE(["$rb_cv_dtrace_available"], ["yes("*")"],
+ [DTRACE_OPT=`expr "$rb_cv_dtrace_available" : "yes(\(.*\))"`])
])
AC_DEFUN([RUBY_DTRACE_POSTPROCESS],
@@ -3990,48 +3991,45 @@ AC_ARG_ENABLE(dtrace,
[enable DTrace for tracing inside ruby. enabled by default on systems having dtrace]),
[enable_dtrace=$enableval], [enable_dtrace=auto])
-if test "${enable_dtrace}" = "auto"; then
- if test x"$DTRACE" != x -a x"$cross_compiling" != xyes; then
- RUBY_DTRACE_AVAILABLE()
- enable_dtrace=$rb_cv_dtrace_available
- else
- enable_dtrace=no
- fi
-fi
-
LIBRUBY_A_OBJS='$(OBJS)'
DTRACE_REBUILD=
-if test "${enable_dtrace}" = "yes"; then
- if test -z "$DTRACE"; then
+AS_CASE(["${enable_dtrace}"], [yes|auto], [
+ RUBY_DTRACE_AVAILABLE()
+], [
+ rb_cv_dtrace_available=no
+])
+AS_CASE(["${enable_dtrace}"], [yes], [
+ AS_IF([test -z "$DTRACE"], [
AC_MSG_ERROR([dtrace(1) is missing])
- elif test "$cross_compiling" = yes; then
+ ], [test "$cross_compiling" = yes], [
AC_MSG_ERROR([--enable-dtrace, however, cross compiling])
- else
- RUBY_DTRACE_AVAILABLE()
- enable_dtrace=$rb_cv_dtrace_available
- if test "${enable_dtrace}" = "no"; then
- AC_MSG_ERROR([--enable-dtrace, however, USDT is not available])
- fi
- RUBY_DTRACE_POSTPROCESS()
- if test "$rb_cv_prog_dtrace_g" != 'no'; then
- DTRACE_OBJ='probes.$(OBJEXT)'
- fi
- if test "$rb_cv_prog_dtrace_g" = 'rebuild'; then
- DTRACE_REBUILD=yes
- LIBRUBY_A_OBJS='$(DTRACE_GLOMMED_OBJ)'
- fi
- AS_CASE("${target_os}", [freebsd*], [
- # FreeBSD's dtrace requires libelf
- LIBS="-lelf $LIBS"
- ])
+ ], [test "${rb_cv_dtrace_available}" = "no"], [
+ AC_MSG_ERROR([--enable-dtrace, however, USDT is not available])
+ ])
+])
+AS_CASE([$rb_cv_dtrace_available],
+[yes*], [
+ RUBY_DTRACE_POSTPROCESS()
+ if test "$rb_cv_prog_dtrace_g" != 'no'; then
+ DTRACE_OBJ='probes.$(OBJEXT)'
fi
+ if test "$rb_cv_prog_dtrace_g" = 'rebuild'; then
+ DTRACE_REBUILD=yes
+ LIBRUBY_A_OBJS='$(DTRACE_GLOMMED_OBJ)'
+ fi
+ AS_CASE("${target_os}", [freebsd*], [
+ # FreeBSD's dtrace requires libelf
+ LIBS="-lelf $LIBS"
+ ])
DTRACE_EXT=d
-else
+], [
+ enable_dtrace=no
DTRACE_EXT=dmyh
-fi
+])
AC_SUBST(DTRACE_EXT)
AC_SUBST(DTRACE_OBJ)
AC_SUBST(DTRACE_REBUILD)
+AC_SUBST(DTRACE_OPT)
AC_SUBST(LIBRUBY_A_OBJS)
RUBY_SETJMP_TYPE
Updated by vo.x (Vit Ondruch) about 8 years ago
The "-xnolibs" is not supported by SystemTap :/
$ dtrace -xnolibs
/usr/bin/dtrace invalid option -xnolibs
Usage /usr/bin/dtrace [--help] [-h | -G] [-C [-I<Path>]] -s File.d [-o <File>]
Not sure if Nobu's patch covers this ...
Updated by nobu (Nobuyoshi Nakada) about 8 years ago
- Status changed from Feedback to Closed
Applied in changeset r57093.
dtrace build fixes on FreeBSD
- configure.in (RUBY_DTRACE_AVAILABLE, RUBY_DTRACE_POSTPROCESS):
incorporate dtrace build fix on FreeBSD, dtrace needs -xnolibs
in a jail. [ruby-core:78676] [Bug #13041]
Updated by swills (Steve Wills) about 8 years ago
Vit Ondruch wrote:
The "-xnolibs" is not supported by SystemTap :/
SystemTap is not DTrace.
Updated by swills (Steve Wills) about 8 years ago
This fails to build now:
array.o: In function `ary_new':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
array.o: In function `empty_ary_alloc':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:456: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:456: undefined reference to `__dtrace_ruby___array__create'
array.o: In function `ary_new':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtraceenabled_ruby___array__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/array.c:472: undefined reference to `__dtrace_ruby___array__create'
eval.o: In function `setup_exception':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/eval.c:578: undefined reference to `__dtraceenabled_ruby___raise'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/eval.c:578: undefined reference to `__dtrace_ruby___raise'
gc.o: In function `gc_prof_mark_timer_start':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/gc.c:8655: undefined reference to `__dtraceenabled_ruby___gc__mark__begin'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/gc.c:8655: undefined reference to `__dtrace_ruby___gc__mark__begin'
gc.o: In function `gc_prof_mark_timer_stop':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/gc.c:8666: undefined reference to `__dtraceenabled_ruby___gc__mark__end'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/gc.c:8666: undefined reference to `__dtrace_ruby___gc__mark__end'
gc.o: In function `gc_prof_sweep_timer_start':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/gc.c:8678: undefined reference to `__dtraceenabled_ruby___gc__sweep__begin'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/gc.c:8678: undefined reference to `__dtrace_ruby___gc__sweep__begin'
gc.o: In function `gc_prof_sweep_timer_stop':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/gc.c:8691: undefined reference to `__dtraceenabled_ruby___gc__sweep__end'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/gc.c:8691: undefined reference to `__dtrace_ruby___gc__sweep__end'
hash.o: In function `empty_hash_alloc':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/hash.c:435: undefined reference to `__dtraceenabled_ruby___hash__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/hash.c:435: undefined reference to `__dtrace_ruby___hash__create'
load.o: In function `rb_require_internal':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/load.c:967: undefined reference to `__dtraceenabled_ruby___require__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/load.c:980: undefined reference to `__dtraceenabled_ruby___find__require__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/load.c:967: undefined reference to `__dtrace_ruby___require__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/load.c:980: undefined reference to `__dtrace_ruby___find__require__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/load.c:985: undefined reference to `__dtraceenabled_ruby___find__require__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/load.c:985: undefined reference to `__dtrace_ruby___find__require__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/load.c:1024: undefined reference to `__dtraceenabled_ruby___require__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/load.c:1024: undefined reference to `__dtrace_ruby___require__return'
load.o: In function `rb_f_load':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/load.c:704: undefined reference to `__dtraceenabled_ruby___load__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/load.c:716: undefined reference to `__dtraceenabled_ruby___load__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/load.c:704: undefined reference to `__dtrace_ruby___load__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/load.c:716: undefined reference to `__dtrace_ruby___load__return'
object.o: In function `rb_obj_alloc':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/object.c:1860: undefined reference to `__dtraceenabled_ruby___object__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/object.c:1860: undefined reference to `__dtrace_ruby___object__create'
parse.o: In function `yycompile0':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/parse.y:5382: undefined reference to `__dtraceenabled_ruby___parse__begin'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/parse.y:5382: undefined reference to `__dtrace_ruby___parse__begin'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/parse.y:5386: undefined reference to `__dtraceenabled_ruby___parse__end'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/parse.y:5386: undefined reference to `__dtrace_ruby___parse__end'
string.o: In function `str_new0':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/string.c:702: undefined reference to `__dtraceenabled_ruby___string__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/string.c:702: undefined reference to `__dtrace_ruby___string__create'
string.o: In function `str_new_static':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/string.c:808: undefined reference to `__dtraceenabled_ruby___string__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/string.c:808: undefined reference to `__dtrace_ruby___string__create'
string.o: In function `rb_str_resurrect':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/string.c:1393: undefined reference to `__dtraceenabled_ruby___string__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/string.c:1393: undefined reference to `__dtrace_ruby___string__create'
string.o: In function `empty_str_alloc':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/string.c:689: undefined reference to `__dtraceenabled_ruby___string__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/string.c:689: undefined reference to `__dtrace_ruby___string__create'
symbol.o: In function `dsymbol_alloc':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/symbol.c:487: undefined reference to `__dtraceenabled_ruby___symbol__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/symbol.c:487: undefined reference to `__dtrace_ruby___symbol__create'
symbol.o: In function `register_static_symid_str':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/symbol.c:419: undefined reference to `__dtraceenabled_ruby___symbol__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/symbol.c:419: undefined reference to `__dtrace_ruby___symbol__create'
vm.o: In function `vm_exec_core':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:550: undefined reference to `__dtrace_ruby___hash__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:550: undefined reference to `__dtraceenabled_ruby___hash__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:823: undefined reference to `__dtrace_ruby___cmethod__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:813: undefined reference to `__dtraceenabled_ruby___method__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:814: undefined reference to `__dtraceenabled_ruby___method__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:815: undefined reference to `__dtraceenabled_ruby___cmethod__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:816: undefined reference to `__dtraceenabled_ruby___cmethod__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:826: undefined reference to `__dtraceenabled_ruby___method__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:826: undefined reference to `__dtrace_ruby___method__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:829: undefined reference to `__dtraceenabled_ruby___cmethod__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:829: undefined reference to `__dtrace_ruby___cmethod__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:820: undefined reference to `__dtraceenabled_ruby___method__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:820: undefined reference to `__dtrace_ruby___method__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/insns.def:823: undefined reference to `__dtraceenabled_ruby___cmethod__entry'
vm.o: In function `rb_clear_method_cache_by_class':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/./vm_method.c:101: undefined reference to `__dtraceenabled_ruby___method__cache__clear'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/./vm_method.c:101: undefined reference to `__dtrace_ruby___method__cache__clear'
vm.o: In function `rb_vm_pop_cfunc_frame':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/vm.c:526: undefined reference to `__dtraceenabled_ruby___cmethod__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/vm.c:526: undefined reference to `__dtrace_ruby___cmethod__return'
vm.o: In function `vm_exec':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/vm.c:1741: undefined reference to `__dtraceenabled_ruby___cmethod__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/vm.c:1741: undefined reference to `__dtrace_ruby___cmethod__return'
vm.o: In function `core_hash_from_ary':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/vm.c:2624: undefined reference to `__dtraceenabled_ruby___hash__create'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/vm.c:2624: undefined reference to `__dtrace_ruby___hash__create'
vm.o: In function `vm_call_cfunc_with_frame':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/./vm_insnhelper.c:1741: undefined reference to `__dtraceenabled_ruby___cmethod__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/./vm_insnhelper.c:1761: undefined reference to `__dtraceenabled_ruby___cmethod__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/./vm_insnhelper.c:1741: undefined reference to `__dtrace_ruby___cmethod__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/./vm_insnhelper.c:1761: undefined reference to `__dtrace_ruby___cmethod__return'
vm.o: In function `vm_call0_cfunc_with_frame':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/./vm_eval.c:119: undefined reference to `__dtraceenabled_ruby___cmethod__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/./vm_eval.c:140: undefined reference to `__dtraceenabled_ruby___cmethod__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/./vm_eval.c:119: undefined reference to `__dtrace_ruby___cmethod__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/./vm_eval.c:140: undefined reference to `__dtrace_ruby___cmethod__return'
vm.o: In function `invoke_bmethod':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/vm.c:986: undefined reference to `__dtraceenabled_ruby___method__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/vm.c:990: undefined reference to `__dtraceenabled_ruby___method__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/vm.c:986: undefined reference to `__dtrace_ruby___method__entry'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/vm.c:990: undefined reference to `__dtrace_ruby___method__return'
vm.o: In function `hook_before_rewind':
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/vm.c:1594: undefined reference to `__dtraceenabled_ruby___method__return'
/usr/local/poudriere/ports/default/lang/ruby24/work/ruby-2.4.0-rc1/vm.c:1594: undefined reference to `__dtrace_ruby___method__return'
cc: error: linker command failed with exit code 1 (use -v to see invocation)
Updated by vo.x (Vit Ondruch) about 8 years ago
Steve Wills wrote:
Vit Ondruch wrote:
The "-xnolibs" is not supported by SystemTap :/
SystemTap is not DTrace.
SystemTap is Linux equivalent of DTrace and provides the dtrace tool with the same purpose of DTrace one ...
Updated by swills (Steve Wills) about 8 years ago
I suspect the build failure is due to the fact that dtrace -G modifies the .o files to remove the dtrace symbols.
Updated by swills (Steve Wills) about 8 years ago
Vit Ondruch wrote:
Steve Wills wrote:
Vit Ondruch wrote:
The "-xnolibs" is not supported by SystemTap :/
SystemTap is not DTrace.
SystemTap is Linux equivalent of DTrace and provides the dtrace tool with the same purpose of DTrace one ...
It may provide a program with the same name, but it is not equivalent. If it did, this fix wouldn't break it for you.
Updated by ngoto (Naohisa Goto) about 8 years ago
On Solaris 10, the origin of dtrace, it seems "-xnolibs" is not supported.
List of available options that can be specified with "-x" on Solaris: http://docs.oracle.com/cd/E19253-01/817-6223/chp-opt/index.html
Updated by vo.x (Vit Ondruch) about 8 years ago
According to my testing, the patch committed r57093 works just fine even when the "-xnolibs" is not supported. So thanks to Nobu.
Updated by swills (Steve Wills) about 8 years ago
Naohisa Goto wrote:
On Solaris 10, the origin of dtrace, it seems "-xnolibs" is not supported.
List of available options that can be specified with "-x" on Solaris: http://docs.oracle.com/cd/E19253-01/817-6223/chp-opt/index.html
Unfortunately, that page is a bit out of date. Here's one page which has examples with -xnolibs:
http://dtrace.org/blogs/dap/2011/12/13/usdt-providers-redux/
Updated by swills (Steve Wills) about 8 years ago
Tried everything I could, but still can't get things to link, on 11.0 or 12-CURRENT. If I'm doing something wrong, please let me know.
Updated by swills (Steve Wills) about 8 years ago
Looks like r57101 r57102 r57103 and r57104 fixed this. Thanks!