X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libust%2Fmarker.c;h=0aa3d60e6bccbd8dd958ea67147ee9b97013b329;hb=686debc34cf055ffcb1f98a06df9fbaf27eeb441;hp=dafa0d7207cfd1dd4bf6bf29199286f9ba1c473f;hpb=b467f7a77d78880b71ec10d8fa8904da7d28043e;p=ust.git diff --git a/libust/marker.c b/libust/marker.c index dafa0d7..0aa3d60 100644 --- a/libust/marker.c +++ b/libust/marker.c @@ -27,7 +27,7 @@ #include #include -#include "usterr.h" +#include "usterr_signal_safe.h" #include "channels.h" #include "tracercore.h" #include "tracer.h" @@ -447,7 +447,7 @@ static struct marker_entry *add_marker(const char *channel, const char *name, e->call = marker_probe_cb_noarg; else e->call = marker_probe_cb; - trace_mark(metadata, core_marker_format, + __ust_marker(0, metadata, core_marker_format, NULL, "channel %s name %s format %s", e->channel, e->name, e->format); } else { @@ -514,7 +514,7 @@ static int marker_set_format(struct marker_entry *entry, const char *format) return -ENOMEM; entry->format_allocated = 1; - trace_mark(metadata, core_marker_format, + __ust_marker(0, metadata, core_marker_format, NULL, "channel %s name %s format %s", entry->channel, entry->name, entry->format); return 0; @@ -583,7 +583,7 @@ static int set_marker(struct marker_entry *entry, struct marker *elem, WARN_ON(!elem->tp_cb); /* * It is ok to directly call the probe registration because type - * checking has been done in the __trace_mark_tp() macro. + * checking has been done in the __ust_marker_tp() macro. */ if (active) { @@ -629,7 +629,7 @@ static void disable_marker(struct marker *elem) WARN_ON(!elem->tp_cb); /* * It is ok to directly call the probe registration because type - * checking has been done in the __trace_mark_tp() macro. + * checking has been done in the __ust_marker_tp() macro. */ ret = tracepoint_probe_unregister_noupdate(elem->tp_name, elem->tp_cb, NULL); @@ -685,26 +685,14 @@ void marker_update_probe_range(struct marker * const *begin, pthread_mutex_lock(&markers_mutex); for (iter = begin; iter < end; iter++) { + if (!*iter) + continue; /* skip dummy */ mark_entry = get_marker((*iter)->channel, (*iter)->name); if (mark_entry) { set_marker(mark_entry, *iter, !!mark_entry->refcount); /* * 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); } @@ -793,7 +781,7 @@ int marker_probe_register(const char *channel, const char *name, goto error_unregister_channel; entry->event_id = ret; ret = 0; - trace_mark(metadata, core_marker_id, + __ust_marker(0, metadata, core_marker_id, NULL, "channel %s name %s event_id %hu " "int #1u%zu long #1u%zu pointer #1u%zu " "size_t #1u%zu alignment #1u%u", @@ -1114,12 +1102,14 @@ int marker_get_iter_range(struct marker * const **marker, struct marker * const *begin, struct marker * const *end) { - if (!*marker && begin != end) { + if (!*marker && begin != end) *marker = begin; - return 1; + while (*marker >= begin && *marker < end) { + if (!**marker) + (*marker)++; /* skip dummy */ + else + return 1; } - if (*marker >= begin && *marker < end) - return 1; return 0; } //ust// EXPORT_SYMBOL_GPL(marker_get_iter_range); @@ -1306,7 +1296,7 @@ void ltt_dump_marker_state(struct ust_trace *trace) for (i = 0; i < MARKER_TABLE_SIZE; i++) { head = &marker_table[i]; cds_hlist_for_each_entry(entry, node, head, hlist) { - __trace_mark(0, metadata, core_marker_id, + __ust_marker(0, metadata, core_marker_id, &call_data, "channel %s name %s event_id %hu " "int #1u%zu long #1u%zu pointer #1u%zu " @@ -1318,7 +1308,7 @@ void ltt_dump_marker_state(struct ust_trace *trace) sizeof(void *), sizeof(size_t), ltt_get_alignment()); if (entry->format) - __trace_mark(0, metadata, + __ust_marker(0, metadata, core_marker_format, &call_data, "channel %s name %s format %s", @@ -1342,8 +1332,10 @@ static void new_markers(struct marker * const *start, struct marker * const *end { if (new_marker_cb) { struct marker * const *m; - for(m=start; m < end; m++) { - new_marker_cb(*m); + + for(m = start; m < end; m++) { + if (*m) + new_marker_cb(*m); } } } @@ -1381,7 +1373,7 @@ lib_added: /* FIXME: update just the loaded lib */ lib_update_markers(); - DBG("just registered a markers section from %p and having %d markers", markers_start, markers_count); + DBG("just registered a markers section from %p and having %d markers (minus dummy markers)", markers_start, markers_count); return 0; } @@ -1423,7 +1415,7 @@ void __attribute__((constructor)) init_markers(void) } } -void __attribute__((constructor)) destroy_markers(void) +void __attribute__((destructor)) destroy_markers(void) { marker_unregister_lib(__start___markers_ptrs); }