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