[Libguestfs] [PATCH] launch: rework handling of --enable-valgrind-daemon

Pino Toscano ptoscano at redhat.com
Thu Jun 25 09:24:39 UTC 2015


Instead of forcing valgrind to be run when --enable-valgrind-daemon is
passed to configure, enable it only when the backend setting
"valgrind_daemon" is set.  This allows developers to keep building with
--enable-valgrind-daemon, which unconditionally adds valgrind in the
appliance but using only when requested.

When --enable-valgrind-daemon is not passed (typical for release
builds), then no valgrind-related code is built at all, and
"valgrind_daemon" is ignored.
---
 src/guestfs-internal.h |  1 +
 src/launch-direct.c    |  4 ++++
 src/launch-libvirt.c   |  4 ++++
 src/launch-uml.c       | 14 ++++++++------
 src/launch.c           | 12 +++++++++---
 5 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/src/guestfs-internal.h b/src/guestfs-internal.h
index bbd7fb4..d07b61d 100644
--- a/src/guestfs-internal.h
+++ b/src/guestfs-internal.h
@@ -767,6 +767,7 @@ extern void guestfs_int_print_timestamped_message (guestfs_h *g, const char *fs,
 extern void guestfs_int_launch_send_progress (guestfs_h *g, int perdozen);
 extern char *guestfs_int_appliance_command_line (guestfs_h *g, const char *appliance_dev, int flags);
 #define APPLIANCE_COMMAND_LINE_IS_TCG 1
+#define APPLIANCE_COMMAND_LINE_VALGRIND_DAEMON 2
 const char *guestfs_int_get_cpu_model (int kvm);
 extern void guestfs_int_register_backend (const char *name, const struct backend_ops *);
 extern int guestfs_int_set_backend (guestfs_h *g, const char *method);
diff --git a/src/launch-direct.c b/src/launch-direct.c
index ea67ec9..f6e90da 100644
--- a/src/launch-direct.c
+++ b/src/launch-direct.c
@@ -630,6 +630,10 @@ launch_direct (guestfs_h *g, void *datav, const char *arg)
   flags = 0;
   if (!has_kvm || force_tcg)
     flags |= APPLIANCE_COMMAND_LINE_IS_TCG;
+#ifdef VALGRIND_DAEMON
+  if (guestfs_int_get_backend_setting_bool (g, "valgrind_daemon") > 0)
+    flags |= APPLIANCE_COMMAND_LINE_VALGRIND_DAEMON;
+#endif
   ADD_CMDLINE_STRING_NODUP (guestfs_int_appliance_command_line (g, appliance_dev,
                                                               flags));
 
diff --git a/src/launch-libvirt.c b/src/launch-libvirt.c
index f46782c..92f2922 100644
--- a/src/launch-libvirt.c
+++ b/src/launch-libvirt.c
@@ -1160,6 +1160,10 @@ construct_libvirt_xml_boot (guestfs_h *g,
   flags = 0;
   if (!params->data->is_kvm)
     flags |= APPLIANCE_COMMAND_LINE_IS_TCG;
+#ifdef VALGRIND_DAEMON
+  if (guestfs_int_get_backend_setting_bool (g, "valgrind_daemon") > 0)
+    flags |= APPLIANCE_COMMAND_LINE_VALGRIND_DAEMON;
+#endif
   cmdline = guestfs_int_appliance_command_line (g, params->appliance_dev, flags);
 
   start_element ("os") {
diff --git a/src/launch-uml.c b/src/launch-uml.c
index 785548c..1d92b5e 100644
--- a/src/launch-uml.c
+++ b/src/launch-uml.c
@@ -269,12 +269,14 @@ launch_uml (guestfs_h *g, void *datav, const char *arg)
 
 #if 0 /* XXX This could be made to work. */
 #ifdef VALGRIND_DAEMON
-  /* Set up virtio-serial channel for valgrind messages. */
-  ADD_CMDLINE ("-chardev");
-  ADD_CMDLINE_PRINTF ("file,path=%s/valgrind.log.%d,id=valgrind",
-                      VALGRIND_LOG_PATH, getpid ());
-  ADD_CMDLINE ("-device");
-  ADD_CMDLINE ("virtserialport,chardev=valgrind,name=org.libguestfs.valgrind");
+  if (guestfs_int_get_backend_setting_bool (g, "valgrind_daemon") > 0) {
+    /* Set up virtio-serial channel for valgrind messages. */
+    ADD_CMDLINE ("-chardev");
+    ADD_CMDLINE_PRINTF ("file,path=%s/valgrind.log.%d,id=valgrind",
+                        VALGRIND_LOG_PATH, getpid ());
+    ADD_CMDLINE ("-device");
+    ADD_CMDLINE ("virtserialport,chardev=valgrind,name=org.libguestfs.valgrind");
+  }
 #endif
 #endif
 
diff --git a/src/launch.c b/src/launch.c
index fd5479e..bfc2dea 100644
--- a/src/launch.c
+++ b/src/launch.c
@@ -319,6 +319,9 @@ guestfs_int_appliance_command_line (guestfs_h *g, const char *appliance_dev,
   char *ret;
   bool tcg = flags & APPLIANCE_COMMAND_LINE_IS_TCG;
   char lpj_s[64] = "";
+#ifdef VALGRIND_DAEMON
+  int valgrind_daemon = flags & APPLIANCE_COMMAND_LINE_VALGRIND_DAEMON;
+#endif
 
   if (appliance_dev)
     snprintf (root, sizeof root, " root=%s", appliance_dev);
@@ -335,9 +338,6 @@ guestfs_int_appliance_command_line (guestfs_h *g, const char *appliance_dev,
 #ifdef __arm__
      " mem=%dM"
 #endif
-#ifdef VALGRIND_DAEMON
-     " guestfs_valgrind_daemon=1"
-#endif
 #ifdef __i386__
      " noapic"                  /* workaround for RHBZ#857026 */
 #endif
@@ -363,6 +363,9 @@ guestfs_int_appliance_command_line (guestfs_h *g, const char *appliance_dev,
      " %s"                      /* selinux */
      "%s"                       /* verbose */
      "%s"                       /* network */
+#ifdef VALGRIND_DAEMON
+     "%s"                       /* valgrind */
+#endif
      " TERM=%s"                 /* TERM environment variable */
      "%s%s",                    /* append */
 #ifdef __arm__
@@ -373,6 +376,9 @@ guestfs_int_appliance_command_line (guestfs_h *g, const char *appliance_dev,
      g->selinux ? "selinux=1 enforcing=0" : "selinux=0",
      g->verbose ? " guestfs_verbose=1" : "",
      g->enable_network ? " guestfs_network=1" : "",
+#ifdef VALGRIND_DAEMON
+     valgrind_daemon ? " guestfs_valgrind_daemon=1" : "",
+#endif
      term ? term : "linux",
      g->append ? " " : "", g->append ? g->append : "");
 
-- 
2.1.0




More information about the Libguestfs mailing list