fprintf(fd, "%s", field->name);
fprintf(fd, ";\n");
}
- fprintf(fd, "} LTT_ALIGN;\n");
+ if(td->fac->align)
+ fprintf(fd, "} LTT_ALIGN;\n");
+ else
+ fprintf(fd, "};\n");
fprintf(fd, "\n");
break;
case UNION:
fprintf(fd, "%s", field->name);
fprintf(fd, ";\n");
}
- fprintf(fd, "} LTT_ALIGN;\n");
+ if(td->fac->align)
+ fprintf(fd, "} LTT_ALIGN;\n");
+ else
+ fprintf(fd, "};\n");
fprintf(fd, "\n");
break;
default:
case ENUM:
print_tabs(tabs, fd);
fprintf(fd, "align = ");
- if(print_type_alignment(td, fd, 0, basename, "", "obj")) return 1;
+ if(td->fac->align) {
+ if(print_type_alignment(td, fd, 0, basename, "", "obj")) return 1;
+ } else
+ fprintf(fd, "0");
fprintf(fd, ";\n");
fprintf(fd, "\n");
print_tabs(tabs, fd);
- fprintf(fd, "if(*len == 0) {\n");
+ fprintf(fd, "if (*len == 0) {\n");
print_tabs(tabs+1, fd);
fprintf(fd, "*to += ltt_align(*to, align); /* align output */\n");
print_tabs(tabs, fd);
unsigned int basename_len = 0;
if(td->custom_write) return 0; /* Does print custom type */
+ if(td->fac->align == 0) return 0;
strncpy(basename, nest_name, PATH_MAX);
basename_len = strlen(basename);
print_tabs(1, fd);
fprintf(fd, "/* Flush pending memcpy */\n");
print_tabs(1, fd);
- fprintf(fd, "if(*len != 0) {\n");
+ fprintf(fd, "if (*len != 0) {\n");
print_tabs(2, fd);
- fprintf(fd, "if(buffer != NULL)\n");
+ fprintf(fd, "if (buffer != NULL)\n");
print_tabs(3, fd);
fprintf(fd, "memcpy(buffer+*to_base+*to, *from, *len);\n");
print_tabs(1, fd);
print_tabs(1, fd);
fprintf(fd, "align = ");
- if(print_type_alignment(td, fd, 0, basename, "", "obj")) return 1;
+ if(td->fac->align) {
+ if(print_type_alignment(td, fd, 0, basename, "", "obj")) return 1;
+ } else
+ fprintf(fd, "0");
fprintf(fd, ";\n");
fprintf(fd, "\n");
print_tabs(1, fd);
- fprintf(fd, "if(*len == 0) {\n");
+ fprintf(fd, "if (*len == 0) {\n");
print_tabs(2, fd);
fprintf(fd, "*to += ltt_align(*to, align); /* align output */\n");
print_tabs(1, fd);
// print_tabs(1, fd);
// fprintf(fd, "*to += ltt_align(*to, size);\n");
print_tabs(1, fd);
- fprintf(fd, "if(buffer != NULL)\n");
+ fprintf(fd, "if (buffer != NULL)\n");
print_tabs(2, fd);
fprintf(fd, "memcpy(buffer+*to_base+*to, &obj->len, *len);\n");
print_tabs(1, fd);
print_tabs(1, fd);
fprintf(fd, "*len = obj->len * (*len);\n");
print_tabs(1, fd);
- fprintf(fd, "if(buffer != NULL)\n");
+ fprintf(fd, "if (buffer != NULL)\n");
print_tabs(2, fd);
fprintf(fd, "memcpy(buffer+*to_base+*to, obj->array, *len);\n");
print_tabs(1, fd);
print_tabs(1, fd);
fprintf(fd, "/* Variable length child : iter. */\n");
print_tabs(1, fd);
- fprintf(fd, "for(unsigned int i=0; i<obj->len; i++) {\n");
+ 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, "array[i]", "obj->", 1)) return 1;
print_tabs(1, fd);
print_tabs(1, fd);
fprintf(fd, "/* Realign the *to_base on arch size, set *to to 0 */\n");
print_tabs(1, fd);
- fprintf(fd, "*to += ltt_align(*to, sizeof(void *));\n");
+ if(td->fac->align)
+ fprintf(fd, "*to += ltt_align(*to, sizeof(void *));\n");
print_tabs(1, fd);
fprintf(fd, "*to_base = *to_base+*to;\n");
print_tabs(1, fd);
print_tabs(1, fd);
fprintf(fd, "size = strlen(obj) + 1; /* Include final NULL char. */\n");
print_tabs(1, fd);
- fprintf(fd, "if(buffer != NULL)\n");
+ fprintf(fd, "if (buffer != NULL)\n");
print_tabs(2, fd);
fprintf(fd, "memcpy(buffer+*to_base+*to, obj, size);\n");
print_tabs(1, fd);
print_tabs(1, fd);
fprintf(fd, "/* Realign the *to_base on arch size, set *to to 0 */\n");
print_tabs(1, fd);
- fprintf(fd, "*to += ltt_align(*to, sizeof(void *));\n");
+ if(td->fac->align)
+ fprintf(fd, "*to += ltt_align(*to, sizeof(void *));\n");
print_tabs(1, fd);
fprintf(fd, "*to_base = *to_base+*to;\n");
print_tabs(1, fd);
print_tabs(1, fd);
fprintf(fd, "/* Variable length child : iter. */\n");
print_tabs(1, fd);
- fprintf(fd, "for(unsigned int i=0; i<LTTNG_ARRAY_SIZE_%s; i++) {\n", basename);
+ fprintf(fd, "for (unsigned int i = 0; i < LTTNG_ARRAY_SIZE_%s; i++) {\n", basename);
if(print_type_write(((field_t*)td->fields.array[0])->type,
fd, 2, basename, "", "obj->array[i]", 1)) return 1;
print_tabs(1, fd);
fprintf(fd, "void");
}
fprintf(fd,")\n");
+#if 0
fprintf(fd,
- "#if (!defined(CONFIG_LTT) || !defined(CONFIG_LTT_FACILITY_%s))\n",
- fac->capname);
+ "#if (!defined(CONFIG_LTT) || (!defined(CONFIG_LTT_FACILITY_%s) && !defined(CONFIG_LTT_FACILITY_%s_MODULE)))\n",
+ fac->capname, fac->capname);
fprintf(fd, "{\n");
fprintf(fd, "}\n");
fprintf(fd,"#else\n");
+#endif //0
fprintf(fd, "{\n");
/* Print the function variables */
print_tabs(1, fd);
print_tabs(1, fd);
}
fprintf(fd, "u64 tsc;\n");
- print_tabs(1, fd);
- fprintf(fd, "size_t before_hdr_pad, after_hdr_pad, header_size;\n");
fprintf(fd, "\n");
- print_tabs(1, fd);
- fprintf(fd, "if(ltt_traces.num_active_traces == 0) return;\n");
- fprintf(fd, "\n");
+ if(!event->force) {
+ print_tabs(1, fd);
+ fprintf(fd, "if (ltt_traces.num_active_traces == 0)\n");
+ print_tabs(2, fd);
+ fprintf(fd, "return;\n");
+ fprintf(fd, "\n");
+ }
/* Calculate event variable len + event data alignment offset.
* Assume that the padding for alignment starts at a void*
} else {
print_tabs(1, fd);
fprintf(fd,
- "index = ltt_get_index_from_facility(ltt_facility_%s_%X,\n"\
+ "index = ltt_get_index_from_facility_%s(" \
"\t\t\t\t\t\tevent_%s_%s);\n",
- fac->name, fac->checksum, fac->name, event->name);
+ fac->name, fac->name, event->name);
}
fprintf(fd,"\n");
/* For each trace */
print_tabs(1, fd);
fprintf(fd, "list_for_each_entry_rcu(trace, <t_traces.head, list) {\n");
- print_tabs(2, fd);
- fprintf(fd, "if(!trace->active) continue;\n\n");
+ if(!event->force) {
+ print_tabs(2, fd);
+ fprintf(fd, "if (!trace->active)\n");
+ print_tabs(3, fd);
+ fprintf(fd, "continue;\n\n");
+ }
if(event->per_trace) {
print_tabs(2, fd);
- fprintf(fd, "if(dest_trace != trace) continue;\n\n");
+ fprintf(fd, "if (dest_trace != trace)\n");
+ print_tabs(3, fd);
+ fprintf(fd, "continue;\n\n");
}
print_tabs(2, fd);
print_tabs(2, fd);
fprintf(fd, "buffer = ltt_reserve_slot(trace, channel, &transport_data,\n");
print_tabs(3, fd);
- fprintf(fd, "reserve_size, &slot_size, &tsc,\n");
- print_tabs(3, fd);
- fprintf(fd, "&before_hdr_pad, &after_hdr_pad, &header_size);\n");
+ fprintf(fd, "reserve_size, &slot_size, &tsc);\n");
/* If error, return */
print_tabs(2, fd);
- fprintf(fd, "if(!buffer) continue; /* buffer full */\n\n");
+ fprintf(fd, "if (!buffer)\n");
+ print_tabs(3, fd);
+ fprintf(fd, "continue; /* buffer full */\n\n");
//print_tabs(2, fd);
// for DEBUG only
// fprintf(fd, "goto commit; /* DEBUG : never actually write. */\n\n");
fprintf(fd, "\n");
/* Write event header */
- print_tabs(2, fd);
- fprintf(fd, "ltt_write_event_header(trace, channel, buffer,\n");
- print_tabs(3, fd);
- fprintf(fd, "ltt_facility_%s_%X, event_%s_%s,\n", fac->name, fac->checksum,
- fac->name, event->name);
- print_tabs(3, fd);
- fprintf(fd, "reserve_size, before_hdr_pad, tsc);\n");
- print_tabs(2, fd);
- fprintf(fd, "*to_base += before_hdr_pad + after_hdr_pad + header_size;\n");
- fprintf(fd, "\n");
+ if(strcmp("compact", fac->name) != 0) {
+ print_tabs(2, fd);
+ fprintf(fd, "buffer = ltt_write_event_header(trace, channel, buffer,\n");
+ print_tabs(3, fd);
+ fprintf(fd, "ltt_facility_%s_%X, event_%s_%s,\n", fac->name, fac->checksum,
+ fac->name, event->name);
+ print_tabs(3, fd);
+ fprintf(fd, "reserve_size, tsc);\n");
+ } else {
+ print_tabs(2, fd);
+ fprintf(fd, "buffer = ltt_write_compact_header(trace, channel, buffer,\n");
+ print_tabs(3, fd);
+ fprintf(fd, "ltt_facility_%s_%X, event_%s_%s,\n", fac->name, fac->checksum,
+ fac->name, event->name);
+ print_tabs(3, fd);
+ if(event->compact_data) {
+ assert(event->fields.position > 0);
+ field_t *field = (field_t*)(event->fields.array[0]);
+ fprintf(fd, "reserve_size, tsc, lttng_param_%s);\n",
+ field->name);
+ } else
+ fprintf(fd, "reserve_size, tsc, 0);\n");
+ }
/* write data. */
for(unsigned int i=0;i<event->fields.position;i++){
field_t *field = (field_t*)(event->fields.array[i]);
type_descriptor_t *type = field->type;
-
+
+ /* First param is compacted in the header */
+ if(event->compact_data && i == 0)
+ continue;
/* Set from */
print_tabs(2, fd);
switch(type->type) {
print_tabs(2, fd);
fprintf(fd, "/* Flush pending memcpy */\n");
print_tabs(2, fd);
- fprintf(fd, "if(*len != 0) {\n");
+ fprintf(fd, "if (*len != 0) {\n");
print_tabs(3, fd);
fprintf(fd, "memcpy(buffer+*to_base+*to, *from, *len);\n");
print_tabs(3, fd);
print_tabs(1, fd);
fprintf(fd, "ltt_nesting[smp_processor_id()]--;\n");
print_tabs(1, fd);
- fprintf(fd, "preempt_enable_no_resched();\n");
+ fprintf(fd, "preempt_enable();\n");
fprintf(fd, "}\n");
- fprintf(fd, "#endif //(!defined(CONFIG_LTT) || !defined(CONFIG_LTT_FACILITY_%s))\n\n",
- fac->capname);
+#if 0
+ fprintf(fd, "#endif //(!defined(CONFIG_LTT) || (!defined(CONFIG_LTT_FACILITY_%s) && !defined(CONFIG_LTT_FACILITY_%s_MODULE)))\n\n",
+ fac->capname, fac->capname);
+#endif //0
return 0;
}
print_tabs(1, fd);
fprintf(fd, "int ret = 0;\n");
if(event->param_buffer) {
- print_tabs(1, fd);
- fprintf(fd, "reserve_size = ltt_align(reserve_size, sizeof(void *));\n");
+ //FIX print_tabs(1, fd);
+ //fprintf(fd, "reserve_size = ltt_align(reserve_size, sizeof(void *));\n");
print_tabs(1, fd);
fprintf(fd, "{\n");
goto do_syscall;
print_tabs(2, fd);
fprintf(fd, "/* Flush pending memcpy */\n");
print_tabs(2, fd);
- fprintf(fd, "if(*len != 0) {\n");
+ fprintf(fd, "if (*len != 0) {\n");
print_tabs(3, fd);
fprintf(fd, "memcpy(buffer+*to_base+*to, *from, *len);\n");
print_tabs(3, fd);
do_syscall:
print_tabs(2, fd);
- fprintf(fd, "ret = ltt_trace_generic(ltt_facility_%s_%X, event_%s_%s, buffer, reserve_size, LTT_BLOCKING);\n", fac->name, fac->checksum, fac->name, event->name);
+ fprintf(fd, "ret = ltt_trace_generic(ltt_facility_%s_%X, event_%s_%s, buffer, reserve_size, LTT_BLOCKING, %u);\n", fac->name, fac->checksum, fac->name, event->name, event->high_priority);
print_tabs(1, fd);
fprintf(fd, "}\n\n");
}
fprintf(fd, "uint64_t tsc;\n");
print_tabs(1, fd);
- fprintf(fd, "size_t before_hdr_pad, after_hdr_pad, header_size;\n");
- fprintf(fd, "\n");
print_tabs(1, fd);
- fprintf(fd, "if(!trace) {\n");
+ fprintf(fd, "if (!trace) {\n");
print_tabs(2, fd);
fprintf(fd, "ltt_thread_init();\n");
print_tabs(2, fd);
if(event->per_trace) {
print_tabs(2, fd);
- fprintf(fd, "if(dest_trace != trace) continue;\n\n");
+ fprintf(fd, "if (dest_trace != trace) continue;\n\n");
}
print_tabs(2, fd);
print_tabs(2, fd);
fprintf(fd, "buffer = ltt_reserve_slot(trace, ltt_buf,\n");
print_tabs(3, fd);
- fprintf(fd, "reserve_size, &slot_size, &tsc,\n");
- print_tabs(3, fd);
- fprintf(fd, "&before_hdr_pad, &after_hdr_pad, &header_size);\n");
+ fprintf(fd, "reserve_size, &slot_size, &tsc);\n");
/* If error, return */
print_tabs(2, fd);
- fprintf(fd, "if(!buffer) goto end; /* buffer full */\n\n");
+ fprintf(fd, "if (!buffer)\n");
+ print_tabs(3, fd);
+ fprintf(fd, "goto end; /* buffer full */\n\n");
//print_tabs(2, fd);
// for DEBUG only
// fprintf(fd, "goto commit; /* DEBUG : never actually write. */\n\n");
/* Write event header */
print_tabs(2, fd);
- fprintf(fd, "ltt_write_event_header(trace, ltt_buf, buffer,\n");
+ fprintf(fd, "buffer = ltt_write_event_header(trace, ltt_buf, buffer,\n");
print_tabs(3, fd);
fprintf(fd, "ltt_facility_%s_%X, event_%s_%s,\n", fac->name, fac->checksum,
fac->name, event->name);
print_tabs(3, fd);
- fprintf(fd, "reserve_size, before_hdr_pad, tsc);\n");
- print_tabs(2, fd);
- fprintf(fd, "*to_base += before_hdr_pad + after_hdr_pad + header_size;\n");
- fprintf(fd, "\n");
+ fprintf(fd, "reserve_size, tsc);\n");
/* write data. */
print_tabs(2, fd);
fprintf(fd, "/* Flush pending memcpy */\n");
print_tabs(2, fd);
- fprintf(fd, "if(*len != 0) {\n");
+ fprintf(fd, "if (*len != 0) {\n");
print_tabs(3, fd);
fprintf(fd, "memcpy(buffer+*to_base+*to, *from, *len);\n");
print_tabs(3, fd);
fprintf(fd, "#define _LTT_FACILITY_%s_H_\n\n", fac->capname);
fprintf(fd, "#include <linux/types.h>\n");
if(!fac->arch)
- fprintf(fd, "#include <linux/ltt/ltt-facility-id-%s.h>\n", fac->name);
+ fprintf(fd, "#include <ltt/ltt-facility-id-%s.h>\n", fac->name);
else
- fprintf(fd, "#include <asm/ltt/ltt-facility-id-%s_%s.h>\n",
+ fprintf(fd, "#include <ltt/ltt-facility-id-%s_%s.h>\n",
fac->name,
fac->arch);
- fprintf(fd, "#include <linux/ltt-core.h>\n");
+ fprintf(fd, "#include <ltt/ltt-tracer.h>\n");
fprintf(fd, "\n");
}
if(print_type_declaration(types->array[i], fd,
0, "", "")) return 1;
/* Print also the align function */
- if(print_type_alignment_fct(types->array[i], fd,
+ if(((type_descriptor_t*)types->array[i])->fac->align)
+ if(print_type_alignment_fct(types->array[i], fd,
0, "", "")) return 1;
/* Print also the write function */
if(print_type_write_fct(types->array[i], fd,
if(t->type_name == NULL) {
if((print_type_declaration(t, fd, 0, basename, f->name))) return 1;
/* Print also the align function */
- if((print_type_alignment_fct(t, fd, 0, basename, f->name))) return 1;
+ if(fac->align) {
+ if((print_type_alignment_fct(t, fd, 0, basename, f->name))) return 1;
+ }
/* Print also the write function */
if((print_type_write_fct(t, fd, 0, basename, f->name))) return 1;
}
fprintf(fd, "#ifdef CONFIG_LTT\n\n");
fprintf(fd,"#include <linux/ltt-facilities.h>\n");
if(!fac->arch)
- fprintf(fd,"#include <linux/ltt/ltt-facility-id-%s.h>\n\n",
+ fprintf(fd,"#include <ltt/ltt-facility-id-%s.h>\n\n",
fac->name);
else
- fprintf(fd,"#include <asm/ltt/ltt-facility-id-%s_%s.h>\n\n",
+ fprintf(fd,"#include <ltt/ltt-facility-id-%s_%s.h>\n\n",
fac->name,
fac->arch);
fprintf(fd,"ltt_facility_t\tltt_facility_%s;\n", fac->name);
fprintf(fd,"ltt_facility_t\tltt_facility_%s_%X;\n\n",
fac->name, fac->checksum);
+ fprintf(fd,"extern unsigned int ltt_get_channel_index_%s(u8 eID);\n\n",
+ fac->name);
fprintf(fd,"#define LTT_FACILITY_SYMBOL\t\tltt_facility_%s\n",
fac->name);
fprintf(fd,"#define LTT_FACILITY_NAME\t\t\"%s\"\n", fac->name);
fprintf(fd,"#define LTT_FACILITY_NUM_EVENTS\tfacility_%s_num_events\n\n",
fac->name);
+ fprintf(fd,"#define LTT_FACILITY_ALIGNMENT\t\t%u\n\n",
+ fac->align);
+ fprintf(fd,"#define LTT_FACILITY_SELECT\t\tltt_get_channel_index_%s\n\n",
+ fac->name);
fprintf(fd, "#endif //CONFIG_LTT\n\n");
fprintf(fd, "#endif //_LTT_FACILITY_LOADER_%s_H_\n", fac->capname);
fprintf(fd,"#include <ltt/ltt-facility-id-%s.h>\n\n",
fac->name);
else
- fprintf(fd,"#include <asm/ltt/ltt-facility-id-%s_%s.h>\n\n",
+ fprintf(fd,"#include <ltt/ltt-facility-id-%s_%s.h>\n\n",
fac->name,
fac->arch);
fprintf(fd,"ltt_facility_t\tltt_facility_%s;\n", fac->name);
fprintf(fd,"#define LTT_FACILITY_NAME\t\t\t\t\t\t\t\t\"%s\"\n", fac->name);
fprintf(fd,"#define LTT_FACILITY_NUM_EVENTS\t\t\t\t\tfacility_%s_num_events\n\n",
fac->name);
+ fprintf(fd,"#define LTT_FACILITY_ALIGNMENT\t\t\t\t\t%u\n\n",
+ fac->align);
fprintf(fd, "#endif //_LTT_FACILITY_LOADER_%s_H_\n", fac->capname);
fclose(fd);
fprintf(fd, "#include <linux/ltt-facilities.h>\n");
fprintf(fd, "#include <linux/module.h>\n");
fprintf(fd, "#include <linux/init.h>\n");
- fprintf(fd, "#include <linux/config.h>\n");
if(!fac->arch)
fprintf(fd, "#include \"ltt-facility-loader-%s.h\"\n", fac->name);
else
fprintf(fd, "\t.num_events = LTT_FACILITY_NUM_EVENTS,\n");
fprintf(fd, "\t.checksum = LTT_FACILITY_CHECKSUM,\n");
fprintf(fd, "\t.symbol = SYMBOL_STRING(LTT_FACILITY_SYMBOL),\n");
+ fprintf(fd, "\t.alignment = LTT_FACILITY_ALIGNMENT,\n");
+ fprintf(fd, "\t.select = LTT_FACILITY_SELECT,\n");
fprintf(fd, "};\n");
fprintf(fd, "\n");
fprintf(fd, "static int __init facility_init(void)\n");
fprintf(fd, "\tint err;\n");
fprintf(fd, "\n");
fprintf(fd, "\terr = ltt_facility_unregister(LTT_FACILITY_SYMBOL);\n");
- fprintf(fd, "\tif(err != 0)\n");
+ fprintf(fd, "\tif (err != 0)\n");
fprintf(fd, "\t\tprintk(KERN_ERR \"LTT : Error in unregistering facility.\\n\");\n");
fprintf(fd, "\n");
fprintf(fd, "}\n");
fprintf(fd, "\t.name = LTT_FACILITY_NAME,\n");
fprintf(fd, "\t.num_events = LTT_FACILITY_NUM_EVENTS,\n");
fprintf(fd, "#ifndef LTT_PACK\n");
- fprintf(fd, "\t.alignment = sizeof(void*),\n");
+ fprintf(fd, "\t.alignment = LTT_FACILITY_ALIGNMENT?sizeof(void*):0,\n");
fprintf(fd, "#else\n");
fprintf(fd, "\t.alignment = 0,\n");
fprintf(fd, "#endif //LTT_PACK\n");
fprintf(fd, "\terr = ltt_register_generic(<T_FACILITY_SYMBOL, &facility);\n");
fprintf(fd, "\tLTT_FACILITY_CHECKSUM_SYMBOL = LTT_FACILITY_SYMBOL;\n");
fprintf(fd, "\t\n");
- fprintf(fd, "\tif(err) {\n");
+ fprintf(fd, "\tif (err) {\n");
fprintf(fd, "#ifdef LTT_SHOW_DEBUG\n");
fprintf(fd, "\t\tperror(\"Error in ltt_register_generic\");\n");
fprintf(fd, "#endif //LTT_SHOW_DEBUG\n");