field->name = g_quark_from_string(tmpname);
}
field->type = trace_type;
+ field->index = info->fields->len-1;
field->fmt = g_string_new(field_fmt->str);
switch (trace_type) {
case LTT_TYPE_SIGNED_INT:
case LTT_TYPE_UNSIGNED_INT:
case LTT_TYPE_POINTER:
- field->size = trace_size;
+ field->_size = trace_size;
field->alignment = trace_size;
info->largest_align = max((guint8)field->alignment,
(guint8)info->largest_align);
field->attributes = attributes;
if (offset == -1) {
- field->offset = -1;
+ field->_offset = -1;
field->static_offset = 0;
return -1;
} else {
- field->offset = offset + ltt_align(offset, field->alignment,
+ field->_offset = offset + ltt_align(offset, field->alignment,
info->alignment);
field->static_offset = 1;
- return field->offset + trace_size;
+ return field->_offset + trace_size;
}
case LTT_TYPE_STRING:
- field->offset = offset;
- field->size = 0; /* Variable length, size is 0 */
+ field->_offset = offset;
+ field->_size = 0; /* Variable length, size is 0 */
field->alignment = 1;
if (offset == -1)
field->static_offset = 0;
for (i = info->fields->len - 1; i >= 0; i--) {
field = &g_array_index(info->fields, struct marker_field, i);
if (field->static_offset) {
- offset = field->offset;
+ offset = field->_offset;
break;
}
}
case LTT_TYPE_SIGNED_INT:
case LTT_TYPE_UNSIGNED_INT:
case LTT_TYPE_POINTER:
- field->offset = offset + ltt_align(offset, field->alignment,
+ field->_offset = offset + ltt_align(offset, field->alignment,
info->alignment);
- offset = field->offset + field->size;
+ offset = field->_offset + field->_size;
break;
case LTT_TYPE_STRING:
- field->offset = offset;
+ field->_offset = offset;
offset = offset + strlen(&data[offset]) + 1;
// not aligning on pointer size, breaking genevent backward compatibility.
break;
return offset;
}
+void marker_update_event_fields_offsets(GArray *fields_offsets,
+ struct marker_info *info)
+{
+ unsigned int i;
+
+ g_array_set_size(fields_offsets, info->fields->len);
+ for (i = 0; i < info->fields->len; i++) {
+ struct marker_field *mfield =
+ &g_array_index(info->fields, struct marker_field, i);
+ struct LttField *eventfield =
+ &g_array_index(fields_offsets, struct LttField, i);
+ eventfield->offset = mfield->_offset;
+ eventfield->size = mfield->_size;
+ g_assert(eventfield->offset != -1);
+ g_assert(eventfield->size != -1);
+ }
+}
+
static void format_parse(const char *fmt, struct marker_info *info)
{
char trace_size = 0, c_size = 0; /*
return 0;
}
-static
-int marker_format_tf_event(LttTrace *trace, LttTracefile *tf,
- GQuark channel, GQuark name, const char *format)
+int marker_format_event(LttTrace *trace, GQuark channel, GQuark name,
+ const char *format)
{
struct marker_info *info;
struct marker_data *mdata;
char *fquery;
char *fcopy;
+ GArray *group;
+
+ group = g_datalist_id_get_data(&trace->tracefiles, channel);
+ if (!group)
+ return -ENOENT;
+ g_assert(group->len > 0);
+ mdata = g_array_index (group, LttTracefile, 0).mdata;
- mdata = tf->mdata;
fquery = marker_get_format_from_name(mdata, name);
if (fquery) {
if (strcmp(fquery, format) != 0)
return 0;
}
-int marker_format_event(LttTrace *trace, GQuark channel, GQuark name,
- const char *format)
-{
- GArray *group;
- int i, ret;
- LttTracefile *tf;
-
- group = g_datalist_id_get_data(&trace->tracefiles, channel);
- if (!group)
- return -ENOENT;
- g_assert(group->len > 0);
- for (i = 0; i < group->len; i++) {
- tf = &g_array_index (group, LttTracefile, i);
- ret = marker_format_tf_event(trace, tf, channel, name, format);
- if (ret)
- g_error("Error in marker_format_event");
- }
- return 0;
-}
-
-int marker_id_tf_event(LttTrace *trace, LttTracefile *tf,
- GQuark channel, GQuark name, guint16 id,
+int marker_id_event(LttTrace *trace, GQuark channel, GQuark name, guint16 id,
uint8_t int_size, uint8_t long_size, uint8_t pointer_size,
uint8_t size_t_size, uint8_t alignment)
{
struct marker_data *mdata;
struct marker_info *info, *head;
int found = 0;
+ GArray *group;
- mdata = tf->mdata;
+ g_debug("Add channel %s event %s %hu\n", g_quark_to_string(channel),
+ g_quark_to_string(name), id);
+
+ group = g_datalist_id_get_data(&trace->tracefiles, channel);
+ if (!group)
+ return -ENOENT;
+ g_assert(group->len > 0);
+ mdata = g_array_index (group, LttTracefile, 0).mdata;
if (mdata->markers->len <= id)
mdata->markers = g_array_set_size(mdata->markers,
return 0;
}
-int marker_id_event(LttTrace *trace, GQuark channel, GQuark name, guint16 id,
- uint8_t int_size, uint8_t long_size, uint8_t pointer_size,
- uint8_t size_t_size, uint8_t alignment)
-{
- GArray *group;
- int i, ret;
- LttTracefile *tf;
-
- g_debug("Add channel %s event %s %hu\n", g_quark_to_string(channel),
- g_quark_to_string(name), id);
-
- group = g_datalist_id_get_data(&trace->tracefiles, channel);
- if (!group)
- return -ENOENT;
- g_assert(group->len > 0);
- for (i = 0; i < group->len; i++) {
- tf = &g_array_index (group, LttTracefile, i);
- ret = marker_id_tf_event(trace, tf, channel, name, id, int_size, long_size,
- pointer_size, size_t_size, alignment);
- if (ret)
- g_error("Error in marker_id_event");
- }
- return 0;
-}
-
struct marker_data *allocate_marker_data(void)
{
struct marker_data *data;