The dtrace probe macros rely on the logging API. We can't make
the internal.h header include the virlog.h header though since
that'd be a circular include. Instead simply split the dtrace
probes into their own header file, since there's no compelling
reason for them to be in the main internal.h header.
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
daemon/remote.c | 1 +
src/internal.h | 72 -------------------------------
src/qemu/qemu_monitor.c | 1 +
src/qemu/qemu_monitor_json.c | 1 +
src/qemu/qemu_monitor_text.c | 1 +
src/rpc/virkeepalive.c | 1 +
src/rpc/virnetclient.c | 1 +
src/rpc/virnetserverclient.c | 1 +
src/rpc/virnetsocket.c | 1 +
src/rpc/virnettlscontext.c | 1 +
src/util/vireventpoll.c | 1 +
src/util/virobject.c | 1 +
src/util/virprobe.h | 100 +++++++++++++++++++++++++++++++++++++++++++
13 files changed, 111 insertions(+), 72 deletions(-)
create mode 100644 src/util/virprobe.h
diff --git a/daemon/remote.c b/daemon/remote.c
index b48d456..8bb4ed2 100644
--- a/daemon/remote.c
+++ b/daemon/remote.c
@@ -52,6 +52,7 @@
#include "object_event.h"
#include "domain_conf.h"
#include "network_conf.h"
+#include "virprobe.h"
#include "viraccessapicheck.h"
#define VIR_FROM_THIS VIR_FROM_RPC
diff --git a/src/internal.h b/src/internal.h
index 5a38448..0b36de9 100644
--- a/src/internal.h
+++ b/src/internal.h
@@ -366,78 +366,6 @@
# define VIR_ROUND_UP(value, size) (VIR_DIV_UP(value, size) * (size))
-# if WITH_DTRACE_PROBES
-# ifndef LIBVIRT_PROBES_H
-# define LIBVIRT_PROBES_H
-# include "libvirt_probes.h"
-# endif /* LIBVIRT_PROBES_H */
-
-/* Systemtap 1.2 headers have a bug where they cannot handle a
- * variable declared with array type. Work around this by casting all
- * arguments. This is some gross use of the preprocessor because
- * PROBE is a var-arg macro, but it is better than the alternative of
- * making all callers to PROBE have to be aware of the issues. And
- * hopefully, if we ever add a call to PROBE with other than 9
- * end arguments, you can figure out the pattern to extend this hack.
- */
-# define VIR_COUNT_ARGS(...) VIR_ARG11(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
-# define VIR_ARG11(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) _11
-# define VIR_ADD_CAST_EXPAND(a, b, ...) VIR_ADD_CAST_PASTE(a, b, __VA_ARGS__)
-# define VIR_ADD_CAST_PASTE(a, b, ...) a##b(__VA_ARGS__)
-
-/* The double cast is necessary to silence gcc warnings; any pointer
- * can safely go to intptr_t and back to void *, which collapses
- * arrays into pointers; while any integer can be widened to intptr_t
- * then cast to void *. */
-# define VIR_ADD_CAST(a) ((void *)(intptr_t)(a))
-# define VIR_ADD_CAST1(a) \
- VIR_ADD_CAST(a)
-# define VIR_ADD_CAST2(a, b) \
- VIR_ADD_CAST(a), VIR_ADD_CAST(b)
-# define VIR_ADD_CAST3(a, b, c) \
- VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c)
-# define VIR_ADD_CAST4(a, b, c, d) \
- VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
- VIR_ADD_CAST(d)
-# define VIR_ADD_CAST5(a, b, c, d, e) \
- VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
- VIR_ADD_CAST(d), VIR_ADD_CAST(e)
-# define VIR_ADD_CAST6(a, b, c, d, e, f) \
- VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
- VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f)
-# define VIR_ADD_CAST7(a, b, c, d, e, f, g) \
- VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
- VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f), \
- VIR_ADD_CAST(g)
-# define VIR_ADD_CAST8(a, b, c, d, e, f, g, h) \
- VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
- VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f), \
- VIR_ADD_CAST(g), VIR_ADD_CAST(h)
-# define VIR_ADD_CAST9(a, b, c, d, e, f, g, h, i) \
- VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
- VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f), \
- VIR_ADD_CAST(g), VIR_ADD_CAST(h), VIR_ADD_CAST(i)
-
-# define VIR_ADD_CASTS(...) \
- VIR_ADD_CAST_EXPAND(VIR_ADD_CAST, VIR_COUNT_ARGS(__VA_ARGS__), \
- __VA_ARGS__)
-
-# define PROBE_EXPAND(NAME, ARGS) NAME(ARGS)
-# define PROBE(NAME, FMT, ...) \
- VIR_DEBUG_INT(VIR_LOG_FROM_TRACE, \
- __FILE__, __LINE__, __func__, \
- #NAME ": " FMT, __VA_ARGS__); \
- if (LIBVIRT_ ## NAME ## _ENABLED()) { \
- PROBE_EXPAND(LIBVIRT_ ## NAME, \
- VIR_ADD_CASTS(__VA_ARGS__)); \
- }
-# else
-# define PROBE(NAME, FMT, ...) \
- VIR_DEBUG_INT(VIR_LOG_FROM_TRACE, \
- __FILE__, __LINE__, __func__, \
- #NAME ": " FMT, __VA_ARGS__);
-# endif
-
/* Specific error values for use in forwarding programs such as
* virt-login-shell; these values match what GNU env does. */
enum {
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index a2769db..8f8f5c3 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -40,6 +40,7 @@
#include "virfile.h"
#include "virprocess.h"
#include "virobject.h"
+#include "virprobe.h"
#include "virstring.h"
#ifdef WITH_DTRACE_PROBES
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 7d6b88b..4da2011 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -41,6 +41,7 @@
#include "datatypes.h"
#include "virerror.h"
#include "virjson.h"
+#include "virprobe.h"
#include "virstring.h"
#include "cpu/cpu_x86.h"
diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c
index f4992f1..6610ba4 100644
--- a/src/qemu/qemu_monitor_text.c
+++ b/src/qemu/qemu_monitor_text.c
@@ -40,6 +40,7 @@
#include "datatypes.h"
#include "virerror.h"
#include "virbuffer.h"
+#include "virprobe.h"
#include "virstring.h"
#ifdef WITH_DTRACE_PROBES
diff --git a/src/rpc/virkeepalive.c b/src/rpc/virkeepalive.c
index 8ae5c6c..fcc43ad 100644
--- a/src/rpc/virkeepalive.c
+++ b/src/rpc/virkeepalive.c
@@ -30,6 +30,7 @@
#include "virnetsocket.h"
#include "virkeepaliveprotocol.h"
#include "virkeepalive.h"
+#include "virprobe.h"
#define VIR_FROM_THIS VIR_FROM_RPC
diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c
index 327768b..6caae61 100644
--- a/src/rpc/virnetclient.c
+++ b/src/rpc/virnetclient.c
@@ -36,6 +36,7 @@
#include "virlog.h"
#include "virutil.h"
#include "virerror.h"
+#include "virprobe.h"
#include "virstring.h"
#define VIR_FROM_THIS VIR_FROM_RPC
diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c
index 52b4941..7b6d82d 100644
--- a/src/rpc/virnetserverclient.c
+++ b/src/rpc/virnetserverclient.c
@@ -35,6 +35,7 @@
#include "viralloc.h"
#include "virthread.h"
#include "virkeepalive.h"
+#include "virprobe.h"
#include "virstring.h"
#include "virutil.h"
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
index 04bf25a..be1df6c 100644
--- a/src/rpc/virnetsocket.c
+++ b/src/rpc/virnetsocket.c
@@ -51,6 +51,7 @@
#include "virlog.h"
#include "virfile.h"
#include "virthread.h"
+#include "virprobe.h"
#include "virprocess.h"
#include "virstring.h"
#include "passfd.h"
diff --git a/src/rpc/virnettlscontext.c b/src/rpc/virnettlscontext.c
index cd69794..27a00d0 100644
--- a/src/rpc/virnettlscontext.c
+++ b/src/rpc/virnettlscontext.c
@@ -39,6 +39,7 @@
#include "virfile.h"
#include "virutil.h"
#include "virlog.h"
+#include "virprobe.h"
#include "virthread.h"
#include "configmake.h"
diff --git a/src/util/vireventpoll.c b/src/util/vireventpoll.c
index 8a4c8bc..6f1e184 100644
--- a/src/util/vireventpoll.c
+++ b/src/util/vireventpoll.c
@@ -38,6 +38,7 @@
#include "virutil.h"
#include "virfile.h"
#include "virerror.h"
+#include "virprobe.h"
#include "virtime.h"
#define EVENT_DEBUG(fmt, ...) VIR_DEBUG(fmt, __VA_ARGS__)
diff --git a/src/util/virobject.c b/src/util/virobject.c
index 4f83bc1..5e3ee71 100644
--- a/src/util/virobject.c
+++ b/src/util/virobject.c
@@ -28,6 +28,7 @@
#include "viratomic.h"
#include "virerror.h"
#include "virlog.h"
+#include "virprobe.h"
#include "virstring.h"
#define VIR_FROM_THIS VIR_FROM_NONE
diff --git a/src/util/virprobe.h b/src/util/virprobe.h
new file mode 100644
index 0000000..3950e49
--- /dev/null
+++ b/src/util/virprobe.h
@@ -0,0 +1,100 @@
+/*
+ * virprobe.h: dynamic operation tracing
+ *
+ * Copyright (C) 2006-2014 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <
http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef __VIR_PROBE_H__
+# define __VIR_PROBE_H__
+
+# include "internal.h"
+# include "virlog.h"
+
+# if WITH_DTRACE_PROBES
+# ifndef LIBVIRT_PROBES_H
+# define LIBVIRT_PROBES_H
+# include "libvirt_probes.h"
+# endif /* LIBVIRT_PROBES_H */
+
+/* Systemtap 1.2 headers have a bug where they cannot handle a
+ * variable declared with array type. Work around this by casting all
+ * arguments. This is some gross use of the preprocessor because
+ * PROBE is a var-arg macro, but it is better than the alternative of
+ * making all callers to PROBE have to be aware of the issues. And
+ * hopefully, if we ever add a call to PROBE with other than 9
+ * end arguments, you can figure out the pattern to extend this hack.
+ */
+# define VIR_COUNT_ARGS(...) VIR_ARG11(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
+# define VIR_ARG11(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) _11
+# define VIR_ADD_CAST_EXPAND(a, b, ...) VIR_ADD_CAST_PASTE(a, b, __VA_ARGS__)
+# define VIR_ADD_CAST_PASTE(a, b, ...) a##b(__VA_ARGS__)
+
+/* The double cast is necessary to silence gcc warnings; any pointer
+ * can safely go to intptr_t and back to void *, which collapses
+ * arrays into pointers; while any integer can be widened to intptr_t
+ * then cast to void *. */
+# define VIR_ADD_CAST(a) ((void *)(intptr_t)(a))
+# define VIR_ADD_CAST1(a) \
+ VIR_ADD_CAST(a)
+# define VIR_ADD_CAST2(a, b) \
+ VIR_ADD_CAST(a), VIR_ADD_CAST(b)
+# define VIR_ADD_CAST3(a, b, c) \
+ VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c)
+# define VIR_ADD_CAST4(a, b, c, d) \
+ VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
+ VIR_ADD_CAST(d)
+# define VIR_ADD_CAST5(a, b, c, d, e) \
+ VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
+ VIR_ADD_CAST(d), VIR_ADD_CAST(e)
+# define VIR_ADD_CAST6(a, b, c, d, e, f) \
+ VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
+ VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f)
+# define VIR_ADD_CAST7(a, b, c, d, e, f, g) \
+ VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
+ VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f), \
+ VIR_ADD_CAST(g)
+# define VIR_ADD_CAST8(a, b, c, d, e, f, g, h) \
+ VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
+ VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f), \
+ VIR_ADD_CAST(g), VIR_ADD_CAST(h)
+# define VIR_ADD_CAST9(a, b, c, d, e, f, g, h, i) \
+ VIR_ADD_CAST(a), VIR_ADD_CAST(b), VIR_ADD_CAST(c), \
+ VIR_ADD_CAST(d), VIR_ADD_CAST(e), VIR_ADD_CAST(f), \
+ VIR_ADD_CAST(g), VIR_ADD_CAST(h), VIR_ADD_CAST(i)
+
+# define VIR_ADD_CASTS(...) \
+ VIR_ADD_CAST_EXPAND(VIR_ADD_CAST, VIR_COUNT_ARGS(__VA_ARGS__), \
+ __VA_ARGS__)
+
+# define PROBE_EXPAND(NAME, ARGS) NAME(ARGS)
+# define PROBE(NAME, FMT, ...) \
+ VIR_DEBUG_INT(VIR_LOG_FROM_TRACE, \
+ NULL, __LINE__, __func__, \
+ #NAME ": " FMT, __VA_ARGS__); \
+ if (LIBVIRT_ ## NAME ## _ENABLED()) { \
+ PROBE_EXPAND(LIBVIRT_ ## NAME, \
+ VIR_ADD_CASTS(__VA_ARGS__)); \
+ }
+# else
+# define PROBE(NAME, FMT, ...) \
+ VIR_DEBUG_INT(VIR_LOG_FROM_TRACE, \
+ NULL, __LINE__, __func__, \
+ #NAME ": " FMT, __VA_ARGS__);
+# endif
+
+#endif /* __VIR_PROBE_H__ */
--
1.8.5.3