support for stats static userspace probes via systemtap

We currently only have probes for the logging sub-system.

This patch adds two tracepoints for tracing the performance
impact of statistics reporting: stat_start and stat_done.

They can be used to trace the amount of time a libosmocore-using
application spends in reporting/exporting statistics.  This includes
both the CPU time for encoding the statistics, as well as the system
calls for sending them.

Change-Id: I7208c45f6d051505dd2435305c67b4d26c0b1dd2
Related: OS#4311
Related: SYS#4877
diff --git a/src/stats.c b/src/stats.c
index c91a978..a0834d2 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -90,6 +90,17 @@
 #include <osmocom/core/counter.h>
 #include <osmocom/core/msgb.h>
 
+#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 */
+
 #define STATS_DEFAULT_INTERVAL 5 /* secs */
 #define STATS_DEFAULT_BUFLEN 256
 
@@ -781,6 +792,7 @@
 int osmo_stats_report()
 {
 	/* per group actions */
+	TRACE(LIBOSMOCORE_STATS_START());
 	osmo_counters_for_each(handle_counter, NULL);
 	rate_ctr_for_each_group(rate_ctr_group_handler, NULL);
 	osmo_stat_item_for_each_group(osmo_stat_item_group_handler, NULL);
@@ -788,6 +800,7 @@
 	/* global actions */
 	osmo_stat_item_discard_all(&current_stat_item_index);
 	flush_all_reporters();
+	TRACE(LIBOSMOCORE_STATS_DONE());
 
 	return 0;
 }