From: Xinghai Yu <yuxinghai(a)cn.fujitsu.com>
Add the new multiple trace backend framework, and the 'Dtrace' should
be one of the trace backends libvirt supporting.
Using the macro exported by configure.ac to decide which trace backend
to build for libvirt.
We got 2 trace macros below:
WITH_TRACE_PROBES, if --with-dtrace or other trace option was set, this
macro would be true and it tell the codes that we will use trace function,
dtrace or ftrace will be supported in libvirt.
WITH_DTRACE_PROBES, if --with-dtrace was set this macro would be true and
the dtrace will be supported in libvirt.
Signed-off-by: Xinghai Yu <yuxinghai(a)cn.fujitsu.com>
---
daemon/Makefile.am | 10 ++++-
src/Makefile.am | 113 ++++++++++++++++++++++++++++++++++++++++++-----------
tests/Makefile.am | 10 ++++-
3 files changed, 106 insertions(+), 27 deletions(-)
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 00221ab..bd77623 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -160,8 +160,11 @@ libvirtd_LDADD = \
$(POLKIT_LIBS) \
$(LIBNL_LIBS)
-if WITH_DTRACE_PROBES
+if WITH_TRACE_PROBES
libvirtd_LDADD += ../src/libvirt_probes.lo
+endif WITH_TRACE_PROBES
+if WITH_DTRACE_PROBES
+libvirtd_LDADD += ../src/libvirt_probes_dtrace.lo
endif WITH_DTRACE_PROBES
libvirtd_LDADD += \
@@ -174,8 +177,11 @@ libvirtd_LDADD += \
if ! WITH_DRIVER_MODULES
if WITH_QEMU
libvirtd_LDADD += ../src/libvirt_driver_qemu.la
-if WITH_DTRACE_PROBES
+if WITH_TRACE_PROBES
libvirtd_LDADD += ../src/libvirt_qemu_probes.lo
+endif WITH_TRACE_PROBES
+if WITH_DTRACE_PROBES
+ libvirtd_LDADD += ../src/libvirt_qemu_probes_dtrace.lo
endif WITH_DTRACE_PROBES
endif WITH_QEMU
diff --git a/src/Makefile.am b/src/Makefile.am
index 25d0370..0e50ebc 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1943,36 +1943,77 @@ libvirt_la_CFLAGS = -DIN_LIBVIRT $(AM_CFLAGS)
# picked out for us.
libvirt_la_DEPENDENCIES = $(libvirt_la_BUILT_LIBADD) $(LIBVIRT_SYMBOL_FILE)
-if WITH_DTRACE_PROBES
+TRACETOOL=$(srcdir)/tracetool.py
+if WITH_TRACE_PROBES
libvirt_la_BUILT_LIBADD += libvirt_probes.lo
-libvirt_la_DEPENDENCIES += libvirt_probes.lo libvirt_probes.o
nodist_libvirt_la_SOURCES = libvirt_probes.h
+BUILT_SOURCES += libvirt_probes.c libvirt_probes.h
+if WITH_QEMU
+libvirt_driver_qemu_impl_la_LIBADD += libvirt_qemu_probes.lo
+nodist_libvirt_driver_qemu_impl_la_SOURCES = libvirt_qemu_probes.h
+BUILT_SOURCES += libvirt_qemu_probes.c libvirt_qemu_probes.h
+endif WITH_QEMU
+.PRECIOUS: %_probes.o
+# Contain the trace_function's definition
+%_probes.c: %_trace_events
+ $(AM_V_GEN)$(PYTHON) $(TRACETOOL) \
+ --format=c \
+ --backend=trace \
+ < $< > $@
+# Contain the trace_function's declaration
+%_probes.h: %_trace_events
+ $(AM_V_GEN)$(PYTHON) $(TRACETOOL) \
+ --format=h \
+ --backend=trace \
+ < $< > $@
+%_probes.lo: %_probes.o
+ $(AM_V_GEN)printf %s\\n \
+ '# $@ - a libtool object file' \
+ '# Generated by libtool (GNU libtool) 2.4' \
+ '# Actually generated by Makefile.am, in order to shut up libtool' \
+ "pic_object='$<'" \
+ "non_pic_object='$<'" \
+ > $@
+CLEANFILES += libvirt_probes.c libvirt_probes.h libvirt_probes.o libvirt_probes.lo \
+ libvirt_qemu_probes.c libvirt_qemu_probes.h libvirt_qemu_probes.o \
+ libvirt_qemu_probes.lo
+endif
+
+if WITH_DTRACE_PROBES
+libvirt_la_BUILT_LIBADD += libvirt_probes_dtrace.lo
+libvirt_la_DEPENDENCIES += libvirt_probes_dtrace.o libvirt_probes_dtrace.lo
+nodist_libvirt_la_SOURCES = libvirt_probes_dtrace.h
if WITH_REMOTE
-nodist_libvirt_driver_remote_la_SOURCES = libvirt_probes.h
+nodist_libvirt_driver_remote_la_SOURCES = libvirt_probes_dtrace.h
endif WITH_REMOTE
if WITH_DRIVER_MODULES
DTRACE2SYSTEMTAP_FLAGS = --with-modules
endif WITH_DRIVER_MODULES
-BUILT_SOURCES += libvirt_probes.h libvirt_probes.stp libvirt_functions.stp
+BUILT_SOURCES += libvirt_probes_dtrace.h libvirt_probes.stp libvirt_functions.stp
if WITH_QEMU
-libvirt_driver_qemu_la_LIBADD += libvirt_qemu_probes.lo
-nodist_libvirt_driver_qemu_la_SOURCES = libvirt_qemu_probes.h
-BUILT_SOURCES += libvirt_qemu_probes.h
+libvirt_driver_qemu_impl_la_LIBADD += libvirt_qemu_probes_dtrace.lo
+nodist_libvirt_driver_qemu_impl_la_SOURCES = libvirt_qemu_probes.h
libvirt_qemu_probes_dtrace.h
+BUILT_SOURCES += libvirt_qemu_probes_dtrace.h
endif WITH_QEMU
tapsetdir = $(datadir)/systemtap/tapset
tapset_DATA = libvirt_probes.stp libvirt_qemu_probes.stp libvirt_functions.stp
-%_probes.h: %_probes.d
+%_probes.d: %_trace_events
+ $(AM_V_GEN)$(PYTHON) $(TRACETOOL) \
+ --format=d \
+ --backend=trace \
+ < $< > $@
+%_probes_dtrace.h: %_probes.d
$(AM_V_GEN)$(DTRACE) -o $@ -h -s $<
-.PRECIOUS: %_probes.o
-%_probes.o: %_probes.d
+.PRECIOUS: %_probes_dtrace.o
+%_probes_dtrace.o: %_probes.d
$(AM_V_GEN)$(DTRACE) -o $@ -G -s $<
-%_probes.lo: %_probes.o
+%_probes_dtrace.lo: %_probes_dtrace.o
$(AM_V_GEN)printf %s\\n \
'# $@ - a libtool object file' \
'# Generated by libtool (GNU libtool) 2.4' \
@@ -1998,14 +2039,14 @@ libvirt_functions.stp: $(RPC_PROBE_FILES)
$(srcdir)/rpc/gensystemtap.pl
$(AM_V_GEN)$(PERL) -w $(srcdir)/dtrace2systemtap.pl \
$(DTRACE2SYSTEMTAP_FLAGS) $(bindir) $(sbindir) $(libdir) $< > $@
-CLEANFILES += libvirt_probes.h libvirt_probes.o libvirt_probes.lo \
- libvirt_qemu_probes.h libvirt_qemu_probes.o \
- libvirt_qemu_probes.lo\
- libvirt_functions.stp libvirt_probes.stp \
- libvirt_qemu_probes.stp
+CLEANFILES += libvirt_probes_dtrace.o libvirt_probes_dtrace.lo \
+ libvirt_qemu_probes_dtrace.o libvirt_qemu_probes_dtrace.lo \
+ libvirt_functions.stp libvirt_probes.stp libvirt_qemu_probes.stp \
+ libvirt_qemu_probes_dtrace.h libvirt_probes_dtrace.h \
+ libvirt_qemu_probes.d libvirt_probes.d
endif WITH_DTRACE_PROBES
-EXTRA_DIST += libvirt_probes.d libvirt_qemu_probes.d
+EXTRA_DIST += libvirt_trace_events libvirt_qemu_trace_events
libvirt_qemu_la_SOURCES = libvirt-qemu.c
libvirt_qemu_la_LDFLAGS = \
@@ -2124,8 +2165,11 @@ lockd_la_LIBADD = ../gnulib/lib/libgnu.la \
augeas_DATA += locking/libvirt_lockd.aug
augeastest_DATA += test_libvirt_lockd.aug
CLEANFILES += test_libvirt_lockd.aug
-if WITH_DTRACE_PROBES
+if WITH_TRACE_PROBES
lockd_la_LIBADD += libvirt_probes.lo
+endif WITH_TRACE_PROBES
+if WITH_DTRACE_PROBES
+lockd_la_LIBADD += libvirt_probes_dtrace.lo
endif WITH_DTRACE_PROBES
if WITH_QEMU
nodist_conf_DATA += locking/qemu-lockd.conf
@@ -2163,8 +2207,11 @@ virtlockd_LDADD = \
../gnulib/lib/libgnu.la \
$(CYGWIN_EXTRA_LIBADD) \
$(NULL)
-if WITH_DTRACE_PROBES
+if WITH_TRACE_PROBES
virtlockd_LDADD += libvirt_probes.lo
+endif WITH_TRACE_PROBES
+if WITH_DTRACE_PROBES
+virtlockd_LDADD += libvirt_probes_dtrace.lo
endif WITH_DTRACE_PROBES
else ! WITH_LIBVIRTD
@@ -2331,6 +2378,14 @@ noinst_LTLIBRARIES += \
libvirt-net-rpc-client.la
EXTRA_DIST += \
+ tracetool.py \
+ tracetool/__init__.py \
+ tracetool/backend/__init__.py \
+ tracetool/backend/trace.py \
+ tracetool/format/__init__.py \
+ tracetool/format/d.py \
+ tracetool/format/c.py \
+ tracetool/format/h.py \
dtrace2systemtap.pl \
rpc/gendispatch.pl \
rpc/genprotocol.pl \
@@ -2437,8 +2492,11 @@ libvirt_iohelper_LDFLAGS = \
libvirt_iohelper_LDADD = \
libvirt_util.la \
../gnulib/lib/libgnu.la
-if WITH_DTRACE_PROBES
+if WITH_TRACE_PROBES
libvirt_iohelper_LDADD += libvirt_probes.lo
+endif WITH_TRACE_PROBES
+if WITH_DTRACE_PROBES
+libvirt_iohelper_LDADD += libvirt_probes_dtrace.lo
endif WITH_DTRACE_PROBES
libvirt_iohelper_CFLAGS = \
@@ -2460,8 +2518,11 @@ libvirt_parthelper_LDADD = \
$(LIBPARTED_LIBS) \
libvirt_util.la \
../gnulib/lib/libgnu.la
-if WITH_DTRACE_PROBES
+if WITH_TRACE_PROBES
libvirt_parthelper_LDADD += libvirt_probes.lo
+endif WITH_TRACE_PROBES
+if WITH_DTRACE_PROBES
+libvirt_parthelper_LDADD += libvirt_probes_dtrace.lo
endif WITH_DTRACE_PROBES
libvirt_parthelper_CFLAGS = \
@@ -2510,8 +2571,11 @@ libvirt_lxc_LDADD = \
libvirt_conf.la \
libvirt_util.la \
../gnulib/lib/libgnu.la
-if WITH_DTRACE_PROBES
+if WITH_TRACE_PROBES
libvirt_lxc_LDADD += libvirt_probes.lo
+endif WITH_TRACE_PROBES
+if WITH_DTRACE_PROBES
+libvirt_lxc_LDADD += libvirt_probes_dtrace.lo
endif WITH_DTRACE_PROBES
libvirt_lxc_LDADD += $(SECDRIVER_LIBS)
libvirt_lxc_CFLAGS = \
@@ -2545,8 +2609,11 @@ virt_aa_helper_LDADD = \
libvirt_conf.la \
libvirt_util.la \
../gnulib/lib/libgnu.la
-if WITH_DTRACE_PROBES
+if WITH_TRACE_PROBES
virt_aa_helper_LDADD += libvirt_probes.lo
+endif WITH_TRACE_PROBES
+if WITH_DTRACE_PROBES
+virt_aa_helper_LDADD += libvirt_probes_dtrace.lo
endif WITH_DTRACE_PROBES
virt_aa_helper_CFLAGS = \
-I$(top_srcdir)/src/conf \
diff --git a/tests/Makefile.am b/tests/Makefile.am
index cd91734..8d24cd9 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -45,8 +45,11 @@ INCLUDES += \
endif WITH_DRIVER_MODULES
PROBES_O =
-if WITH_DTRACE_PROBES
+if WITH_TRACE_PROBES
PROBES_O += ../src/libvirt_probes.lo
+endif WITH_TRACE_PROBES
+if WITH_DTRACE_PROBES
+PROBES_O += ../src/libvirt_probes_dtrace.lo
endif WITH_DTRACE_PROBES
GNULIB_LIBS = \
@@ -453,8 +456,11 @@ endif WITH_NETWORK
if WITH_STORAGE
qemu_LDADDS += ../src/libvirt_driver_storage_impl.la
endif WITH_STORAGE
-if WITH_DTRACE_PROBES
+if WITH_TRACE_PROBES
qemu_LDADDS += ../src/libvirt_qemu_probes.lo
+endif WITH_TRACE_PROBES
+if WITH_DTRACE_PROBES
+qemu_LDADDS += ../src/libvirt_qemu_probes_dtrace.lo
endif WITH_DTRACE_PROBES
qemu_LDADDS += $(LDADDS)
--
1.8.3.1