fix usertrace and genevent for printf alignment
[lttv.git] / genevent / genevent.c
index c788d85a92bc8e9298c59f1be82597d05f7a3b71..8f898e7f93df3c0a338d1d12fc508933ab42803d 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)
@@ -224,11 +227,11 @@ int print_arg(type_descriptor_t * td, FILE *fd, unsigned int tabs,
        switch(td->type) {
                case INT_FIXED:
                        fprintf(fd, "%s", intOutputTypes[getSizeindex(td->size)]);
-                       fprintf(fd, "lttng_param_%s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case UINT_FIXED:
                        fprintf(fd, "%s", uintOutputTypes[getSizeindex(td->size)]);
-                       fprintf(fd, "lttng_param_%s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case CHAR:
                        fprintf(fd, "signed char");
@@ -1104,13 +1107,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);
@@ -1284,7 +1287,7 @@ 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);
@@ -1413,9 +1416,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,9 +1452,9 @@ 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");
@@ -1489,10 +1492,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;
                }
 
@@ -1538,8 +1541,6 @@ int print_event_logging_function(char *basename, facility_t *fac,
  
        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,7 +1550,7 @@ 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");
+       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);
@@ -1590,10 +1591,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;
                }
 
@@ -1625,7 +1626,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");
@@ -1642,17 +1643,12 @@ int print_event_logging_function(char *basename, facility_t *fac,
        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 +1659,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 +1666,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 +1689,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 +1718,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 +1759,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 +1791,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 +1835,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;
                }
 
@@ -1920,7 +1933,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,9 +1967,9 @@ 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");
@@ -2000,10 +2013,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;
                }
 
@@ -2087,10 +2100,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;
                }
 
@@ -2152,14 +2165,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 <linux/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 <linux/ltt-core.h>\n");
+       fprintf(fd, "#include <linux/ltt-core.h>\n");
        fprintf(fd, "\n");
 }
 
@@ -2170,14 +2183,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");
 }
 
@@ -2261,6 +2278,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);
 }
        
This page took 0.029608 seconds and 4 git commands to generate.