update
[lttv.git] / markers-userspace / marker-lib.c
index da5bcaa33802bbc2c9ae6acbf5d73f295eb26fa4..e5ae4fb8baa174bdbd4832b72a9068b6337dcea2 100644 (file)
@@ -1,5 +1,10 @@
 
 #include "marker.h"
+#include <stdio.h>
+#include <errno.h>
+
+extern struct marker __start___markers[];
+extern struct marker __stop___markers[];
 
 /**
  * __mark_empty_function - Empty probe callback
@@ -29,6 +34,42 @@ void __mark_empty_function(void *probe_private, void *call_private,
 void marker_probe_cb(const struct marker *mdata, void *call_private,
        const char *fmt, ...)
 {
+       static unsigned int count = 0;
+
+       printf("Test probe function %u\n", count++);
+}
 
+//FIXME : imv_read won't work with optimized immediate values.
+//will need to issue one sys_marker call for each immediate value.
+
+__attribute__((constructor)) void marker_init(void)
+{
+       struct marker *iter;
+       int ret;
+
+       printf("Marker section : from %p to %p (init)\n",
+               __start___markers, __stop___markers);
+       for (iter = __start___markers; iter < __stop___markers; iter++) {
+               printf("Marker : %s\n", iter->name);
+               ret = sys_marker(iter->name, iter->format,
+                       &imv_read(iter->state), 1);
+               if (ret)
+                       perror("Error connecting markers");
+       }
+}
+
+__attribute__((destructor)) void marker_fini(void)
+{
+       struct marker *iter;
+       int ret;
 
+       printf("Marker section : from %p to %p (fini)\n",
+               __start___markers, __stop___markers);
+       for (iter = __start___markers; iter < __stop___markers; iter++) {
+               printf("Marker : %s\n", iter->name);
+               ret = sys_marker(iter->name, iter->format,
+                       &imv_read(iter->state), 0);
+               if (ret)
+                       perror("Error disconnecting markers");
+       }
 }
This page took 0.024269 seconds and 4 git commands to generate.