X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt-usertrace%2Fltt%2Fltt-facility-user_generic.h;h=1bf5fac138bf4217229941a9fa5b627fc41e2890;hb=cc00914443891e8a5a3de946baeea24e724a818e;hp=925db27e5698df6462f444551eb569dbd421009c;hpb=d86395c3cc6f958bcb2aca5063e83e2fe4194f6a;p=lttv.git diff --git a/ltt-usertrace/ltt/ltt-facility-user_generic.h b/ltt-usertrace/ltt/ltt-facility-user_generic.h index 925db27e..1bf5fac1 100644 --- a/ltt-usertrace/ltt/ltt-facility-user_generic.h +++ b/ltt-usertrace/ltt/ltt-facility-user_generic.h @@ -5,14 +5,18 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + /* Named types */ /* Event string structures */ static inline void lttng_write_string_user_generic_string_data( - void *buffer, + char *buffer, size_t *to_base, size_t *to, - const void **from, + const char **from, size_t *len, const char * obj) { @@ -20,8 +24,8 @@ static inline void lttng_write_string_user_generic_string_data( size_t align; /* Flush pending memcpy */ - if(*len != 0) { - if(buffer != NULL) + if (*len != 0) { + if (buffer != NULL) memcpy(buffer+*to_base+*to, *from, *len); } *to += *len; @@ -29,7 +33,7 @@ static inline void lttng_write_string_user_generic_string_data( align = sizeof(char); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -38,7 +42,7 @@ static inline void lttng_write_string_user_generic_string_data( /* Contains variable sized fields : must explode the structure */ size = strlen(obj) + 1; /* Include final NULL char. */ - if(buffer != NULL) + if (buffer != NULL) memcpy(buffer+*to_base+*to, obj, size); *to += size; @@ -53,6 +57,9 @@ static inline void lttng_write_string_user_generic_string_data( /* Event string logging function */ +static inline int trace_user_generic_string( + const char * lttng_param_data); + #ifndef LTT_TRACE_FAST static inline int trace_user_generic_string( const char * lttng_param_data) @@ -62,7 +69,7 @@ static inline int trace_user_generic_string( #else { int ret = 0; - void *buffer = NULL; + char *buffer = NULL; size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */ size_t *to_base = &real_to_base; size_t real_to = 0; @@ -71,14 +78,14 @@ static inline int trace_user_generic_string( size_t *len = &real_len; size_t reserve_size; size_t slot_size; - const void *real_from; - const void **from = &real_from; + const char *real_from; + const char **from = &real_from; /* For each field, calculate the field size. */ /* size = *to_base + *to + *len */ /* Assume that the padding for alignment starts at a * sizeof(void *) address. */ - *from = lttng_param_data; + *from = (const char*)lttng_param_data; lttng_write_string_user_generic_string_data(buffer, to_base, to, from, len, lttng_param_data); reserve_size = *to_base + *to + *len; @@ -88,17 +95,17 @@ static inline int trace_user_generic_string( *to_base = *to = *len = 0; - *from = lttng_param_data; + *from = (const char*)lttng_param_data; lttng_write_string_user_generic_string_data(buffer, to_base, to, from, len, lttng_param_data); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; } - ret = ltt_trace_generic(ltt_facility_user_generic_F583779E, event_user_generic_string, buffer, reserve_size, LTT_BLOCKING); + ret = ltt_trace_generic(ltt_facility_user_generic_B1865E44, event_user_generic_string, buffer, reserve_size, LTT_BLOCKING, 0); } return ret; @@ -118,7 +125,7 @@ static inline int trace_user_generic_string( unsigned int index; struct ltt_trace_info *trace = thread_trace_info; struct ltt_buf *ltt_buf; - void *buffer = NULL; + char *buffer = NULL; size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */ size_t *to_base = &real_to_base; size_t real_to = 0; @@ -127,12 +134,10 @@ static inline int trace_user_generic_string( size_t *len = &real_len; size_t reserve_size; size_t slot_size; - const void *real_from; - const void **from = &real_from; + const char *real_from; + const char **from = &real_from; uint64_t tsc; - size_t before_hdr_pad, after_hdr_pad, header_size; - - if(!trace) { + if (!trace) { ltt_thread_init(); trace = thread_trace_info; } @@ -143,34 +148,32 @@ static inline int trace_user_generic_string( /* Assume that the padding for alignment starts at a * sizeof(void *) address. */ - *from = lttng_param_data; + *from = (const char*)lttng_param_data; lttng_write_string_user_generic_string_data(buffer, to_base, to, from, len, lttng_param_data); reserve_size = *to_base + *to + *len; trace->nesting++; - index = ltt_get_index_from_facility(ltt_facility_user_generic_F583779E, + index = ltt_get_index_from_facility(ltt_facility_user_generic_B1865E44, event_user_generic_string); { ltt_buf = ltt_get_channel_from_index(trace, index); slot_size = 0; buffer = ltt_reserve_slot(trace, ltt_buf, - reserve_size, &slot_size, &tsc, - &before_hdr_pad, &after_hdr_pad, &header_size); - if(!buffer) goto end; /* buffer full */ + reserve_size, &slot_size, &tsc); + if (!buffer) + goto end; /* buffer full */ *to_base = *to = *len = 0; - ltt_write_event_header(trace, ltt_buf, buffer, - ltt_facility_user_generic_F583779E, event_user_generic_string, - reserve_size, before_hdr_pad, tsc); - *to_base += before_hdr_pad + after_hdr_pad + header_size; - - *from = lttng_param_data; + buffer = ltt_write_event_header(trace, ltt_buf, buffer, + ltt_facility_user_generic_B1865E44, event_user_generic_string, + reserve_size, tsc); + *from = (const char*)lttng_param_data; lttng_write_string_user_generic_string_data(buffer, to_base, to, from, len, lttng_param_data); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; @@ -188,10 +191,10 @@ end: /* Event string_pointer structures */ static inline void lttng_write_string_user_generic_string_pointer_string( - void *buffer, + char *buffer, size_t *to_base, size_t *to, - const void **from, + const char **from, size_t *len, const char * obj) { @@ -199,8 +202,8 @@ static inline void lttng_write_string_user_generic_string_pointer_string( size_t align; /* Flush pending memcpy */ - if(*len != 0) { - if(buffer != NULL) + if (*len != 0) { + if (buffer != NULL) memcpy(buffer+*to_base+*to, *from, *len); } *to += *len; @@ -208,7 +211,7 @@ static inline void lttng_write_string_user_generic_string_pointer_string( align = sizeof(char); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -217,7 +220,7 @@ static inline void lttng_write_string_user_generic_string_pointer_string( /* Contains variable sized fields : must explode the structure */ size = strlen(obj) + 1; /* Include final NULL char. */ - if(buffer != NULL) + if (buffer != NULL) memcpy(buffer+*to_base+*to, obj, size); *to += size; @@ -232,6 +235,10 @@ static inline void lttng_write_string_user_generic_string_pointer_string( /* Event string_pointer logging function */ +static inline int trace_user_generic_string_pointer( + const char * lttng_param_string, + const void * lttng_param_pointer); + #ifndef LTT_TRACE_FAST static inline int trace_user_generic_string_pointer( const char * lttng_param_string, @@ -242,7 +249,7 @@ static inline int trace_user_generic_string_pointer( #else { int ret = 0; - void *buffer = NULL; + char *buffer = NULL; size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */ size_t *to_base = &real_to_base; size_t real_to = 0; @@ -252,20 +259,20 @@ static inline int trace_user_generic_string_pointer( size_t reserve_size; size_t slot_size; size_t align; - const void *real_from; - const void **from = &real_from; + const char *real_from; + const char **from = &real_from; /* For each field, calculate the field size. */ /* size = *to_base + *to + *len */ /* Assume that the padding for alignment starts at a * sizeof(void *) address. */ - *from = lttng_param_string; + *from = (const char*)lttng_param_string; lttng_write_string_user_generic_string_pointer_string(buffer, to_base, to, from, len, lttng_param_string); - *from = <tng_param_pointer; + *from = (const char*)<tng_param_pointer; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -280,20 +287,20 @@ static inline int trace_user_generic_string_pointer( *to_base = *to = *len = 0; - *from = lttng_param_string; + *from = (const char*)lttng_param_string; lttng_write_string_user_generic_string_pointer_string(buffer, to_base, to, from, len, lttng_param_string); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; } - *from = <tng_param_pointer; + *from = (const char*)<tng_param_pointer; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -302,13 +309,13 @@ static inline int trace_user_generic_string_pointer( *len += sizeof(const void *); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; } - ret = ltt_trace_generic(ltt_facility_user_generic_F583779E, event_user_generic_string_pointer, buffer, reserve_size, LTT_BLOCKING); + ret = ltt_trace_generic(ltt_facility_user_generic_B1865E44, event_user_generic_string_pointer, buffer, reserve_size, LTT_BLOCKING, 0); } return ret; @@ -329,7 +336,7 @@ static inline int trace_user_generic_string_pointer( unsigned int index; struct ltt_trace_info *trace = thread_trace_info; struct ltt_buf *ltt_buf; - void *buffer = NULL; + char *buffer = NULL; size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */ size_t *to_base = &real_to_base; size_t real_to = 0; @@ -339,12 +346,10 @@ static inline int trace_user_generic_string_pointer( size_t reserve_size; size_t slot_size; size_t align; - const void *real_from; - const void **from = &real_from; + const char *real_from; + const char **from = &real_from; uint64_t tsc; - size_t before_hdr_pad, after_hdr_pad, header_size; - - if(!trace) { + if (!trace) { ltt_thread_init(); trace = thread_trace_info; } @@ -355,13 +360,13 @@ static inline int trace_user_generic_string_pointer( /* Assume that the padding for alignment starts at a * sizeof(void *) address. */ - *from = lttng_param_string; + *from = (const char*)lttng_param_string; lttng_write_string_user_generic_string_pointer_string(buffer, to_base, to, from, len, lttng_param_string); - *from = <tng_param_pointer; + *from = (const char*)<tng_param_pointer; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -371,38 +376,36 @@ static inline int trace_user_generic_string_pointer( reserve_size = *to_base + *to + *len; trace->nesting++; - index = ltt_get_index_from_facility(ltt_facility_user_generic_F583779E, + index = ltt_get_index_from_facility(ltt_facility_user_generic_B1865E44, event_user_generic_string_pointer); { ltt_buf = ltt_get_channel_from_index(trace, index); slot_size = 0; buffer = ltt_reserve_slot(trace, ltt_buf, - reserve_size, &slot_size, &tsc, - &before_hdr_pad, &after_hdr_pad, &header_size); - if(!buffer) goto end; /* buffer full */ + reserve_size, &slot_size, &tsc); + if (!buffer) + goto end; /* buffer full */ *to_base = *to = *len = 0; - ltt_write_event_header(trace, ltt_buf, buffer, - ltt_facility_user_generic_F583779E, event_user_generic_string_pointer, - reserve_size, before_hdr_pad, tsc); - *to_base += before_hdr_pad + after_hdr_pad + header_size; - - *from = lttng_param_string; + buffer = ltt_write_event_header(trace, ltt_buf, buffer, + ltt_facility_user_generic_B1865E44, event_user_generic_string_pointer, + reserve_size, tsc); + *from = (const char*)lttng_param_string; lttng_write_string_user_generic_string_pointer_string(buffer, to_base, to, from, len, lttng_param_string); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; } - *from = <tng_param_pointer; + *from = (const char*)<tng_param_pointer; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -411,7 +414,7 @@ static inline int trace_user_generic_string_pointer( *len += sizeof(const void *); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; @@ -429,10 +432,10 @@ end: /* Event slow_printf structures */ static inline void lttng_write_string_user_generic_slow_printf_string( - void *buffer, + char *buffer, size_t *to_base, size_t *to, - const void **from, + const char **from, size_t *len, const char * obj) { @@ -440,8 +443,8 @@ static inline void lttng_write_string_user_generic_slow_printf_string( size_t align; /* Flush pending memcpy */ - if(*len != 0) { - if(buffer != NULL) + if (*len != 0) { + if (buffer != NULL) memcpy(buffer+*to_base+*to, *from, *len); } *to += *len; @@ -449,7 +452,7 @@ static inline void lttng_write_string_user_generic_slow_printf_string( align = sizeof(char); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -458,7 +461,7 @@ static inline void lttng_write_string_user_generic_slow_printf_string( /* Contains variable sized fields : must explode the structure */ size = strlen(obj) + 1; /* Include final NULL char. */ - if(buffer != NULL) + if (buffer != NULL) memcpy(buffer+*to_base+*to, obj, size); *to += size; @@ -473,9 +476,13 @@ static inline void lttng_write_string_user_generic_slow_printf_string( /* Event slow_printf logging function */ +static inline int trace_user_generic_slow_printf_param_buffer( + char *buffer, + size_t reserve_size); + #ifndef LTT_TRACE_FAST static inline int trace_user_generic_slow_printf_param_buffer( - void *buffer, + char *buffer, size_t reserve_size) #ifndef LTT_TRACE { @@ -483,9 +490,8 @@ static inline int trace_user_generic_slow_printf_param_buffer( #else { int ret = 0; - reserve_size += ltt_align(reserve_size, sizeof(void *)); { - ret = ltt_trace_generic(ltt_facility_user_generic_F583779E, event_user_generic_slow_printf, buffer, reserve_size, LTT_BLOCKING); + ret = ltt_trace_generic(ltt_facility_user_generic_B1865E44, event_user_generic_slow_printf, buffer, reserve_size, LTT_BLOCKING, 0); } return ret; @@ -505,7 +511,7 @@ static inline int trace_user_generic_slow_printf( unsigned int index; struct ltt_trace_info *trace = thread_trace_info; struct ltt_buf *ltt_buf; - void *buffer = NULL; + char *buffer = NULL; size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */ size_t *to_base = &real_to_base; size_t real_to = 0; @@ -514,12 +520,10 @@ static inline int trace_user_generic_slow_printf( size_t *len = &real_len; size_t reserve_size; size_t slot_size; - const void *real_from; - const void **from = &real_from; + const char *real_from; + const char **from = &real_from; uint64_t tsc; - size_t before_hdr_pad, after_hdr_pad, header_size; - - if(!trace) { + if (!trace) { ltt_thread_init(); trace = thread_trace_info; } @@ -530,34 +534,32 @@ static inline int trace_user_generic_slow_printf( /* Assume that the padding for alignment starts at a * sizeof(void *) address. */ - *from = lttng_param_string; + *from = (const char*)lttng_param_string; lttng_write_string_user_generic_slow_printf_string(buffer, to_base, to, from, len, lttng_param_string); reserve_size = *to_base + *to + *len; trace->nesting++; - index = ltt_get_index_from_facility(ltt_facility_user_generic_F583779E, + index = ltt_get_index_from_facility(ltt_facility_user_generic_B1865E44, event_user_generic_slow_printf); { ltt_buf = ltt_get_channel_from_index(trace, index); slot_size = 0; buffer = ltt_reserve_slot(trace, ltt_buf, - reserve_size, &slot_size, &tsc, - &before_hdr_pad, &after_hdr_pad, &header_size); - if(!buffer) goto end; /* buffer full */ + reserve_size, &slot_size, &tsc); + if (!buffer) + goto end; /* buffer full */ *to_base = *to = *len = 0; - ltt_write_event_header(trace, ltt_buf, buffer, - ltt_facility_user_generic_F583779E, event_user_generic_slow_printf, - reserve_size, before_hdr_pad, tsc); - *to_base += before_hdr_pad + after_hdr_pad + header_size; - - *from = lttng_param_string; + buffer = ltt_write_event_header(trace, ltt_buf, buffer, + ltt_facility_user_generic_B1865E44, event_user_generic_slow_printf, + reserve_size, tsc); + *from = (const char*)lttng_param_string; lttng_write_string_user_generic_slow_printf_string(buffer, to_base, to, from, len, lttng_param_string); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; @@ -576,8 +578,12 @@ end: /* Event function_entry structures */ /* Event function_entry logging function */ -#ifndef LTT_TRACE_FAST static inline __attribute__((no_instrument_function)) int trace_user_generic_function_entry( + const void * lttng_param_this_fn, + const void * lttng_param_call_site); + +#ifndef LTT_TRACE_FAST +static inline int trace_user_generic_function_entry( const void * lttng_param_this_fn, const void * lttng_param_call_site) #ifndef LTT_TRACE @@ -586,7 +592,7 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun #else { int ret = 0; - void *buffer = NULL; + char *buffer = NULL; size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */ size_t *to_base = &real_to_base; size_t real_to = 0; @@ -596,17 +602,17 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun size_t reserve_size; size_t slot_size; size_t align; - const void *real_from; - const void **from = &real_from; + const char *real_from; + const char **from = &real_from; /* For each field, calculate the field size. */ /* size = *to_base + *to + *len */ /* Assume that the padding for alignment starts at a * sizeof(void *) address. */ - *from = <tng_param_this_fn; + *from = (const char*)<tng_param_this_fn; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -614,10 +620,10 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *len += sizeof(const void *); - *from = <tng_param_call_site; + *from = (const char*)<tng_param_call_site; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -632,10 +638,10 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *to_base = *to = *len = 0; - *from = <tng_param_this_fn; + *from = (const char*)<tng_param_this_fn; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -644,16 +650,16 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *len += sizeof(const void *); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; } - *from = <tng_param_call_site; + *from = (const char*)<tng_param_call_site; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -662,13 +668,13 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *len += sizeof(const void *); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; } - ret = ltt_trace_generic(ltt_facility_user_generic_F583779E, event_user_generic_function_entry, buffer, reserve_size, LTT_BLOCKING); + ret = ltt_trace_generic(ltt_facility_user_generic_B1865E44, event_user_generic_function_entry, buffer, reserve_size, LTT_BLOCKING, 0); } return ret; @@ -689,7 +695,7 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun unsigned int index; struct ltt_trace_info *trace = thread_trace_info; struct ltt_buf *ltt_buf; - void *buffer = NULL; + char *buffer = NULL; size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */ size_t *to_base = &real_to_base; size_t real_to = 0; @@ -699,12 +705,10 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun size_t reserve_size; size_t slot_size; size_t align; - const void *real_from; - const void **from = &real_from; + const char *real_from; + const char **from = &real_from; uint64_t tsc; - size_t before_hdr_pad, after_hdr_pad, header_size; - - if(!trace) { + if (!trace) { ltt_thread_init(); trace = thread_trace_info; } @@ -715,10 +719,10 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun /* Assume that the padding for alignment starts at a * sizeof(void *) address. */ - *from = <tng_param_this_fn; + *from = (const char*)<tng_param_this_fn; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -726,10 +730,10 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *len += sizeof(const void *); - *from = <tng_param_call_site; + *from = (const char*)<tng_param_call_site; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -739,28 +743,26 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun reserve_size = *to_base + *to + *len; trace->nesting++; - index = ltt_get_index_from_facility(ltt_facility_user_generic_F583779E, + index = ltt_get_index_from_facility(ltt_facility_user_generic_B1865E44, event_user_generic_function_entry); { ltt_buf = ltt_get_channel_from_index(trace, index); slot_size = 0; buffer = ltt_reserve_slot(trace, ltt_buf, - reserve_size, &slot_size, &tsc, - &before_hdr_pad, &after_hdr_pad, &header_size); - if(!buffer) goto end; /* buffer full */ + reserve_size, &slot_size, &tsc); + if (!buffer) + goto end; /* buffer full */ *to_base = *to = *len = 0; - ltt_write_event_header(trace, ltt_buf, buffer, - ltt_facility_user_generic_F583779E, event_user_generic_function_entry, - reserve_size, before_hdr_pad, tsc); - *to_base += before_hdr_pad + after_hdr_pad + header_size; - - *from = <tng_param_this_fn; + buffer = ltt_write_event_header(trace, ltt_buf, buffer, + ltt_facility_user_generic_B1865E44, event_user_generic_function_entry, + reserve_size, tsc); + *from = (const char*)<tng_param_this_fn; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -769,16 +771,16 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *len += sizeof(const void *); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; } - *from = <tng_param_call_site; + *from = (const char*)<tng_param_call_site; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -787,7 +789,7 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *len += sizeof(const void *); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; @@ -806,8 +808,12 @@ end: /* Event function_exit structures */ /* Event function_exit logging function */ -#ifndef LTT_TRACE_FAST static inline __attribute__((no_instrument_function)) int trace_user_generic_function_exit( + const void * lttng_param_this_fn, + const void * lttng_param_call_site); + +#ifndef LTT_TRACE_FAST +static inline int trace_user_generic_function_exit( const void * lttng_param_this_fn, const void * lttng_param_call_site) #ifndef LTT_TRACE @@ -816,7 +822,7 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun #else { int ret = 0; - void *buffer = NULL; + char *buffer = NULL; size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */ size_t *to_base = &real_to_base; size_t real_to = 0; @@ -826,17 +832,17 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun size_t reserve_size; size_t slot_size; size_t align; - const void *real_from; - const void **from = &real_from; + const char *real_from; + const char **from = &real_from; /* For each field, calculate the field size. */ /* size = *to_base + *to + *len */ /* Assume that the padding for alignment starts at a * sizeof(void *) address. */ - *from = <tng_param_this_fn; + *from = (const char*)<tng_param_this_fn; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -844,10 +850,10 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *len += sizeof(const void *); - *from = <tng_param_call_site; + *from = (const char*)<tng_param_call_site; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -862,10 +868,10 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *to_base = *to = *len = 0; - *from = <tng_param_this_fn; + *from = (const char*)<tng_param_this_fn; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -874,16 +880,16 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *len += sizeof(const void *); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; } - *from = <tng_param_call_site; + *from = (const char*)<tng_param_call_site; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -892,13 +898,13 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *len += sizeof(const void *); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; } - ret = ltt_trace_generic(ltt_facility_user_generic_F583779E, event_user_generic_function_exit, buffer, reserve_size, LTT_BLOCKING); + ret = ltt_trace_generic(ltt_facility_user_generic_B1865E44, event_user_generic_function_exit, buffer, reserve_size, LTT_BLOCKING, 0); } return ret; @@ -919,7 +925,7 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun unsigned int index; struct ltt_trace_info *trace = thread_trace_info; struct ltt_buf *ltt_buf; - void *buffer = NULL; + char *buffer = NULL; size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */ size_t *to_base = &real_to_base; size_t real_to = 0; @@ -929,12 +935,10 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun size_t reserve_size; size_t slot_size; size_t align; - const void *real_from; - const void **from = &real_from; + const char *real_from; + const char **from = &real_from; uint64_t tsc; - size_t before_hdr_pad, after_hdr_pad, header_size; - - if(!trace) { + if (!trace) { ltt_thread_init(); trace = thread_trace_info; } @@ -945,10 +949,10 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun /* Assume that the padding for alignment starts at a * sizeof(void *) address. */ - *from = <tng_param_this_fn; + *from = (const char*)<tng_param_this_fn; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -956,10 +960,10 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *len += sizeof(const void *); - *from = <tng_param_call_site; + *from = (const char*)<tng_param_call_site; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -969,28 +973,26 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun reserve_size = *to_base + *to + *len; trace->nesting++; - index = ltt_get_index_from_facility(ltt_facility_user_generic_F583779E, + index = ltt_get_index_from_facility(ltt_facility_user_generic_B1865E44, event_user_generic_function_exit); { ltt_buf = ltt_get_channel_from_index(trace, index); slot_size = 0; buffer = ltt_reserve_slot(trace, ltt_buf, - reserve_size, &slot_size, &tsc, - &before_hdr_pad, &after_hdr_pad, &header_size); - if(!buffer) goto end; /* buffer full */ + reserve_size, &slot_size, &tsc); + if (!buffer) + goto end; /* buffer full */ *to_base = *to = *len = 0; - ltt_write_event_header(trace, ltt_buf, buffer, - ltt_facility_user_generic_F583779E, event_user_generic_function_exit, - reserve_size, before_hdr_pad, tsc); - *to_base += before_hdr_pad + after_hdr_pad + header_size; - - *from = <tng_param_this_fn; + buffer = ltt_write_event_header(trace, ltt_buf, buffer, + ltt_facility_user_generic_B1865E44, event_user_generic_function_exit, + reserve_size, tsc); + *from = (const char*)<tng_param_this_fn; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -999,16 +1001,16 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *len += sizeof(const void *); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; } - *from = <tng_param_call_site; + *from = (const char*)<tng_param_call_site; align = sizeof(const void *); - if(*len == 0) { + if (*len == 0) { *to += ltt_align(*to, align); /* align output */ } else { *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ @@ -1017,7 +1019,185 @@ static inline __attribute__((no_instrument_function)) int trace_user_generic_fun *len += sizeof(const void *); /* Flush pending memcpy */ - if(*len != 0) { + if (*len != 0) { + memcpy(buffer+*to_base+*to, *from, *len); + *to += *len; + *len = 0; + } + + ltt_commit_slot(ltt_buf, buffer, slot_size); + +} + +end: + trace->nesting--; +} +#endif //LTT_TRACE +#endif //LTT_TRACE_FAST + +/* Event thread_brand structures */ +static inline void lttng_write_string_user_generic_thread_brand_name( + char *buffer, + size_t *to_base, + size_t *to, + const char **from, + size_t *len, + const char * obj) +{ + size_t size; + size_t align; + + /* Flush pending memcpy */ + if (*len != 0) { + if (buffer != NULL) + memcpy(buffer+*to_base+*to, *from, *len); + } + *to += *len; + *len = 0; + + align = sizeof(char); + + if (*len == 0) { + *to += ltt_align(*to, align); /* align output */ + } else { + *len += ltt_align(*to+*len, align); /* alignment, ok to do a memcpy of it */ + } + + /* Contains variable sized fields : must explode the structure */ + + size = strlen(obj) + 1; /* Include final NULL char. */ + if (buffer != NULL) + memcpy(buffer+*to_base+*to, obj, size); + *to += size; + + /* Realign the *to_base on arch size, set *to to 0 */ + *to += ltt_align(*to, sizeof(void *)); + *to_base = *to_base+*to; + *to = 0; + + /* Put source *from just after the C string */ + *from += size; +} + + +/* Event thread_brand logging function */ +static inline int trace_user_generic_thread_brand( + const char * lttng_param_name); + +#ifndef LTT_TRACE_FAST +static inline int trace_user_generic_thread_brand( + const char * lttng_param_name) +#ifndef LTT_TRACE +{ +} +#else +{ + int ret = 0; + char *buffer = NULL; + size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */ + size_t *to_base = &real_to_base; + size_t real_to = 0; + size_t *to = &real_to; + size_t real_len = 0; + size_t *len = &real_len; + size_t reserve_size; + size_t slot_size; + const char *real_from; + const char **from = &real_from; + /* For each field, calculate the field size. */ + /* size = *to_base + *to + *len */ + /* Assume that the padding for alignment starts at a + * sizeof(void *) address. */ + + *from = (const char*)lttng_param_name; + lttng_write_string_user_generic_thread_brand_name(buffer, to_base, to, from, len, lttng_param_name); + + reserve_size = *to_base + *to + *len; + { + char stack_buffer[reserve_size]; + buffer = stack_buffer; + + *to_base = *to = *len = 0; + + *from = (const char*)lttng_param_name; + lttng_write_string_user_generic_thread_brand_name(buffer, to_base, to, from, len, lttng_param_name); + + /* Flush pending memcpy */ + if (*len != 0) { + memcpy(buffer+*to_base+*to, *from, *len); + *to += *len; + *len = 0; + } + + ret = ltt_trace_generic(ltt_facility_user_generic_B1865E44, event_user_generic_thread_brand, buffer, reserve_size, LTT_BLOCKING, 1); + } + + return ret; + +} +#endif //LTT_TRACE +#endif //!LTT_TRACE_FAST + +#ifdef LTT_TRACE_FAST +static inline int trace_user_generic_thread_brand( + const char * lttng_param_name) +#ifndef LTT_TRACE +{ +} +#else +{ + unsigned int index; + struct ltt_trace_info *trace = thread_trace_info; + struct ltt_buf *ltt_buf; + char *buffer = NULL; + size_t real_to_base = 0; /* The buffer is allocated on arch_size alignment */ + size_t *to_base = &real_to_base; + size_t real_to = 0; + size_t *to = &real_to; + size_t real_len = 0; + size_t *len = &real_len; + size_t reserve_size; + size_t slot_size; + const char *real_from; + const char **from = &real_from; + uint64_t tsc; + if (!trace) { + ltt_thread_init(); + trace = thread_trace_info; + } + + + /* For each field, calculate the field size. */ + /* size = *to_base + *to + *len */ + /* Assume that the padding for alignment starts at a + * sizeof(void *) address. */ + + *from = (const char*)lttng_param_name; + lttng_write_string_user_generic_thread_brand_name(buffer, to_base, to, from, len, lttng_param_name); + + reserve_size = *to_base + *to + *len; + trace->nesting++; + index = ltt_get_index_from_facility(ltt_facility_user_generic_B1865E44, + event_user_generic_thread_brand); + + { + ltt_buf = ltt_get_channel_from_index(trace, index); + slot_size = 0; + buffer = ltt_reserve_slot(trace, ltt_buf, + reserve_size, &slot_size, &tsc); + if (!buffer) + goto end; /* buffer full */ + + *to_base = *to = *len = 0; + + buffer = ltt_write_event_header(trace, ltt_buf, buffer, + ltt_facility_user_generic_B1865E44, event_user_generic_thread_brand, + reserve_size, tsc); + *from = (const char*)lttng_param_name; + lttng_write_string_user_generic_thread_brand_name(buffer, to_base, to, from, len, lttng_param_name); + + /* Flush pending memcpy */ + if (*len != 0) { memcpy(buffer+*to_base+*to, *from, *len); *to += *len; *len = 0; @@ -1033,4 +1213,8 @@ end: #endif //LTT_TRACE #endif //LTT_TRACE_FAST +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + #endif //_LTT_FACILITY_USER_GENERIC_H_