Skip to content

Commit 475fd29

Browse files
f4z4onpetk
authored andcommitted
Improve DTrace probe generation /w non-default compiler
With DTrace support enabled during ./configure, our custom Autoconf macro PHP_INIT_DTRACE creates make rules to generate header and object files using dtrace utility. SystemTap† implementation of dtrace relies on other utilities to provide header preprocessing and final object file compilation. These utilities are configured by common environment variables with common defaults:‡ * preprocessor from CPP defaults to “cpp” * compiler from CC defaults to “gcc” * compiler arguments can be expanded with CFLAGS This has been in SystemTap since version 1.5 released on 2011-05-23. We have been setting CFLAGS for dtrace since 717b367 released in versions 5.4.20 and 5.5.4 on 2013-09-18. This change fixed build against SystemTap. It fixes majority of cases since practically all free Linux distributions use SystemTap for DTrace-like dynamic tracing and practically all of them use GCC or compatible compiler suite. However, this becomes an issue when cross-compiling using GCC because utility names contain target triplets. Autoconf already handles cross-compilation well —setting correct CC and CPP make macros (variables). Therefore, we simply set CC and CPP environment variables using respective macros when executing dtrace. Although SystemTap dtrace does not always use CC nor CPP, we set it every time. SystemTap documentation does not talk about this at all¶, so it is safer to always set it. We also follow how we set CFLAGS every time in the past. Original (or ported) DTrace mainly used on Oracle Linux, Solaris and macOS ignores these and does not support cross compilation.§ † Well-known dynamic tracing infrastructure for Linux compatible with statically-defined tracing from DTrace. ‡ https://sourceware.org/git/?p=systemtap.git;a=blob;f=dtrace.in;h=73a6f22e2de072773c692e3fea05c4b8cf814e43;hb=ebb424eee5599fcc131901c0d82d0bfc0d2f57abhttps://sourceware.org/systemtap/man/dtrace.1.html § https://docs.oracle.com/cd/E88353_01/html/E72487/dtrace-8.html Closes GH-11643
1 parent 8718fce commit 475fd29

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

build/php.m4

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2389,7 +2389,7 @@ dnl overwritten (Bug 61268).
23892389
$abs_srcdir/$ac_provsrc:;
23902390
23912391
$ac_bdir[$]ac_hdrobj: $abs_srcdir/$ac_provsrc
2392-
CFLAGS="\$(CFLAGS_CLEAN)" dtrace -h -C -s $ac_srcdir[$]ac_provsrc -o \$[]@.bak && \$(SED) -e 's,PHP_,DTRACE_,g' \$[]@.bak > \$[]@
2392+
CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -h -C -s $ac_srcdir[$]ac_provsrc -o \$[]@.bak && \$(SED) -e 's,PHP_,DTRACE_,g' \$[]@.bak > \$[]@
23932393
23942394
\$(PHP_DTRACE_OBJS): $ac_bdir[$]ac_hdrobj
23952395
@@ -2409,12 +2409,12 @@ EOF
24092409
$ac_bdir[$]ac_provsrc.lo: \$(PHP_DTRACE_OBJS)
24102410
echo "[#] Generated by Makefile for libtool" > \$[]@
24112411
@test -d "$dtrace_lib_dir" || mkdir $dtrace_lib_dir
2412-
if CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $dtrace_d_obj -s $abs_srcdir/$ac_provsrc $dtrace_lib_objs 2> /dev/null && test -f "$dtrace_d_obj"; then [\\]
2412+
if CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $dtrace_d_obj -s $abs_srcdir/$ac_provsrc $dtrace_lib_objs 2> /dev/null && test -f "$dtrace_d_obj"; then [\\]
24132413
echo "pic_object=['].libs/$dtrace_prov_name[']" >> \$[]@ [;\\]
24142414
else [\\]
24152415
echo "pic_object='none'" >> \$[]@ [;\\]
24162416
fi
2417-
if CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $ac_bdir[$]ac_provsrc.o -s $abs_srcdir/$ac_provsrc $dtrace_nolib_objs 2> /dev/null && test -f "$ac_bdir[$]ac_provsrc.o"; then [\\]
2417+
if CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $ac_bdir[$]ac_provsrc.o -s $abs_srcdir/$ac_provsrc $dtrace_nolib_objs 2> /dev/null && test -f "$ac_bdir[$]ac_provsrc.o"; then [\\]
24182418
echo "non_pic_object=[']$dtrace_prov_name[']" >> \$[]@ [;\\]
24192419
else [\\]
24202420
echo "non_pic_object='none'" >> \$[]@ [;\\]
@@ -2426,7 +2426,7 @@ EOF
24262426
*)
24272427
cat>>Makefile.objects<<EOF
24282428
$ac_bdir[$]ac_provsrc.o: \$(PHP_DTRACE_OBJS)
2429-
CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o \$[]@ -s $abs_srcdir/$ac_provsrc $dtrace_objs
2429+
CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o \$[]@ -s $abs_srcdir/$ac_provsrc $dtrace_objs
24302430
24312431
EOF
24322432
;;

ext/oci8/config.m4

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ dnl overwritten (Bug 61268).
124124
PHP_EXT_SRCDIR([oci8])/$ac_provsrc:;
125125
126126
$ac_bdir[$]ac_hdrobj: $ac_srcdir[$]ac_provsrc
127-
CFLAGS="\$(CFLAGS_CLEAN)" dtrace -h -C -s $ac_srcdir[$]ac_provsrc -o \$[]@.bak && \$(SED) -e 's,PHPOCI_,DTRACE_,g' \$[]@.bak > \$[]@
127+
CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -h -C -s $ac_srcdir[$]ac_provsrc -o \$[]@.bak && \$(SED) -e 's,PHPOCI_,DTRACE_,g' \$[]@.bak > \$[]@
128128
129129
\$(OCI8_DTRACE_OBJS): $ac_bdir[$]ac_hdrobj
130130
@@ -145,12 +145,12 @@ EOF
145145
$ac_bdir[$]ac_provsrc.lo: \$(OCI8_DTRACE_OBJS)
146146
echo "[#] Generated by Makefile for libtool" > \$[]@
147147
@test -d "$dtrace_lib_dir" || mkdir $dtrace_lib_dir
148-
if CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $dtrace_d_obj -s $ac_srcdir[$]ac_provsrc $dtrace_oci8_lib_objs 2> /dev/null && test -f "$dtrace_d_obj"; then [\\]
148+
if CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $dtrace_d_obj -s $ac_srcdir[$]ac_provsrc $dtrace_oci8_lib_objs 2> /dev/null && test -f "$dtrace_d_obj"; then [\\]
149149
echo "pic_object=['].libs/$dtrace_prov_name[']" >> \$[]@ [;\\]
150150
else [\\]
151151
echo "pic_object='none'" >> \$[]@ [;\\]
152152
fi
153-
if CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $ac_bdir[$]ac_provsrc.o -s $ac_srcdir[$]ac_provsrc $dtrace_nolib_objs 2> /dev/null && test -f "$ac_bdir[$]ac_provsrc.o"; then [\\]
153+
if CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $ac_bdir[$]ac_provsrc.o -s $ac_srcdir[$]ac_provsrc $dtrace_nolib_objs 2> /dev/null && test -f "$ac_bdir[$]ac_provsrc.o"; then [\\]
154154
echo "non_pic_object=[']$dtrace_prov_name[']" >> \$[]@ [;\\]
155155
else [\\]
156156
echo "non_pic_object='none'" >> \$[]@ [;\\]
@@ -162,7 +162,7 @@ EOF
162162
AC_MSG_WARN([OCI8 extension: OCI8 DTrace support is not confirmed on this platform])
163163
cat>>Makefile.objects<<EOF
164164
$ac_bdir[$]ac_provsrc.o: \$(OCI8_DTRACE_OBJS)
165-
CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o \$[]@ -s $ac_srcdir[$]ac_provsrc $dtrace_oci8_objs
165+
CPP="\$(CPP)" CC="\$(CC)" CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o \$[]@ -s $ac_srcdir[$]ac_provsrc $dtrace_oci8_objs
166166
167167
EOF
168168
;;

0 commit comments

Comments
 (0)