X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=libmarkers%2Fmarker.c;h=e1b62c7f64d908269a399ecf9dfd11ba00894252;hb=09938485689f3482ec845e52d5bf5e78c1093e27;hp=139b4327084528e2eb8e99f81eecfe30d1e43cf3;hpb=c463904d75d0711fe6380ef0cda4ed07e6f7f969;p=lttng-ust.git diff --git a/libmarkers/marker.c b/libmarkers/marker.c index 139b4327..e1b62c7f 100644 --- a/libmarkers/marker.c +++ b/libmarkers/marker.c @@ -678,6 +678,20 @@ void marker_update_probe_range(struct marker *begin, /* * ignore error, continue */ + + /* This is added for UST. We emit a core_marker_id event + * for markers that are already registered to a probe + * upon library load. Otherwise, no core_marker_id will + * be generated for these markers. Is this the right thing + * to do? + */ + trace_mark(metadata, core_marker_id, + "channel %s name %s event_id %hu " + "int #1u%zu long #1u%zu pointer #1u%zu " + "size_t #1u%zu alignment #1u%u", + iter->channel, iter->name, mark_entry->event_id, + sizeof(int), sizeof(long), sizeof(void *), + sizeof(size_t), ltt_get_alignment()); } else { disable_marker(iter); } @@ -803,6 +817,7 @@ int marker_probe_register(const char *channel, const char *name, /* write rcu_pending before calling the RCU callback */ smp_wmb(); call_rcu_sched(&entry->rcu, free_old_closure); + /*synchronize_rcu(); free_old_closure();*/ goto end; error_unregister_channel: @@ -1467,13 +1482,21 @@ int marker_register_lib(struct marker *markers_start, int markers_count) list_add(&pl->list, &libs); + /* FIXME: update just the loaded lib */ + lib_update_markers(); + printf("just registered a markers section from %p and having %d markers\n", markers_start, markers_count); return 0; } -static void __attribute__((constructor)) __markers__init(void) +static int initialized = 0; + +void __attribute__((constructor)) init_markers(void) { - marker_register_lib(__start___markers, (((long)__stop___markers)-((long)__start___markers))/sizeof(struct marker)); - printf("markers_start: %p, markers_stop: %p\n", __start___markers, __stop___markers); + if(!initialized) { + marker_register_lib(__start___markers, (((long)__stop___markers)-((long)__start___markers))/sizeof(struct marker)); + printf("markers_start: %p, markers_stop: %p\n", __start___markers, __stop___markers); + initialized = 1; + } }