From b664a2ae00538bbd7b68623677158f43ec240d1c Mon Sep 17 00:00:00 2001 From: compudj Date: Tue, 12 Feb 2008 20:41:38 +0000 Subject: [PATCH] update git-svn-id: http://ltt.polymtl.ca/svn@2813 04897980-b3bd-0310-b5e0-8ef037075253 --- markers-userspace/kernel-api.h | 2 +- markers-userspace/marker-lib.c | 28 ++++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/markers-userspace/kernel-api.h b/markers-userspace/kernel-api.h index cb11aecd..6172ad52 100644 --- a/markers-userspace/kernel-api.h +++ b/markers-userspace/kernel-api.h @@ -37,7 +37,7 @@ extern "C" { */ #define _imv_read(name) (name##__imv) -#define __NR_marker 326 +#define __NR_marker 328 #define sys_marker(...) syscall(__NR_marker, __VA_ARGS__) diff --git a/markers-userspace/marker-lib.c b/markers-userspace/marker-lib.c index 739c7580..e5ae4fb8 100644 --- a/markers-userspace/marker-lib.c +++ b/markers-userspace/marker-lib.c @@ -39,17 +39,37 @@ void marker_probe_cb(const struct marker *mdata, void *call_private, 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\n", + 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); - ret = sys_marker(__start___markers, __stop___markers); - if (ret) - perror("Error connecting 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"); } } -- 2.34.1