From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> When building as driver modules, it is not possible for the QEMU driver module to reference the DTrace/SystemTAP probes linked into the main libvirt.so. Thus we need to move the QEMU probes into a separate file 'libvirt_qemu_probes.d'. Also rename the existing file from 'probes.d' to 'libvirt_probes.d' while we're at it * daemon/Makefile.am, src/internal.h: Include libvirt_probes.h instead of probes.h * src/Makefile.am: Add rules for libvirt_qemu_probes.d * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor_json.c, src/qemu/qemu_monitor_text.c: Include libvirt_qemu_probes.h * src/libvirt_probes.d: Rename from probes.d * src/libvirt_qemu_probes.d: QEMU specific probes formerly in probes.d Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> --- daemon/Makefile.am | 2 +- src/Makefile.am | 40 ++++++++++++++++++++++++----------- src/internal.h | 2 +- src/{probes.d => libvirt_probes.d} | 21 ------------------ src/libvirt_qemu_probes.d | 21 ++++++++++++++++++ src/qemu/qemu_monitor.c | 4 +++ src/qemu/qemu_monitor_json.c | 4 +++ src/qemu/qemu_monitor_text.c | 4 +++ 8 files changed, 62 insertions(+), 36 deletions(-) rename src/{probes.d => libvirt_probes.d} (78%) create mode 100644 src/libvirt_qemu_probes.d diff --git a/daemon/Makefile.am b/daemon/Makefile.am index db4abf5..f69ed63 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -110,7 +110,7 @@ libvirtd_LDADD = \ $(POLKIT_LIBS) if WITH_DTRACE_PROBES -libvirtd_LDADD += ../src/probes.o +libvirtd_LDADD += ../src/libvirt_probes.o endif libvirtd_LDADD += \ diff --git a/src/Makefile.am b/src/Makefile.am index 2d4636e..9d47bb6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1236,22 +1236,30 @@ libvirt_la_CFLAGS = -DIN_LIBVIRT $(AM_CFLAGS) libvirt_la_DEPENDENCIES = $(libvirt_la_BUILT_LIBADD) $(LIBVIRT_SYMBOL_FILE) if WITH_DTRACE_PROBES -libvirt_la_BUILT_LIBADD += probes.o -libvirt_la_DEPENDENCIES += probes.o -nodist_libvirt_la_SOURCES = probes.h +libvirt_la_BUILT_LIBADD += libvirt_probes.o +libvirt_la_DEPENDENCIES += libvirt_probes.o +nodist_libvirt_la_SOURCES = libvirt_probes.h if WITH_REMOTE -$(REMOTE_DRIVER_GENERATED): probes.h +$(REMOTE_DRIVER_GENERATED): libvirt_probes.h endif WITH_REMOTE -BUILT_SOURCES += probes.h libvirt_probes.stp libvirt_functions.stp +BUILT_SOURCES += libvirt_probes.h libvirt_probes.stp libvirt_functions.stp + +if WITH_QEMU +libvirt_driver_qemu_la_LIBADD += libvirt_qemu_probes.o +nodist_libvirt_driver_qemu_la_SOURCES = libvirt_qemu_probes.h +libvirt_driver_qemu_la_DEPENDENCIES = libvirt_qemu_probes.o + +$(libvirt_driver_qemu_la_SOURCES): libvirt_qemu_probes.h +endif tapsetdir = $(datadir)/systemtap/tapset -tapset_DATA = libvirt_probes.stp libvirt_functions.stp +tapset_DATA = libvirt_probes.stp libvirt_qemu_probes.stp libvirt_functions.stp -probes.h: probes.d +%_probes.h: %_probes.d $(AM_V_GEN)$(DTRACE) -o $@ -h -s $< -probes.o: probes.d +%_probes.o: %_probes.d $(AM_V_GEN)$(DTRACE) -o $@ -G -s $< RPC_PROBE_FILES = $(srcdir)/rpc/virnetprotocol.x \ @@ -1262,13 +1270,19 @@ RPC_PROBE_FILES = $(srcdir)/rpc/virnetprotocol.x \ libvirt_functions.stp: $(RPC_PROBE_FILES) $(srcdir)/rpc/gensystemtap.pl $(AM_V_GEN)perl -w $(srcdir)/rpc/gensystemtap.pl $(RPC_PROBE_FILES) > $@ -libvirt_probes.stp: probes.d $(srcdir)/dtrace2systemtap.pl +libvirt_probes.stp: libvirt_probes.d $(srcdir)/dtrace2systemtap.pl + $(AM_V_GEN)perl -w $(srcdir)/dtrace2systemtap.pl $(bindir) $(sbindir) $(libdir) $< > $@ + +libvirt_qemu_probes.stp: libvirt_qemu_probes.d $(srcdir)/dtrace2systemtap.pl $(AM_V_GEN)perl -w $(srcdir)/dtrace2systemtap.pl $(bindir) $(sbindir) $(libdir) $< > $@ -CLEANFILES += probes.h probes.o libvirt_functions.stp libvirt_probes.stp +CLEANFILES += libvirt_probes.h libvirt_probes.o \ + libvirt_qemu_probes.h libvirt_qemu_probes.o \ + libvirt_functions.stp libvirt_probes.stp \ + libvirt_qemu_probes.stp endif -EXTRA_DIST += probes.d +EXTRA_DIST += libvirt_probes.d libvirt_qemu_probes.d libvirt_qemu_la_SOURCES = libvirt-qemu.c libvirt_qemu_la_LDFLAGS = $(VERSION_SCRIPT_FLAGS)$(LIBVIRT_QEMU_SYMBOL_FILE) \ @@ -1455,7 +1469,7 @@ libvirt_lxc_LDADD = $(CAPNG_LIBS) $(YAJL_LIBS) \ $(RT_LIBS) \ ../gnulib/lib/libgnu.la if WITH_DTRACE_PROBES -libvirt_lxc_LDADD += probes.o +libvirt_lxc_LDADD += libvirt_probes.o endif if WITH_SECDRIVER_SELINUX libvirt_lxc_LDADD += $(SELINUX_LIBS) @@ -1498,7 +1512,7 @@ virt_aa_helper_LDADD = \ libvirt_util.la \ ../gnulib/lib/libgnu.la if WITH_DTRACE_PROBES -virt_aa_helper_LDADD += probes.o +virt_aa_helper_LDADD += libvirt_probes.o endif virt_aa_helper_CFLAGS = \ -I$(top_srcdir)/src/conf \ diff --git a/src/internal.h b/src/internal.h index ef81cda..a04c4ec 100644 --- a/src/internal.h +++ b/src/internal.h @@ -250,7 +250,7 @@ # if WITH_DTRACE_PROBES # ifndef LIBVIRT_PROBES_H # define LIBVIRT_PROBES_H -# include "probes.h" +# include "libvirt_probes.h" # endif /* LIBVIRT_PROBES_H */ /* Systemtap 1.2 headers have a bug where they cannot handle a diff --git a/src/probes.d b/src/libvirt_probes.d similarity index 78% rename from src/probes.d rename to src/libvirt_probes.d index 9d70cc9..0dac8f3 100644 --- a/src/probes.d +++ b/src/libvirt_probes.d @@ -82,25 +82,4 @@ provider libvirt { probe rpc_keepalive_send(void *ka, void *client, int prog, int vers, int proc); probe rpc_keepalive_received(void *ka, void *client, int prog, int vers, int proc); probe rpc_keepalive_timeout(void *ka, void *client, int coundToDeath, int idle); - - - # file: src/qemu/qemu_monitor.c - # prefix: qemu - # binary: libvirtd - # Monitor lifecycle - probe qemu_monitor_new(void *mon, int refs, int fd); - probe qemu_monitor_ref(void *mon, int refs); - probe qemu_monitor_unref(void *mon, int refs); - probe qemu_monitor_close(void *monm, int refs); - - # High level monitor message processing - probe qemu_monitor_send_msg(void *mon, const char *msg, int fd); - probe qemu_monitor_recv_reply(void *mon, const char *reply); - probe qemu_monitor_recv_event(void *mon, const char *event); - - # Low level monitor I/O processing - probe qemu_monitor_io_process(void *mon, const char *buf, unsigned int len); - probe qemu_monitor_io_read(void *mon, const char *buf, unsigned int len, int ret, int errno); - probe qemu_monitor_io_write(void *mon, const char *buf, unsigned int len, int ret, int errno); - probe qemu_monitor_io_send_fd(void *mon, int fd, int ret, int errno); }; diff --git a/src/libvirt_qemu_probes.d b/src/libvirt_qemu_probes.d new file mode 100644 index 0000000..6916778 --- /dev/null +++ b/src/libvirt_qemu_probes.d @@ -0,0 +1,21 @@ +provider libvirt { + # file: src/qemu/qemu_monitor.c + # prefix: qemu + # binary: libvirtd + # Monitor lifecycle + probe qemu_monitor_new(void *mon, int refs, int fd); + probe qemu_monitor_ref(void *mon, int refs); + probe qemu_monitor_unref(void *mon, int refs); + probe qemu_monitor_close(void *monm, int refs); + + # High level monitor message processing + probe qemu_monitor_send_msg(void *mon, const char *msg, int fd); + probe qemu_monitor_recv_reply(void *mon, const char *reply); + probe qemu_monitor_recv_event(void *mon, const char *event); + + # Low level monitor I/O processing + probe qemu_monitor_io_process(void *mon, const char *buf, unsigned int len); + probe qemu_monitor_io_read(void *mon, const char *buf, unsigned int len, int ret, int errno); + probe qemu_monitor_io_write(void *mon, const char *buf, unsigned int len, int ret, int errno); + probe qemu_monitor_io_send_fd(void *mon, int fd, int ret, int errno); +}; diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index e1a8d4c..b024567 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -37,6 +37,10 @@ #include "logging.h" #include "virfile.h" +#ifdef WITH_DTRACE_PROBES +# include "libvirt_qemu_probes.h" +#endif + #define VIR_FROM_THIS VIR_FROM_QEMU #define DEBUG_IO 0 diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 7093e1d..76f5b1c 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -43,6 +43,10 @@ #include "json.h" #include "ignore-value.h" +#ifdef WITH_DTRACE_PROBES +# include "libvirt_qemu_probes.h" +#endif + #define VIR_FROM_THIS VIR_FROM_QEMU diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c index 9e2991b..edb5dfd 100644 --- a/src/qemu/qemu_monitor_text.c +++ b/src/qemu/qemu_monitor_text.c @@ -41,6 +41,10 @@ #include "virterror_internal.h" #include "buf.h" +#ifdef WITH_DTRACE_PROBES +# include "libvirt_qemu_probes.h" +#endif + #define VIR_FROM_THIS VIR_FROM_QEMU #define QEMU_CMD_PROMPT "\n(qemu) " -- 1.7.7.6 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list