X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=include%2Fust%2Fust_trace.h;h=f2ccbe21e868fbbc579b871f3026f1a6a9283ff9;hb=f37142a4e245fd3d5d0014877c568f626dbfbbde;hp=098c5f8f6f0230e31b28bb157b34e7e0d4ffee68;hpb=22d7294822cce9fdc893b8ab272e322270456ac9;p=ust.git diff --git a/include/ust/ust_trace.h b/include/ust/ust_trace.h index 098c5f8..f2ccbe2 100644 --- a/include/ust/ust_trace.h +++ b/include/ust/ust_trace.h @@ -4,8 +4,8 @@ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * License as published by the Free Software Foundation; + * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -23,6 +23,8 @@ * to a printf */ +#include + /* * Stage 1. Create a struct and a printf calling function * that is connected to the tracepoint at load time. @@ -30,12 +32,12 @@ #undef TRACE_EVENT #define TRACE_EVENT(name, proto, args, tstruct, assign, print) \ DECLARE_TRACE_EVENT_CLASS(name, \ - PARAMS(proto), \ - PARAMS(args), \ - PARAMS(tstruct), \ - PARAMS(assign), \ - PARAMS(print)); \ - DEFINE_TRACE_EVENT(name, name, PARAMS(proto), PARAMS(args)); + TP_PARAMS(proto), \ + TP_PARAMS(args), \ + TP_PARAMS(tstruct), \ + TP_PARAMS(assign), \ + TP_PARAMS(print)); \ + DEFINE_TRACE_EVENT(name, name, TP_PARAMS(proto), TP_PARAMS(args)); #undef __field #define __field(type, item) type item; @@ -58,7 +60,7 @@ struct trace_raw_##name { \ tstruct \ }; \ - static void trace_printf_##name(proto) \ + static void trace_printf_##name(void *dummy, proto) \ { \ struct trace_raw_##name entry_struct, *__entry; \ __entry = &entry_struct; \ @@ -66,10 +68,27 @@ \ printf(print); \ } \ + static inline int register_event_##name(void *data) \ + { \ + return register_tracepoint(name, trace_printf_##name, data); \ + } \ + static inline int unregister_event_##name(void *data) \ + { \ + return unregister_tracepoint(name, trace_printf_##name, data); \ + } \ + struct trace_event __event_##name = { \ + __tpstrtab_##name, \ + register_event_##name, \ + unregister_event_##name \ + }; \ + static struct trace_event * const __event_ptrs_##name \ + __attribute__((used, section("__trace_events_ptrs"))) = \ + &__event_##name; \ + \ static void __attribute__((constructor)) init_##name() \ { \ - printf("connecting tracepoint " #name "\n"); \ - register_trace_##name(trace_printf_##name); \ + void *dummy = NULL; \ + register_tracepoint(name, trace_printf_##name, dummy); \ }