markers: save marker location in struct marker
[ust.git] / libust / marker.c
index 315294764cf73c8b405ac5f2ba30c807c37c2f2b..8b120195677690186839884ab5cfbb940546bef7 100644 (file)
@@ -43,6 +43,8 @@
 
 extern struct marker __start___markers[] __attribute__((visibility("hidden")));
 extern struct marker __stop___markers[] __attribute__((visibility("hidden")));
+extern struct marker_addr __start___marker_addr[] __attribute__((visibility("hidden")));
+extern struct marker_addr __stop___marker_addr[] __attribute__((visibility("hidden")));
 
 /* Set to 1 to enable marker debug output */
 static const int marker_debug;
@@ -1496,15 +1498,22 @@ static void new_markers(struct marker *start, struct marker *end)
        }
 }
 
-int marker_register_lib(struct marker *markers_start, int markers_count)
+int marker_register_lib(struct marker *markers_start, struct marker_addr *marker_addr_start, int markers_count)
 {
        struct lib *pl;
+       struct marker_addr *addr;
 
        pl = (struct lib *) malloc(sizeof(struct lib));
 
        pl->markers_start = markers_start;
+       pl->markers_addr_start = marker_addr_start;
        pl->markers_count = markers_count;
 
+       lock_markers();
+       for(addr = marker_addr_start; addr < marker_addr_start + markers_count; addr++)
+               addr->marker->location = addr->addr;
+       unlock_markers();
+
        /* FIXME: maybe protect this with its own mutex? */
        lock_markers();
        list_add(&pl->list, &libs);
@@ -1533,8 +1542,8 @@ static int initialized = 0;
 void __attribute__((constructor)) init_markers(void)
 {
        if(!initialized) {
-               marker_register_lib(__start___markers, (((long)__stop___markers)-((long)__start___markers))/sizeof(struct marker));
-               DBG("markers_start: %p, markers_stop: %p\n", __start___markers, __stop___markers);
+               marker_register_lib(__start___markers, __start___marker_addr, (((long)__stop___markers)-((long)__start___markers))/sizeof(struct marker));
+               //DBG("markers_start: %p, markers_stop: %p\n", __start___markers, __stop___markers);
                initialized = 1;
        }
 }
This page took 0.024326 seconds and 4 git commands to generate.