X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Fltt%2Fmarker.c;h=aacfa00c873549190529bfcceba7cdeb587ae74a;hb=57f0543606127dc4e3956c62acc3bfaa353cad5e;hp=f344be05340ded706200692dd26cac1d0cf1806e;hpb=c7146c5c1e676a169708c76bc29534067b951fb5;p=lttv.git diff --git a/ltt/branches/poly/ltt/marker.c b/ltt/branches/poly/ltt/marker.c index f344be05..aacfa00c 100644 --- a/ltt/branches/poly/ltt/marker.c +++ b/ltt/branches/poly/ltt/marker.c @@ -80,7 +80,7 @@ static inline const char *parse_trace_type(struct marker_info *info, *trace_type = LTT_TYPE_STRING; goto parse_end; case 'p': - *trace_type = LTT_TYPE_UNSIGNED_INT; + *trace_type = LTT_TYPE_POINTER; *trace_size = info->pointer_size; goto parse_end; case 'd': @@ -184,7 +184,7 @@ static inline const char *parse_c_type(struct marker_info *info, *c_type = LTT_TYPE_STRING; goto parse_end; case 'p': - *c_type = LTT_TYPE_UNSIGNED_INT; + *c_type = LTT_TYPE_POINTER; *c_size = info->pointer_size; goto parse_end; case 'd': @@ -250,6 +250,7 @@ static inline long add_type(struct marker_info *info, switch (trace_type) { case LTT_TYPE_SIGNED_INT: case LTT_TYPE_UNSIGNED_INT: + case LTT_TYPE_POINTER: field->size = trace_size; field->alignment = trace_size; field->attributes = attributes; @@ -299,6 +300,7 @@ long marker_update_fields_offsets(struct marker_info *info, const char *data) switch (field->type) { case LTT_TYPE_SIGNED_INT: case LTT_TYPE_UNSIGNED_INT: + case LTT_TYPE_POINTER: field->offset = offset + ltt_align(offset, field->alignment, info->alignment); offset = field->offset + field->size; @@ -404,11 +406,11 @@ int marker_format_event(LttTrace *trace, GQuark name, const char *format) { struct marker_info *info; - info = g_hash_table_lookup(trace->markers_hash, (gconstpointer)name); + info = marker_get_info_from_name(trace, name); if (!info) g_error("Got marker format \"%s\", but marker name \"%s\" has no ID yet. " "Kernel issue.", - format, name); + format, g_quark_to_string(name)); for (; info != NULL; info = info->next) { if (info->format) g_free(info->format); @@ -429,7 +431,8 @@ int marker_id_event(LttTrace *trace, GQuark name, guint16 id, int found = 0; if (trace->markers->len <= id) - trace->markers = g_array_set_size(trace->markers, id+1); + trace->markers = g_array_set_size(trace->markers, + max(trace->markers->len * 2, id + 1)); info = &g_array_index(trace->markers, struct marker_info, id); info->name = name; info->int_size = int_size; @@ -437,17 +440,20 @@ int marker_id_event(LttTrace *trace, GQuark name, guint16 id, info->pointer_size = pointer_size; info->size_t_size = size_t_size; info->alignment = alignment; + info->fields = NULL; info->next = NULL; - head = g_hash_table_lookup(trace->markers_hash, (gconstpointer)name); + head = marker_get_info_from_name(trace, name); if (!head) - g_hash_table_insert(trace->markers_hash, (gpointer)name, info); + g_hash_table_insert(trace->markers_hash, (gpointer)name, + (gpointer)(gulong)id); else { struct marker_info *iter; for (iter = head; iter != NULL; iter = iter->next) if (iter->name == name) found = 1; if (!found) { - g_hash_table_replace(trace->markers_hash, (gpointer)name, info); + g_hash_table_replace(trace->markers_hash, (gpointer)name, + (gpointer)(gulong)id); info->next = head; } }