userspace markers initial code
[lttv.git] / genevent / genevent.c
index 42e5563ff183fa5f7eb0d6f00a8a7c66a0f063bc..fd7b2b73900e73f9f088ebb8ab9fab5f3f2acca6 100644 (file)
@@ -86,6 +86,9 @@
 #define dprintf(...)
 #endif
 
+
+enum user_fct_types { USER_FCT_PROTO, USER_FCT_DECLARATION } ;
+
 /* Code printing */
 
 void print_tabs(unsigned int tabs, FILE *fd)
@@ -486,7 +489,10 @@ int print_type_declaration(type_descriptor_t * td, FILE *fd, unsigned int tabs,
                                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:
@@ -510,7 +516,10 @@ int print_type_declaration(type_descriptor_t * td, FILE *fd, unsigned int tabs,
                                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:
@@ -716,11 +725,14 @@ int print_type_write(type_descriptor_t * td, FILE *fd, unsigned int tabs,
                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);
@@ -839,6 +851,7 @@ int print_type_alignment_fct(type_descriptor_t * td, FILE *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);
@@ -1104,13 +1117,13 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs,
        }
 
        print_tabs(2, fd);
-       fprintf(fd, "void *buffer,\n");
+       fprintf(fd, "char *buffer,\n");
        print_tabs(2, fd);
        fprintf(fd, "size_t *to_base,\n");
        print_tabs(2, fd);
        fprintf(fd, "size_t *to,\n");
        print_tabs(2, fd);
-       fprintf(fd, "const void **from,\n");
+       fprintf(fd, "const char **from,\n");
        print_tabs(2, fd);
        fprintf(fd, "size_t *len,\n");
        print_tabs(2, fd);
@@ -1158,9 +1171,9 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs,
                        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);
@@ -1182,11 +1195,14 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs,
        
        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);
@@ -1227,7 +1243,7 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs,
 //                             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);
@@ -1253,7 +1269,7 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs,
                                        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);
@@ -1265,7 +1281,7 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs,
                                        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);
@@ -1275,7 +1291,8 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs,
                                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);
@@ -1284,13 +1301,13 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs,
                                print_tabs(1, fd);
                                fprintf(fd, "/* Put source *from just after the C sequence */\n");
                                print_tabs(1, fd);
-                               fprintf(fd, "*from = obj+1;\n");
+                               fprintf(fd, "*from = (const char*)(obj+1);\n");
                                break;
                        case STRING:
                                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);
@@ -1299,7 +1316,8 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs,
                                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);
@@ -1333,7 +1351,7 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs,
                                        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);
@@ -1398,12 +1416,14 @@ int print_event_logging_function(char *basename, facility_t *fac,
                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);
@@ -1413,9 +1433,9 @@ int print_event_logging_function(char *basename, facility_t *fac,
        print_tabs(1, fd);
        fprintf(fd, "struct ltt_trace_struct *trace;\n");
        print_tabs(1, fd);
-       fprintf(fd, "struct rchan_buf *relayfs_buf;\n");
+       fprintf(fd, "void *transport_data;\n");
        print_tabs(1, fd);
-       fprintf(fd, "void *buffer = NULL;\n");
+       fprintf(fd, "char *buffer = NULL;\n");
        print_tabs(1, fd);
        fprintf(fd, "size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */\n");
        print_tabs(1, fd);
@@ -1449,19 +1469,21 @@ int print_event_logging_function(char *basename, facility_t *fac,
                        print_tabs(1, fd);
                }
 
-               fprintf(fd, "const void *real_from;\n");
+               fprintf(fd, "const char *real_from;\n");
                print_tabs(1, fd);
-               fprintf(fd, "const void **from = &real_from;\n");
+               fprintf(fd, "const char **from = &real_from;\n");
                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*
@@ -1489,10 +1511,10 @@ int print_event_logging_function(char *basename, facility_t *fac,
                        case ARRAY:
                        case STRUCT:
                        case STRING:
-                               fprintf(fd, "*from = lttng_param_%s;\n", field->name);
+                               fprintf(fd, "*from = (const char*)lttng_param_%s;\n", field->name);
                                break;
                        default:
-                               fprintf(fd, "*from = &lttng_param_%s;\n", field->name);
+                               fprintf(fd, "*from = (const char*)&lttng_param_%s;\n", field->name);
                                break;
                }
 
@@ -1518,9 +1540,9 @@ int print_event_logging_function(char *basename, facility_t *fac,
        } 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");
 
@@ -1528,18 +1550,22 @@ int print_event_logging_function(char *basename, facility_t *fac,
        /* For each trace */
        print_tabs(1, fd);
        fprintf(fd, "list_for_each_entry_rcu(trace, &ltt_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);
        fprintf(fd, "channel = ltt_get_channel_from_index(trace, index);\n");
-       print_tabs(2, fd);
-       fprintf(fd, "relayfs_buf = channel->rchan->buf[smp_processor_id()];\n");
        fprintf(fd, "\n");
 
        
@@ -1549,14 +1575,14 @@ int print_event_logging_function(char *basename, facility_t *fac,
        print_tabs(2, fd);
        fprintf(fd, "slot_size = 0;\n");
        print_tabs(2, fd);
-       fprintf(fd, "buffer = ltt_reserve_slot(trace, relayfs_buf,\n");
-       print_tabs(3, fd);
-       fprintf(fd, "reserve_size, &slot_size, &tsc,\n");
+       fprintf(fd, "buffer = ltt_reserve_slot(trace, channel, &transport_data,\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");
@@ -1565,23 +1591,39 @@ int print_event_logging_function(char *basename, facility_t *fac,
        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) {
@@ -1590,10 +1632,10 @@ int print_event_logging_function(char *basename, facility_t *fac,
                        case ARRAY:
                        case STRUCT:
                        case STRING:
-                               fprintf(fd, "*from = lttng_param_%s;\n", field->name);
+                               fprintf(fd, "*from = (const char*)lttng_param_%s;\n", field->name);
                                break;
                        default:
-                               fprintf(fd, "*from = &lttng_param_%s;\n", field->name);
+                               fprintf(fd, "*from = (const char*)&lttng_param_%s;\n", field->name);
                                break;
                }
 
@@ -1606,7 +1648,7 @@ int print_event_logging_function(char *basename, facility_t *fac,
                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);
@@ -1625,7 +1667,7 @@ int print_event_logging_function(char *basename, facility_t *fac,
        // for DEBUG only.
        //fprintf(fd, "commit:\n"); /* DEBUG! */
        print_tabs(2, fd);
-       fprintf(fd, "ltt_commit_slot(relayfs_buf, buffer, slot_size);\n\n");
+       fprintf(fd, "ltt_commit_slot(channel, &transport_data, buffer, slot_size);\n\n");
        
        print_tabs(1, fd);
        fprintf(fd, "}\n\n");
@@ -1634,25 +1676,22 @@ int print_event_logging_function(char *basename, facility_t *fac,
        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_event_logging_function_user_generic
- * Print the logging function of an event for userspace tracing. This is the
- * core of genevent */
-int print_event_logging_function_user_generic(char *basename, facility_t *fac,
-               event_t *event, FILE *fd)
+int print_event_logging_function_header_user_generic(char *basename, facility_t *fac,
+               event_t *event, FILE *fd, enum user_fct_types fct_type)
 {
        char *attrib;
 
-       fprintf(fd, "#ifndef LTT_TRACE_FAST\n");
-       
-       if(event->no_instrument_function) {
+       if(event->no_instrument_function && fct_type == USER_FCT_PROTO) {
                attrib = "__attribute__((no_instrument_function)) ";
        } else {
                attrib = "";
@@ -1663,7 +1702,6 @@ int print_event_logging_function_user_generic(char *basename, facility_t *fac,
                fprintf(fd, "static inline %sint trace_%s(\n",attrib, basename);
        }
        int     has_argument = 0;
-       int has_type_fixed = 0;
 
        if(event->param_buffer) {
                if(has_argument) {
@@ -1671,7 +1709,7 @@ int print_event_logging_function_user_generic(char *basename, facility_t *fac,
                                fprintf(fd, "\n");
                }
                print_tabs(2, fd);
-               fprintf(fd, "void *buffer");
+               fprintf(fd, "char *buffer");
                has_argument = 1;
                fprintf(fd, ",");
                fprintf(fd, "\n");
@@ -1694,7 +1732,25 @@ int print_event_logging_function_user_generic(char *basename, facility_t *fac,
                print_tabs(2, fd);
                fprintf(fd, "void");
        }
-       fprintf(fd,")\n");
+       fprintf(fd,")");
+       return 0;
+}
+
+
+/* print_event_logging_function_user_generic
+ * Print the logging function of an event for userspace tracing. This is the
+ * core of genevent */
+int print_event_logging_function_user_generic(char *basename, facility_t *fac,
+               event_t *event, FILE *fd)
+{
+       int has_type_fixed = 0;
+
+       if(print_event_logging_function_header_user_generic(basename, fac, event, fd, USER_FCT_PROTO)) return 1;
+       fprintf(fd,";\n");
+       fprintf(fd,"\n");
+       fprintf(fd, "#ifndef LTT_TRACE_FAST\n");
+       if(print_event_logging_function_header_user_generic(basename, fac, event, fd, USER_FCT_DECLARATION)) return 1;
+       fprintf(fd,"\n");
        fprintf(fd, 
                        "#ifndef LTT_TRACE\n");
        fprintf(fd, "{\n");
@@ -1705,14 +1761,14 @@ int print_event_logging_function_user_generic(char *basename, facility_t *fac,
        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(1, fd);
-       fprintf(fd, "void *buffer = NULL;\n");
+       fprintf(fd, "char *buffer = NULL;\n");
        print_tabs(1, fd);
        fprintf(fd, "size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */\n");
        print_tabs(1, fd);
@@ -1746,9 +1802,9 @@ int print_event_logging_function_user_generic(char *basename, facility_t *fac,
                        print_tabs(1, fd);
                }
 
-               fprintf(fd, "const void *real_from;\n");
+               fprintf(fd, "const char *real_from;\n");
                print_tabs(1, fd);
-               fprintf(fd, "const void **from = &real_from;\n");
+               fprintf(fd, "const char **from = &real_from;\n");
                print_tabs(1, fd);
        }
 
@@ -1778,10 +1834,10 @@ int print_event_logging_function_user_generic(char *basename, facility_t *fac,
                        case ARRAY:
                        case STRUCT:
                        case STRING:
-                               fprintf(fd, "*from = lttng_param_%s;\n", field->name);
+                               fprintf(fd, "*from = (const char*)lttng_param_%s;\n", field->name);
                                break;
                        default:
-                               fprintf(fd, "*from = &lttng_param_%s;\n", field->name);
+                               fprintf(fd, "*from = (const char*)&lttng_param_%s;\n", field->name);
                                break;
                }
 
@@ -1822,10 +1878,10 @@ int print_event_logging_function_user_generic(char *basename, facility_t *fac,
                        case ARRAY:
                        case STRUCT:
                        case STRING:
-                               fprintf(fd, "*from = lttng_param_%s;\n", field->name);
+                               fprintf(fd, "*from = (const char*)lttng_param_%s;\n", field->name);
                                break;
                        default:
-                               fprintf(fd, "*from = &lttng_param_%s;\n", field->name);
+                               fprintf(fd, "*from = (const char*)&lttng_param_%s;\n", field->name);
                                break;
                }
 
@@ -1838,7 +1894,7 @@ int print_event_logging_function_user_generic(char *basename, facility_t *fac,
                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);
@@ -1854,7 +1910,7 @@ int print_event_logging_function_user_generic(char *basename, facility_t *fac,
 
 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");
@@ -1920,7 +1976,7 @@ int print_event_logging_function_user_fast(char *basename, facility_t *fac,
        print_tabs(1, fd);
        fprintf(fd, "struct ltt_buf *ltt_buf;\n");
        print_tabs(1, fd);
-       fprintf(fd, "void *buffer = NULL;\n");
+       fprintf(fd, "char *buffer = NULL;\n");
        print_tabs(1, fd);
        fprintf(fd, "size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */\n");
        print_tabs(1, fd);
@@ -1954,18 +2010,16 @@ int print_event_logging_function_user_fast(char *basename, facility_t *fac,
                        print_tabs(1, fd);
                }
 
-               fprintf(fd, "const void *real_from;\n");
+               fprintf(fd, "const char *real_from;\n");
                print_tabs(1, fd);
-               fprintf(fd, "const void **from = &real_from;\n");
+               fprintf(fd, "const char **from = &real_from;\n");
                print_tabs(1, fd);
        }
        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);
@@ -2000,10 +2054,10 @@ int print_event_logging_function_user_fast(char *basename, facility_t *fac,
                        case ARRAY:
                        case STRUCT:
                        case STRING:
-                               fprintf(fd, "*from = lttng_param_%s;\n", field->name);
+                               fprintf(fd, "*from = (const char*)lttng_param_%s;\n", field->name);
                                break;
                        default:
-                               fprintf(fd, "*from = &lttng_param_%s;\n", field->name);
+                               fprintf(fd, "*from = (const char*)&lttng_param_%s;\n", field->name);
                                break;
                }
 
@@ -2032,7 +2086,7 @@ int print_event_logging_function_user_fast(char *basename, facility_t *fac,
 
        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);
@@ -2048,12 +2102,12 @@ int print_event_logging_function_user_fast(char *basename, facility_t *fac,
        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");
@@ -2063,15 +2117,12 @@ int print_event_logging_function_user_fast(char *basename, facility_t *fac,
 
        /* 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. */
 
@@ -2087,10 +2138,10 @@ int print_event_logging_function_user_fast(char *basename, facility_t *fac,
                        case ARRAY:
                        case STRUCT:
                        case STRING:
-                               fprintf(fd, "*from = lttng_param_%s;\n", field->name);
+                               fprintf(fd, "*from = (const char*)lttng_param_%s;\n", field->name);
                                break;
                        default:
-                               fprintf(fd, "*from = &lttng_param_%s;\n", field->name);
+                               fprintf(fd, "*from = (const char*)&lttng_param_%s;\n", field->name);
                                break;
                }
 
@@ -2103,7 +2154,7 @@ int print_event_logging_function_user_fast(char *basename, facility_t *fac,
                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);
@@ -2152,14 +2203,14 @@ void print_log_header_head(facility_t *fac, FILE *fd)
 {
        fprintf(fd, "#ifndef _LTT_FACILITY_%s_H_\n", fac->capname);
        fprintf(fd, "#define _LTT_FACILITY_%s_H_\n\n", fac->capname);
-  fprintf(fd, "#include <linux/types.h>\n");
+       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");
 }
 
@@ -2170,14 +2221,18 @@ void print_log_header_head_user(facility_t *fac, FILE *fd)
 {
        fprintf(fd, "#ifndef _LTT_FACILITY_%s_H_\n", fac->capname);
        fprintf(fd, "#define _LTT_FACILITY_%s_H_\n\n", fac->capname);
-  fprintf(fd, "#include <sys/types.h>\n");
+       fprintf(fd, "#include <sys/types.h>\n");
        if(!fac->arch)
-         fprintf(fd, "#include <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 <asm/ltt/ltt-facility-id-%s_%s.h>\n",
                                fac->name,
                                fac->arch);
-  fprintf(fd, "#include <ltt/ltt-usertrace.h>\n");
+       fprintf(fd, "#include <ltt/ltt-usertrace.h>\n");
+       fprintf(fd, "\n");
+       fprintf(fd, "#ifdef __cplusplus\n");
+       fprintf(fd, "extern \"C\" {\n");
+       fprintf(fd, "#endif\n");
        fprintf(fd, "\n");
 }
 
@@ -2193,7 +2248,8 @@ int print_log_header_types(facility_t *fac, FILE *fd)
                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,
@@ -2227,7 +2283,9 @@ int print_log_header_events(facility_t *fac, FILE *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;
                        }
@@ -2261,6 +2319,10 @@ void print_log_header_tail(facility_t *fac, FILE *fd)
 
 void print_log_header_tail_user(facility_t *fac, FILE *fd)
 {
+       fprintf(fd, "#ifdef __cplusplus\n");
+       fprintf(fd, "} /* end of extern \"C\" */\n");
+       fprintf(fd, "#endif\n");
+       fprintf(fd, "\n");
        fprintf(fd, "#endif //_LTT_FACILITY_%s_H_\n",fac->capname);
 }
        
@@ -2475,15 +2537,17 @@ int print_loader_header(facility_t *fac)
   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);
@@ -2493,6 +2557,10 @@ int print_loader_header(facility_t *fac)
   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);
 
@@ -2540,7 +2608,7 @@ int print_loader_header_user(facility_t *fac)
          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);
@@ -2555,6 +2623,8 @@ int print_loader_header_user(facility_t *fac)
   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);
@@ -2615,7 +2685,6 @@ int print_loader_c(facility_t *fac)
   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
@@ -2637,6 +2706,8 @@ int print_loader_c(facility_t *fac)
   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");
@@ -2658,7 +2729,7 @@ int print_loader_c(facility_t *fac)
   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");
@@ -2737,7 +2808,7 @@ int print_loader_c_user(facility_t *fac)
   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");
@@ -2758,7 +2829,7 @@ int print_loader_c_user(facility_t *fac)
   fprintf(fd, "\terr = ltt_register_generic(&LTT_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");
This page took 0.036079 seconds and 4 git commands to generate.