*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':
*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':
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;
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;
{
struct marker_info *info;
- info = g_hash_table_lookup(trace->markers_hash, (gconstpointer)name);
- if (!info)
- g_error("Got marker format \"%s\", but marker name \"%s\" has no ID yet. "
- "Kernel issue.",
- format, name);
+ info = marker_get_info_from_name(trace, name);
+ if (!info) {
+ /* We ignore marker format that does not have IDs. It just means that it
+ * is only used by someone else's probe.
+ */
+ //g_error("Got marker format \"%s\", but marker name \"%s\" has no ID yet. "
+ // "Kernel issue.",
+ // format, g_quark_to_string(name));
+ return 0;
+ }
for (; info != NULL; info = info->next) {
if (info->format)
g_free(info->format);
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;
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;
}
}