#define dprintf(...)
#endif
-void preset_field_type_size(event_t *event_type,
- off_t offset_root, off_t offset_parent,
- enum field_status *fixed_root, enum field_status *fixed_parent,
- field_t *field);
-
/* Code printing */
void print_tabs(unsigned int tabs, FILE *fd)
fprintf(fd, "\t");
}
-/* Type size checking */
-/* Uses #error in the generated code to signal error and stop the compiler */
-int print_check(int fd);
-
-
/* print type.
*
* Copied from construct_types_and_fields in LTTV facility.c */
break;
case ARRAY:
assert(td->size >= 0);
- return has_type_fixed(((field_t*)td->fields.array[0])->type);
+ return has_type_fixed_size(((field_t*)td->fields.array[0])->type);
+ break;
+ case NONE:
+ printf("There is a type defined to NONE : bad.\n");
+ assert(0);
break;
}
+ return 0; //make gcc happy.
}
if(print_type_declaration(((field_t*)td->fields.array[0])->type,
fd, 0, basename, "")) return 1;
}
- fprintf(fd, "#define LTTNG_ARRAY_SIZE_%s %llu\n", basename,
+ fprintf(fd, "#define LTTNG_ARRAY_SIZE_%s %zu\n", basename,
td->size);
fprintf(fd, "typedef ");
if(print_type(((field_t*)td->fields.array[0])->type,
case OFF_T:
case ENUM:
fprintf(fd, "sizeof(");
- if(print_type(td->type,
- fd, 0, basename, "")) return 1;
+ if(print_type(td, fd, 0, basename, "")) return 1;
fprintf(fd, ")");
break;
case STRING:
fprintf(fd, "lttng_get_alignment_array_%s(obj->%s)", basename,
field_name);
break;
+ case NONE:
+ printf("error : type NONE unexpected\n");
+ return 1;
+ break;
}
return 0;
print_tabs(tabs, fd);
fprintf(fd, "size = ");
fprintf(fd, "sizeof(");
- if(print_type(td->type,
- fd, 0, basename, "")) return 1;
+ if(print_type(td, fd, 0, basename, "")) return 1;
fprintf(fd, ");\n");
print_tabs(tabs, fd);
- fprintf(fd, "size += ltt_align(*to+*len, size) + size;");
+ fprintf(fd, "size += ltt_align(*to+*len, size) + size;\n");
print_tabs(tabs, fd);
fprintf(fd, "*len += size;");
break;
case STRING:
print_tabs(tabs, fd);
- fprintf(fd, "lttng_write_string_%s(buffer, to_base, to, from, len, obj->%s);\n");
+ fprintf(fd, "lttng_write_string_%s(buffer, to_base, to, from, len, obj->%s);\n", basename, field_name);
break;
case SEQUENCE:
print_tabs(tabs, fd);
fprintf(fd, "lttng_write_array_%s(buffer, to_base, to, from, len, obj->%s)", basename,
field_name);
break;
+ case NONE:
+ printf("Error : type NONE unexpected\n");
+ return 1;
+ break;
}
return 0;
fprintf(fd, "static inline size_t lttng_get_alignment_sequence_%s(\n",
basename);
print_tabs(2, fd);
- if(print_type(td->type, fd, 0, basename, "")) return 1;
+ if(print_type(td, fd, 0, basename, "")) return 1;
fprintf(fd, " *obj)\n");
fprintf(fd, "{\n");
print_tabs(1, fd);
print_tabs(1, fd);
fprintf(fd, "localign = ");
if(print_type_alignment(((field_t*)td->fields.array[0])->type,
- fd, 0, basename, field->name)) return 1;
+ fd, 0, basename, ((field_t*)td->fields.array[0])->name)) return 1;
fprintf(fd, ";\n");
print_tabs(1, fd);
fprintf(fd, "align = max(align, localign);\n");
print_tabs(1, fd);
fprintf(fd, "localign = ");
if(print_type_alignment(((field_t*)td->fields.array[1])->type,
- fd, 0, basename, field->name)) return 1;
+ fd, 0, basename, ((field_t*)td->fields.array[1])->name)) return 1;
fprintf(fd, ";\n");
print_tabs(1, fd);
fprintf(fd, "align = max(align, localign);\n");
fprintf(fd, "static inline size_t lttng_get_alignment_struct_%s(\n",
basename);
print_tabs(2, fd);
- if(print_type(td->type, fd, 0, basename, "")) return 1;
+ if(print_type(td, fd, 0, basename, "")) return 1;
fprintf(fd, " *obj)\n");
fprintf(fd, "{\n");
print_tabs(1, fd);
fprintf(fd, "static inline size_t lttng_get_alignment_union_%s(\n",
basename);
print_tabs(2, fd);
- if(print_type(td->type, fd, 0, basename, "")) return 1;
+ if(print_type(td, fd, 0, basename, "")) return 1;
fprintf(fd, " *obj)\n");
fprintf(fd, "{\n");
print_tabs(1, fd);
fprintf(fd, "static inline size_t lttng_get_alignment_array_%s(\n",
basename);
print_tabs(2, fd);
- if(print_type(td->type, fd, 0, basename, "")) return 1;
+ if(print_type(td, fd, 0, basename, "")) return 1;
fprintf(fd, " obj)\n");
fprintf(fd, "{\n");
print_tabs(1, fd);
fprintf(fd, "return \n");
if(print_type_alignment(((field_t*)td->fields.array[0])->type,
- fd, 0, basename, field->name)) return 1;
+ fd, 0, basename, ((field_t*)td->fields.array[0])->name)) return 1;
fprintf(fd, ";\n");
break;
default:
fprintf(fd, "}\n");
fprintf(fd, "\n");
+ return 0;
}
/* print type write function.
print_tabs(2, fd);
fprintf(fd, "size_t *len,\n");
print_tabs(2, fd);
- if(print_type(td->type, fd, 0, basename, "")) return 1;
+ if(print_type(td, fd, 0, basename, "")) return 1;
switch(td->type) {
case SEQUENCE:
print_tabs(1, fd);
fprintf(fd, "align = \n");
- if(print_type_alignment(td, fd, 0, basename, field->name)) return 1;
+ if(print_type_alignment(td, fd, 0, basename, field_name)) return 1;
fprintf(fd, ";\n");
fprintf(fd, "\n");
print_tabs(1, fd);
fprintf(fd, "\n");
print_tabs(1, fd);
fprintf(fd, "*len += sizeof(");
- if(print_type(td, fd, 0, basename, field->name)) return 1;
+ if(print_type(td, fd, 0, basename, field_name)) return 1;
fprintf(fd, ");\n");
} else {
/* The type contains nested variable size subtypes :
print_tabs(1, fd);
fprintf(fd, "size = sizeof(\n");
if(print_type_write(((field_t*)td->fields.array[0])->type,
- fd, 1, basename, field->name)) return 1;
+ fd, 1, basename, ((field_t*)td->fields.array[0])->name)) return 1;
fprintf(fd, ");\n");
print_tabs(1, fd);
fprintf(fd, "*to += ltt_align(*to, size);\n");
print_tabs(1, fd);
fprintf(fd, "size = sizeof(\n");
if(print_type_write(((field_t*)td->fields.array[1])->type,
- fd, 1, basename, field->name)) return 1;
+ fd, 1, basename, ((field_t*)td->fields.array[1])->name)) return 1;
fprintf(fd, ");\n");
print_tabs(1, fd);
fprintf(fd, "*to += ltt_align(*to, size);\n");
print_tabs(1, fd);
fprintf(fd, "for(unsigned int i=0; i<obj->len; i++) {\n");
if(print_type_write(((field_t*)td->fields.array[1])->type,
- fd, 2, basename, field->name)) return 1;
+ fd, 2, basename, ((field_t*)td->fields.array[1])->name)) return 1;
print_tabs(1, fd);
fprintf(fd, "}\n");
}
print_tabs(1, fd);
fprintf(fd, "for(unsigned int i=0; i<LTTNG_ARRAY_SIZE_%s; i++) {\n", basename);
if(print_type_write(((field_t*)td->fields.array[1])->type,
- fd, 2, basename, field->name)) return 1;
+ fd, 2, basename, ((field_t*)td->fields.array[1])->name)) return 1;
print_tabs(1, fd);
fprintf(fd, "}\n");
}
fprintf(fd, "void *from;");
print_tabs(1, fd);
fprintf(fd, "size_t len = 0;\n");
- fprintf(fd, "\n");
+ print_tabs(1, fd);
fprintf(fd, "size_t slot_size;\n");
- fprintf(fd, "\n");
+ print_tabs(1, fd);
fprintf(fd, "cycles_t tsc;\n");
- fprintf(fd, "\n");
+ print_tabs(1, fd);
fprintf(fd, "size_t before_hdr_pad, size_t after_hdr_pad;\n");
fprintf(fd, "\n");
print_tabs(1, fd);
fprintf(fd, "/* size = to_base + to + len */\n");
print_tabs(1, fd);
- fprintf(fd, "/* Assume that the padding for alignment starts at a void*\n");
+ fprintf(fd, "/* Assume that the padding for alignment starts at a\n");
print_tabs(1, fd);
- fprintf(fd, "/* address. */\n");
+ fprintf(fd, " * sizeof(void *) address. */\n");
fprintf(fd, "\n");
for(unsigned int i=0;i<event->fields.position;i++){
- field_t *field = (field_t*)(td->fields.array[i]);
+ field_t *field = (field_t*)(event->fields.array[i]);
type_descriptor_t *type = field->type;
if(print_type_write(type,
fd, 1, basename, field->name)) return 1;
fprintf(fd, "\n");
}
+ fprintf(fd, "\n");
/* Take locks : make sure the trace does not vanish while we write on
* it. A simple preemption disabling is enough (using rcu traces). */
print_tabs(1, fd);
fprintf(fd,
"index = ltt_get_index_from_facility(ltt_facility_%s_%X,\n"\
- "\t\t\t\tevent_%s);\n",
+ "\t\t\t\t\t\tevent_%s);\n",
fac->name, fac->checksum, event->name);
}
fprintf(fd,"\n");
}
print_tabs(2, fd);
- fprintf(fp, "channel = ltt_get_channel_from_index(trace, index);\n");
+ fprintf(fd, "channel = ltt_get_channel_from_index(trace, index);\n");
print_tabs(2, fd);
fprintf(fd, "relayfs_buf = channel->rchan->buf[channel->rchan->buf->cpu];\n");
fprintf(fd, "\n");
print_tabs(2, fd);
fprintf(fd, "slot_size = 0;\n");
print_tabs(2, fd);
- fprintf(fd, "buffer = ltt_reserve_slot(trace, relayfs_buf, to_base + to + len, &slot_size, &tsc,\n"
- "\t\t&before_hdr_pad, &after_hdr_pad);\n");
+ fprintf(fd, "buffer = ltt_reserve_slot(trace, relayfs_buf,\n");
+ print_tabs(3, fd);
+ fprintf(fd, "to_base + to + len, &slot_size, &tsc,\n");
+ print_tabs(3, fd);
+ fprintf(fd, "&before_hdr_pad, &after_hdr_pad);\n");
/* If error, return */
print_tabs(2, fd);
fprintf(fd, "if(!buffer) return;\n\n");
/* write data : assume stack alignment is the same as struct alignment. */
for(unsigned int i=0;i<event->fields.position;i++){
- field_t *field = (field_t*)(td->fields.array[i]);
+ field_t *field = (field_t*)(event->fields.array[i]);
type_descriptor_t *type = field->type;
/* Set from */
- print_tabs(3, fd);
- fprintf(fd, "from = %s;\n", f->name);
+ print_tabs(2, fd);
+ switch(type->type) {
+ case SEQUENCE:
+ case UNION:
+ case ARRAY:
+ case STRUCT:
+ case STRING:
+ fprintf(fd, "from = %s;\n", field->name);
+ break;
+ default:
+ fprintf(fd, "from = &%s;\n", field->name);
+ break;
+ }
+
if(print_type_write(type,
fd, 2, basename, field->name)) return 1;
char *token;
parse_file_t in;
facility_t * fac = NULL;
- unsigned long checksum;
char buffer[BUFFER_SIZE];
int generated = FALSE;
//check if any namedType is not defined
checkNamedTypesImplemented(&fac->named_types);
- generateChecksum(fac->name, &checksum, &fac->events);
+ generateChecksum(fac->name, &fac->checksum, &fac->events);
generated = TRUE;
}