initial support for static userspace probes via systemtap
This adds a --enable-systemtap configure option, which will then
add static tracepoints to the generated libosmocore binary.
At this point, only two tracepoints are supported: log_start
and log_done. They can be used to trace the amount of time
a libosmocore-using application spends in potentiall blocking calls to
log to stderr or to files.
Related: OS#4311
Change-Id: I7e1ab664241deb524c9582cbd1bec31af46c747e
diff --git a/src/logging.c b/src/logging.c
index 60dba64..a40008e 100644
--- a/src/logging.c
+++ b/src/logging.c
@@ -44,6 +44,17 @@
#include <syslog.h>
#endif
+#ifdef HAVE_SYSTEMTAP
+/* include the generated probes header and put markers in code */
+#include "probes.h"
+#define TRACE(probe) probe
+#define TRACE_ENABLED(probe) probe ## _ENABLED()
+#else
+/* Wrap the probe to allow it to be removed when no systemtap available */
+#define TRACE(probe)
+#define TRACE_ENABLED(probe) (0)
+#endif /* HAVE_SYSTEMTAP */
+
#include <time.h>
#include <sys/time.h>
#include <errno.h>
@@ -670,9 +681,11 @@
{
va_list ap;
+ TRACE(LIBOSMOCORE_LOG_START());
va_start(ap, format);
osmo_vlogp(subsys, level, file, line, cont, format, ap);
va_end(ap);
+ TRACE(LIBOSMOCORE_LOG_DONE());
}
/*! Register a new log target with the logging core