X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=include%2Flttng%2Fust-tracepoint-event.h;h=0360bb6c6226ec0e81e780bb0c40b15b0da1fb9d;hb=fb31eb73d8a4a6d9784ed5c335b7fa3b9684108c;hp=0b4e5a262b537ea7de75b4502a83c7480a5c9d27;hpb=3e7622607bd37d4f19b8ef831c27b7b556acf6d5;p=lttng-ust.git diff --git a/include/lttng/ust-tracepoint-event.h b/include/lttng/ust-tracepoint-event.h index 0b4e5a26..0360bb6c 100644 --- a/include/lttng/ust-tracepoint-event.h +++ b/include/lttng/ust-tracepoint-event.h @@ -20,6 +20,7 @@ * SOFTWARE. */ +#include #include #include #include @@ -120,6 +121,30 @@ static const char \ #include TRACEPOINT_INCLUDE +/* + * Stage 0.2 of tracepoint event generation. + * + * Create dummy trace prototypes for each event class, and for each used + * template. This will allow checking whether the prototypes from the + * class and the instance using the class actually match. + */ + +/* Reset all macros within TRACEPOINT_EVENT */ +#include + +#undef TP_ARGS +#define TP_ARGS(...) __VA_ARGS__ + +#undef TRACEPOINT_EVENT_INSTANCE +#define TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \ +void __event_template_proto___##_provider##___##_template(_TP_ARGS_DATA_PROTO(_args)); + +#undef TRACEPOINT_EVENT_CLASS +#define TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \ +void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)); + +#include TRACEPOINT_INCLUDE + /* * Stage 0.9 of tracepoint event generation * @@ -844,14 +869,29 @@ static const char __tp_event_signature___##_provider##___##_name[] = \ /* Reset all macros within TRACEPOINT_EVENT */ #include +/* + * Declare _loglevel___##__provider##___##__name as non-static, with + * hidden visibility for c++ handling of weakref. We do a weakref to the + * symbol in a later stage, which requires that the symbol is not + * mangled. + */ +#ifdef __cplusplus +#define LTTNG_TP_EXTERN_C extern "C" +#else +#define LTTNG_TP_EXTERN_C +#endif + #undef TRACEPOINT_LOGLEVEL #define TRACEPOINT_LOGLEVEL(__provider, __name, __loglevel) \ static const int _loglevel_value___##__provider##___##__name = __loglevel; \ -static const int *_loglevel___##__provider##___##__name = \ +LTTNG_TP_EXTERN_C const int *_loglevel___##__provider##___##__name \ + __attribute__((visibility("hidden"))) = \ &_loglevel_value___##__provider##___##__name; #include TRACEPOINT_INCLUDE +#undef LTTNG_TP_EXTERN_C + /* * Stage 6.1 of tracepoint event generation. * @@ -861,12 +901,27 @@ static const int *_loglevel___##__provider##___##__name = \ /* Reset all macros within TRACEPOINT_EVENT */ #include +/* + * Declare _model_emf_uri___##__provider##___##__name as non-static, + * with hidden visibility for c++ handling of weakref. We do a weakref + * to the symbol in a later stage, which requires that the symbol is not + * mangled. + */ +#ifdef __cplusplus +#define LTTNG_TP_EXTERN_C extern "C" +#else +#define LTTNG_TP_EXTERN_C +#endif + #undef TRACEPOINT_MODEL_EMF_URI #define TRACEPOINT_MODEL_EMF_URI(__provider, __name, __uri) \ -static const char *_model_emf_uri___##__provider##___##__name = __uri; +LTTNG_TP_EXTERN_C const char *_model_emf_uri___##__provider##___##__name \ + __attribute__((visibility("hidden"))) = __uri; \ #include TRACEPOINT_INCLUDE +#undef LTTNG_TP_EXTERN_C + /* * Stage 7.1 of tracepoint event generation. * @@ -977,7 +1032,7 @@ _TP_COMBINE_TOKENS(__lttng_events_init__, TRACEPOINT_PROVIDER)(void) _TP_COMBINE_TOKENS(__tracepoint_provider_check_, TRACEPOINT_PROVIDER)(); ret = lttng_probe_register(&_TP_COMBINE_TOKENS(__probe_desc___, TRACEPOINT_PROVIDER)); if (ret) { - fprintf(stderr, "LTTng-UST: Error (%d) while registering tracepoint probe. Duplicate registration of tracepoint probes having the same name is not allowed.\n", ret); + fprintf(stderr, "LTTng-UST: Error (%d) while registering tracepoint probe.\n", ret); abort(); } }