libvirt_qemu_probes.stp stopped working after switching to a build that used --with-driver-modules. This was because the symbols listed int libvirt_qemu_probes.stp are no longer in $(bindir)/libvirtd, but are now in $(libdir)/connection-driver/libvirt_driver_qemu.so. This patch enhances dtrace2systemtap.pl (which generates the .stp files from .d files) to look for a new "module" setting in the comments of the .d file (similar to the existing "binary" setting), and to look for a --with-modules option. If the --with-modules option is set *and* a "module" setting is present in the .d file, the process name for the stap line is set to $libdir/$module If either of these isn't true, it reverts to the old behavior. src/Makefile.am was also modified to add the --with-modules option when the build calls for it, and src/libvirt_qemu_probes.d has added a "module" line pointing to the correct .so file for the qemu driver. --- src/Makefile.am | 7 +++++-- src/dtrace2systemtap.pl | 12 ++++++++++++ src/libvirt_qemu_probes.d | 1 + 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 6ed4a41..79b4e59 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1393,6 +1393,9 @@ nodist_libvirt_la_SOURCES = libvirt_probes.h if WITH_REMOTE nodist_libvirt_driver_remote_la_SOURCES = libvirt_probes.h endif WITH_REMOTE +if WITH_DRIVER_MODULES +DTRACE2SYSTEMTAP_FLAGS = --with-modules +endif BUILT_SOURCES += libvirt_probes.h libvirt_probes.stp libvirt_functions.stp @@ -1429,9 +1432,9 @@ 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) > $@ -%_probes.stp: %_probes.d $(srcdir)/dtrace2systemtap.pl +%_probes.stp: %_probes.d $(srcdir)/dtrace2systemtap.pl $(top_builddir)/config.status $(AM_V_GEN)$(PERL) -w $(srcdir)/dtrace2systemtap.pl \ - $(bindir) $(sbindir) $(libdir) $< > $@ + $(DTRACE2SYSTEMTAP_FLAGS) $(bindir) $(sbindir) $(libdir) $< > $@ CLEANFILES += libvirt_probes.h libvirt_probes.o libvirt_probes.lo \ libvirt_qemu_probes.h libvirt_qemu_probes.o \ diff --git a/src/dtrace2systemtap.pl b/src/dtrace2systemtap.pl index c8d42d7..d57de68 100755 --- a/src/dtrace2systemtap.pl +++ b/src/dtrace2systemtap.pl @@ -31,6 +31,13 @@ my $file; my @files; my %files; +my $with_modules = 0; +if ($ARGV[0] eq "--with-modules") { + # set if we want to honor the "module" setting in the .d file + $with_modules = 1; + shift @ARGV; +} + my $bindir = shift @ARGV; my $sbindir = shift @ARGV; my $libdir = shift @ARGV; @@ -54,6 +61,8 @@ while (<>) { $files{$file}->{prefix} = $1; } elsif (m,^\s*\#\s*binary:\s*(\S+)\s*$,) { $files{$file}->{binary} = $1; + } elsif (m,^\s*\#\s*module:\s*(\S+)\s*$,) { + $files{$file}->{module} = $1; } else { # ignore unknown comments } @@ -98,6 +107,9 @@ foreach my $file (@files) { if (exists $files{$file}->{binary}) { $binary = $sbindir . "/" . $files{$file}->{binary}; } + if ($with_modules && exists $files{$file}->{module}) { + $binary = $libdir . "/" . $files{$file}->{module}; + } print "probe $pname = process(\"$binary\").mark(\"$name\") {\n"; diff --git a/src/libvirt_qemu_probes.d b/src/libvirt_qemu_probes.d index 6916778..e4449a9 100644 --- a/src/libvirt_qemu_probes.d +++ b/src/libvirt_qemu_probes.d @@ -2,6 +2,7 @@ provider libvirt { # file: src/qemu/qemu_monitor.c # prefix: qemu # binary: libvirtd + # module: libvirt/connection-driver/libvirt_driver_qemu.so # Monitor lifecycle probe qemu_monitor_new(void *mon, int refs, int fd); probe qemu_monitor_ref(void *mon, int refs); -- 1.7.11.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list