Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DTrace Enabled Build Fails (missing object files) - Patch Supplied #10239

Closed
p5pRT opened this issue Mar 18, 2010 · 13 comments
Closed

DTrace Enabled Build Fails (missing object files) - Patch Supplied #10239

p5pRT opened this issue Mar 18, 2010 · 13 comments

Comments

@p5pRT
Copy link
Collaborator

@p5pRT p5pRT commented Mar 18, 2010

Migrated from rt.perl.org#73630 (status was 'resolved')

Searchable as RT73630$

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Mar 18, 2010

From pdb_ml@yahoo.com.au

Platform : Solaris 10 Update 6 64-bit X86 with GCC 4.1.2

Greetings All,

I have just tried to build perl5 from the git repo
(faa13f9) for Solaris with DTrace
Support enabled. The build failed due to missing dependencies. It
appears that the required object files are not yet built at the stage
of the build where perldtrace.o is generated from perldtrace.d.

I tried adding dependencies to perldtrace.o to build the required
objects before perldtrace.o, but that was not successful (see
below).

The second approach was simply to remove those object from the
list of files passed to the 'dtrace -G' command. This approach works
and all test harness pass :-)

Is it the absolute right way to do this?
Honestly I can't be sure, dtrace does NOT seem to modify any existing
object files passed to it, but take notice of the ELF CLASS of the
objects passed to it, saving us passing -32 or -64 explicitly.

The diff for your evaluation​:

---8<---

Inline Patch
diff --git a/Makefile.SH b/Makefile.SH
index 1040b71..1742002 100644
--- a/Makefile.SH
+++ b/Makefile.SH
@@ -478,8 +478,8 @@ obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$
 obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OB
 
 mini_obj =  $(obj1) $(obj2) $(obj3) $(ARCHOBJS) $(DTRACE_O)
-ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
-obj = $(ndt_obj) $(DTRACE_O)
+ndt_obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
+obj = $(obj0) $(ndt_obj) $(DTRACE_O)
 
 perltoc_pod_prereqs = extra.pods pod/perlapi.pod pod/perldelta.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod
 generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs)

---8<---

Regards, Peter Bray Sydney\, Australia

PS​: Additionally, the following may assist people trying to compile perl
5.12.0 on Solaris 10 with GCC 4.1.2 or possibly other versions of
GCC. The generated header file, perldtrace.h, includes an #if
_DTRACE_VERSION, which is used to determine if DTrace is available and
its major version number. It gets this via '#include <unistd.h>',
which gets the real definition from
<sys/feature_tests.h>. Unfortunately, my version of GCC has a
GCC 'fixincludes' generated version of <sys/feature_tests.h> which
misses that definition. (Probably because GCC was build on S10U3 and
I'm now running S10U6). Regardless, a successful compile with DTrace
enabled did not produce any DTrace functionality. Adding
-Accflags='-D_DTRACE_VERSION=1' to the Configure line is a temporary
workaround (ok hack) which worked for me.

Details for the interested

% git show

commit faa13f9
Author​: Jesse Vincent <jesse@​bestpractical.com>
Date​: Mon Mar 15 19​:00​:11 2010 +0000

[Deleted irrelevant info]

% PKGS_PREFIX=/pkgs/64-bit
% PKGS_RELEASE=/pkgs/64-bit/release
% ./Configure -des -Dcc=gcc -Dprefix=${PKGS_RELEASE}/perl-5.12.0-faa13f98b5438d7d2712a2578895829787af9ff5 -Dotherlibdirs=${PKGS_PREFIX}/lib/perl​:/pkgs/lib/perl -Dlocincpth='${PKGS_PREFIX}/include' -Dloclibpth='${PKGS_PREFIX}/lib/amd64​:${PKGS_PREFIX}/lib' -Doptimize='-g -O2' -Dperladmin='software@​localhost' -Dcf_email='software@​localhost' -Uinstallusrbinperl -Dusethreads -Duseshrplib -Dusedtrace

[Deleted irrelevant info]

% gmake

[Deleted irrelevant info]

/usr/sbin/dtrace -G -s perldtrace.d -o perldtrace.o op.o perl.o gv.o toke.o perly.o pad.o regcomp.o dump.o util.o mg.o reentr.o mro.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
dtrace​: failed to link script perldtrace.d​: failed to open op.o​: No such file or directory
gmake​: *** [perldtrace.o] Error 1

[ Checking files via 'ls' ]

% nocorrect ls op.o perl.o gv.o toke.o perly.o pad.o regcomp.o dump.o util.o mg.o reentr.o mro.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

op.o​: No such file or directory
perl.o​: No such file or directory
av.o gv.o numeric.o pp_ctl.o regcomp.o toke.o
deb.o hv.o pad.o pp_hot.o regexec.o universal.o
doio.o locale.o perlapi.o pp_pack.o run.o utf8.o
doop.o mathoms.o perlio.o pp_sort.o scope.o util.o
dump.o mg.o perly.o pp_sys.o sv.o
globals.o mro.o pp.o reentr.o taint.o

[ The relevant sections of the Makefile ]

% ggrep -B 6 -A 1 ndt Makefile
obj0 = op$(OBJ_EXT) perl$(OBJ_EXT)
obj1 = $(madlyobj) $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro$(OBJ_EXT)
obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT)
obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT)

mini_obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS) $(DTRACE_O)
ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
obj = $(ndt_obj) $(DTRACE_O)

--
$(DTRACE_H)​: perldtrace.d
  $(DTRACE) -h -s perldtrace.d -o $(DTRACE_H)

mydtrace.h​: $(DTRACE_H)

$(DTRACE_O)​: perldtrace.d
  $(DTRACE) -G -s perldtrace.d -o $(DTRACE_O) $(ndt_obj)

ATTEMPT 1​: Make $(obj0) (ie op.o and perl.o) build before perldtrace.o

  OLD​: $(DTRACE_O)​: perldtrace.d
  NEW​: $(DTRACE_O)​: perldtrace.d $(obj0)

`sh cflags "optimize='-g -O2'" op.o` -fPIC op.c
  CCCMD = gcc -DPERL_CORE -c -D_REENTRANT -DDEBUGGING -fno-strict-aliasing -pipe -fstack-protector -m64 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DPERL_USE_SAFE_PUTENV -g -O2 -Wall -W -Wextra -Wdeclaration-after-statement -Wendif-labels -Wc++-compat
gmake​: Circular lib/Config_git.pl <- miniperl dependency dropped.
LD_LIBRARY_PATH=/tmp/64-bit/perl5​:/pkgs/64-bit/lib​:/pkgs/64-bit/lib/amd64 ./miniperl -Ilib make_patchnum.pl
/bin/sh​: ./miniperl​: not found
gmake​: *** [lib/Config_git.pl] Error 1

ATTEMPT 2​: Remove $(obj0) from ndt_obj (previous changes reverted first)

  OLD​: ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
  OLD​: obj = $(ndt_obj) $(DTRACE_O)

  NEW​: ndt_obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
  NEW​: obj = $(obj0) $(ndt_obj) $(DTRACE_O)

  % gmake distclean
  % vi Makefile.SH # See Above
  % # Run 'Configure' as above
  % gmake # Completes successfully
  % gmake test # Completes successfully

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Mar 18, 2010

pdb_ml@yahoo.com.au - Status changed from 'new' to 'open'

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Mar 18, 2010

pdb_ml@yahoo.com.au - Status changed from 'open' to 'new'

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented May 31, 2010

From jpl@plosquare.com

I just ran into the same issue and checked that the proposed solution
works. However, it is not ideal because it breaks build if dtrace probes
are ever added to perl.c and op.c in the future. In fact, an example of
such probes was already supplied by Sven Dowideit​:
http​://fosiki.com/blog/2008/02/15/blead-perl-dtrace-probes/

A proper solution must take two factors into account​:
1) when dtrace -G is first run, it must work over perlmini.o and
opmini.o, as perl.o and op.o do not yet exist at that time (this problem
is what the original poster's fix addresses)
2) a second pass of dtrace -G is also necessary because perl.o and op.o
are apparently recreated before the main perl executable is built;
during this second pass dtrace must work over perl.o and op.o rather
than perlmini.o and opmini.o

If either (1) or (2) is ignored and one of perl.c or op.c contains
dtrace probes, then there will be complaints from the linker about
undefined dtrace symbols (while building miniperl and/or building perl
executable).

Unfortunately, I'm not fluent enough with make to provide an elegant
solution myself. Hopefully this will help put someone on the right track.

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Dec 22, 2010

From @dgl

From​: David Leadbeater <dgl@​dgl.cx>

As outlined in the RT ticket due to miniperl's dependencies differing to
the final perl binary dtrace -G needs to be called separately for each.

Build tested on Mac OS X 10.6, Solaris 11 and Scientific Linux with
SystemTap from git.

(Solaris is the only system I have access to where DTRACE_O actually gets
defined. Neither the dtrace binary on OS X nor SystemTap's dtrace
compatibility layer accept the -G option.)


Makefile.SH | 13 ++++++++++---
1 files changed, 10 insertions(+), 3 deletions(-)

Inline Patch
diff --git a/Makefile.SH b/Makefile.SH
index 9d8df27..a34416a 100755
--- a/Makefile.SH
+++ b/Makefile.SH
@@ -215,11 +215,13 @@ done
 
 dtrace_h=''
 dtrace_o=''
+minidtrace_o=''
 case "$usedtrace" in
 define|true)
 	dtrace_h='perldtrace.h' 
 	$dtrace -G -s perldtrace.d -o perldtrace.tmp >/dev/null 2>&1 \
-		&& rm -f perldtrace.tmp && dtrace_o='perldtrace$(OBJ_EXT)'
+		&& rm -f perldtrace.tmp && dtrace_o='perldtrace$(OBJ_EXT)' \
+		&& minidtrace_o='miniperldtrace$(OBJ_EXT)'
 	;;
 esac
 
@@ -332,6 +334,7 @@ VALGRIND=valgrind
 DTRACE = $dtrace
 DTRACE_H = $dtrace_h
 DTRACE_O = $dtrace_o
+MINIDTRACE_O = $minidtrace_o
 
 FIRSTMAKEFILE = $firstmakefile
 
@@ -454,7 +457,8 @@ obj1 = $(madlyobj) $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) pad$
 obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT)
 obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT)
 
-mini_obj =  $(obj1) $(obj2) $(obj3) $(ARCHOBJS) $(DTRACE_O)
+minindt_obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
+mini_obj = $(minindt_obj) $(MINIDTRACE_O)
 ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
 obj = $(ndt_obj) $(DTRACE_O)
 
@@ -742,9 +746,12 @@ mydtrace.h: $(DTRACE_H)
 	case "$dtrace_o" in
 	?*)
 		$spitshell >>$Makefile <<'!NO!SUBS!'
-$(DTRACE_O): perldtrace.d
+$(DTRACE_O): perldtrace.d $(ndt_obj)
 	$(DTRACE) -G -s perldtrace.d -o $(DTRACE_O) $(ndt_obj)
 
+$(MINIDTRACE_O): perldtrace.d $(minindt_obj)
+	$(DTRACE) -G -s perldtrace.d -o $(MINIDTRACE_O) $(minindt_obj)
+
 !NO!SUBS!
 		;;
     esac
-- 
1.7.3.3
@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Dec 22, 2010

The RT System itself - Status changed from 'new' to 'open'

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Dec 28, 2010

From @dgl

Seems my previous attempt didn't get Cc'd to p5p correctly.

On Tue Dec 21 16​:58​:13 2010, dgl wrote​:

From​: David Leadbeater <dgl@​dgl.cx>

As outlined in the RT ticket due to miniperl's dependencies differing
to
the final perl binary dtrace -G needs to be called separately for
each.

Build tested on Mac OS X 10.6, Solaris 11 and Scientific Linux with
SystemTap from git.

(Solaris is the only system I have access to where DTRACE_O actually
gets
defined. Neither the dtrace binary on OS X nor SystemTap's dtrace
compatibility layer accept the -G option.)
---
Makefile.SH | 13 ++++++++++---
1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/Makefile.SH b/Makefile.SH
index 9d8df27..a34416a 100755
--- a/Makefile.SH
+++ b/Makefile.SH
@​@​ -215,11 +215,13 @​@​ done

dtrace_h=''
dtrace_o=''
+minidtrace_o=''
case "$usedtrace" in
define|true)
dtrace_h='perldtrace.h'
$dtrace -G -s perldtrace.d -o perldtrace.tmp >/dev/null 2>&1 \
- && rm -f perldtrace.tmp && dtrace_o='perldtrace$(OBJ_EXT)'
+ && rm -f perldtrace.tmp && dtrace_o='perldtrace$(OBJ_EXT)' \
+ && minidtrace_o='miniperldtrace$(OBJ_EXT)'
;;
esac

@​@​ -332,6 +334,7 @​@​ VALGRIND=valgrind
DTRACE = $dtrace
DTRACE_H = $dtrace_h
DTRACE_O = $dtrace_o
+MINIDTRACE_O = $minidtrace_o

FIRSTMAKEFILE = $firstmakefile

@​@​ -454,7 +457,8 @​@​ obj1 = $(madlyobj) $(mallocobj) gv$(OBJ_EXT)
toke$(OBJ_EXT) perly$(OBJ_EXT) pad$
obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT)
sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT)
pp_sys$(OBJ_EXT)
obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT)
taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT)
perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT)
mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT)
pp_sort$(OBJ_EXT)

-mini_obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS) $(DTRACE_O)
+minindt_obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
+mini_obj = $(minindt_obj) $(MINIDTRACE_O)
ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
obj = $(ndt_obj) $(DTRACE_O)

@​@​ -742,9 +746,12 @​@​ mydtrace.h​: $(DTRACE_H)
case "$dtrace_o" in
?*)
$spitshell >>$Makefile <<'!NO!SUBS!'
-$(DTRACE_O)​: perldtrace.d
+$(DTRACE_O)​: perldtrace.d $(ndt_obj)
$(DTRACE) -G -s perldtrace.d -o $(DTRACE_O) $(ndt_obj)

+$(MINIDTRACE_O)​: perldtrace.d $(minindt_obj)
+ $(DTRACE) -G -s perldtrace.d -o $(MINIDTRACE_O) $(minindt_obj)
+
!NO!SUBS!
;;
esac

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jan 2, 2011

From @cpansprout

On Tue Dec 21 16​:58​:13 2010, dgl wrote​:

From​: David Leadbeater <dgl@​dgl.cx>

As outlined in the RT ticket due to miniperl's dependencies differing
to
the final perl binary dtrace -G needs to be called separately for
each.

Build tested on Mac OS X 10.6, Solaris 11 and Scientific Linux with
SystemTap from git.

(Solaris is the only system I have access to where DTRACE_O actually
gets
defined. Neither the dtrace binary on OS X nor SystemTap's dtrace
compatibility layer accept the -G option.)
---
Makefile.SH | 13 ++++++++++---
1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/Makefile.SH b/Makefile.SH
index 9d8df27..a34416a 100755
--- a/Makefile.SH
+++ b/Makefile.SH
@​@​ -215,11 +215,13 @​@​ done

dtrace_h=''
dtrace_o=''
+minidtrace_o=''
case "$usedtrace" in
define|true)
dtrace_h='perldtrace.h'
$dtrace -G -s perldtrace.d -o perldtrace.tmp >/dev/null 2>&1 \
- && rm -f perldtrace.tmp && dtrace_o='perldtrace$(OBJ_EXT)'
+ && rm -f perldtrace.tmp && dtrace_o='perldtrace$(OBJ_EXT)' \
+ && minidtrace_o='miniperldtrace$(OBJ_EXT)'
;;
esac

@​@​ -332,6 +334,7 @​@​ VALGRIND=valgrind
DTRACE = $dtrace
DTRACE_H = $dtrace_h
DTRACE_O = $dtrace_o
+MINIDTRACE_O = $minidtrace_o

FIRSTMAKEFILE = $firstmakefile

@​@​ -454,7 +457,8 @​@​ obj1 = $(madlyobj) $(mallocobj) gv$(OBJ_EXT)
toke$(OBJ_EXT) perly$(OBJ_EXT) pad$
obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT)
sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT)
pp_sys$(OBJ_EXT)
obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT)
taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT)
perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT)
mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT)
pp_sort$(OBJ_EXT)

-mini_obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS) $(DTRACE_O)
+minindt_obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
+mini_obj = $(minindt_obj) $(MINIDTRACE_O)
ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
obj = $(ndt_obj) $(DTRACE_O)

@​@​ -742,9 +746,12 @​@​ mydtrace.h​: $(DTRACE_H)
case "$dtrace_o" in
?*)
$spitshell >>$Makefile <<'!NO!SUBS!'
-$(DTRACE_O)​: perldtrace.d
+$(DTRACE_O)​: perldtrace.d $(ndt_obj)
$(DTRACE) -G -s perldtrace.d -o $(DTRACE_O) $(ndt_obj)

+$(MINIDTRACE_O)​: perldtrace.d $(minindt_obj)
+ $(DTRACE) -G -s perldtrace.d -o $(MINIDTRACE_O) $(minindt_obj)
+
!NO!SUBS!
;;
esac

Thank you. Applied as 3d450a5.

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jan 2, 2011

From [Unknown Contact. See original ticket]

On Tue Dec 21 16​:58​:13 2010, dgl wrote​:

From​: David Leadbeater <dgl@​dgl.cx>

As outlined in the RT ticket due to miniperl's dependencies differing
to
the final perl binary dtrace -G needs to be called separately for
each.

Build tested on Mac OS X 10.6, Solaris 11 and Scientific Linux with
SystemTap from git.

(Solaris is the only system I have access to where DTRACE_O actually
gets
defined. Neither the dtrace binary on OS X nor SystemTap's dtrace
compatibility layer accept the -G option.)
---
Makefile.SH | 13 ++++++++++---
1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/Makefile.SH b/Makefile.SH
index 9d8df27..a34416a 100755
--- a/Makefile.SH
+++ b/Makefile.SH
@​@​ -215,11 +215,13 @​@​ done

dtrace_h=''
dtrace_o=''
+minidtrace_o=''
case "$usedtrace" in
define|true)
dtrace_h='perldtrace.h'
$dtrace -G -s perldtrace.d -o perldtrace.tmp >/dev/null 2>&1 \
- && rm -f perldtrace.tmp && dtrace_o='perldtrace$(OBJ_EXT)'
+ && rm -f perldtrace.tmp && dtrace_o='perldtrace$(OBJ_EXT)' \
+ && minidtrace_o='miniperldtrace$(OBJ_EXT)'
;;
esac

@​@​ -332,6 +334,7 @​@​ VALGRIND=valgrind
DTRACE = $dtrace
DTRACE_H = $dtrace_h
DTRACE_O = $dtrace_o
+MINIDTRACE_O = $minidtrace_o

FIRSTMAKEFILE = $firstmakefile

@​@​ -454,7 +457,8 @​@​ obj1 = $(madlyobj) $(mallocobj) gv$(OBJ_EXT)
toke$(OBJ_EXT) perly$(OBJ_EXT) pad$
obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT)
sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT)
pp_sys$(OBJ_EXT)
obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT)
taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT)
perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT)
mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT)
pp_sort$(OBJ_EXT)

-mini_obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS) $(DTRACE_O)
+minindt_obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
+mini_obj = $(minindt_obj) $(MINIDTRACE_O)
ndt_obj = $(obj0) $(obj1) $(obj2) $(obj3) $(ARCHOBJS)
obj = $(ndt_obj) $(DTRACE_O)

@​@​ -742,9 +746,12 @​@​ mydtrace.h​: $(DTRACE_H)
case "$dtrace_o" in
?*)
$spitshell >>$Makefile <<'!NO!SUBS!'
-$(DTRACE_O)​: perldtrace.d
+$(DTRACE_O)​: perldtrace.d $(ndt_obj)
$(DTRACE) -G -s perldtrace.d -o $(DTRACE_O) $(ndt_obj)

+$(MINIDTRACE_O)​: perldtrace.d $(minindt_obj)
+ $(DTRACE) -G -s perldtrace.d -o $(MINIDTRACE_O) $(minindt_obj)
+
!NO!SUBS!
;;
esac

Thank you. Applied as 3d450a5.

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jan 2, 2011

@cpansprout - Status changed from 'open' to 'resolved'

@p5pRT p5pRT closed this Jan 2, 2011
@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jan 4, 2011

From @rjbs

* Father Chrysostomos via RT <perlbug-comment@​perl.org> [2011-01-02T17​:50​:49]

On Tue Dec 21 16​:58​:13 2010, dgl wrote​:

From​: David Leadbeater <dgl@​dgl.cx>

As outlined in the RT ticket due to miniperl's dependencies differing to
the final perl binary dtrace -G needs to be called separately for each.
[ ... ]

Thank you. Applied as 3d450a5.

This has two votes to cherry-pick, one of them mine. With this commit, I can
compile -Dusedtrace on Solaris and all tests pass. Without this commit, I
cannot. If a third could please review and vote on this, it would make
possible the use of a dtrace-enabled Perl on Solaris, which would be a great
fix.

--
rjbs

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jan 4, 2011

From @rjbs

* Ricardo Signes <perl.p5p@​rjbs.manxome.org> [2011-01-04T10​:18​:51]

This has two votes to cherry-pick, one of them mine. With this commit, I can
compile -Dusedtrace on Solaris and all tests pass. Without this commit, I
cannot. If a third could please review and vote on this, it would make
possible the use of a dtrace-enabled Perl on Solaris, which would be a great
fix.

Thanks, applied as 05571b7

--
rjbs

@p5pRT

This comment has been minimized.

Copy link
Collaborator Author

@p5pRT p5pRT commented Jan 7, 2011

From pdb_ml@yahoo.com.au

As the original reporter I can also verify the committed patch "WORKS
FOR ME". Sorry for the delay in testing (I've been unwell).

Test Platform Updated to Solaris 10 Update 9 64-bit X86 with GCC 4.1.2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
1 participant
You can’t perform that action at this time.