X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=markers-userspace%2Fmarker-lib.c;h=e5ae4fb8baa174bdbd4832b72a9068b6337dcea2;hb=b664a2ae00538bbd7b68623677158f43ec240d1c;hp=da5bcaa33802bbc2c9ae6acbf5d73f295eb26fa4;hpb=99c5a0863a248fe49e6fb0463e0661673f1c8f67;p=lttv.git diff --git a/markers-userspace/marker-lib.c b/markers-userspace/marker-lib.c index da5bcaa3..e5ae4fb8 100644 --- a/markers-userspace/marker-lib.c +++ b/markers-userspace/marker-lib.c @@ -1,5 +1,10 @@ #include "marker.h" +#include +#include + +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"); + } }