This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
work around a bug in dtrace - it strips const from function parameters
authorTony Cook <tony@develop-help.com>
Wed, 20 Jul 2011 10:23:15 +0000 (20:23 +1000)
committerTony Cook <tony@develop-help.com>
Tue, 9 Aug 2011 09:03:20 +0000 (19:03 +1000)
With usedtrace this caused:

- build failures under g++ (OS X)

- const qualification warnings with gcc (OS X)

The workaround simply adds const to char * parameters if not already
present.

The bug in dtrace was apparently reported to Sun in 2006:
  http://opensolaris.org/jive/thread.jspa?threadID=53810

Mozilla ran into the same problem:
  https://bugzilla.mozilla.org/show_bug.cgi?id=593483

Makefile.SH
perldtrace.d

index 714d78c..b104562 100755 (executable)
@@ -749,8 +749,11 @@ else
        case "$dtrace_h" in
        ?*)
                $spitshell >>$Makefile <<'!NO!SUBS!'
+# dtrace dicards const qualifiers from arguments, put them back
 $(DTRACE_H): perldtrace.d
-       $(DTRACE) -h -s perldtrace.d -o $(DTRACE_H)
+       $(DTRACE) -h -s perldtrace.d -o $(DTRACE_H).in
+       sed -e '/const/!s/char \*/const char */g' $(DTRACE_H).in >$(DTRACE_H)
+       $(RMS) $(DTRACE_H).in
 
 mydtrace.h: $(DTRACE_H)
 
index f87a27a..95eb066 100644 (file)
@@ -4,8 +4,8 @@
  */
 
 provider perl {
-    probe sub__entry(char *, char *, int, char *);
-    probe sub__return(char *, char *, int, char *);
+    probe sub__entry(const char *, const char *, int, const char *);
+    probe sub__return(const char *, const char *, int, const char *);
 
     probe phase__change(const char *, const char *);
 };