X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=include%2Flttng%2Ftracepoint.h;h=887c9deea87b4653d944f8b9658b454d380de8bb;hb=6b6eebb622f8040f7f9d97a38dd992308d59ff9e;hp=52513d1278f832a92fcaac8dc615e3e668891c43;hpb=882a56d75d6054e1bf35d1bcddd668be4da4980f;p=lttng-ust.git diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h index 52513d12..887c9dee 100644 --- a/include/lttng/tracepoint.h +++ b/include/lttng/tracepoint.h @@ -152,18 +152,35 @@ extern int __tracepoint_probe_unregister(const char *name, void *func, void *dat #ifdef TRACEPOINT_DEFINE +/* + * When TRACEPOINT_PROBE_DYNAMIC_LINKAGE is defined, we do not emit a + * unresolved symbol that requires the provider to be linked in. When + * TRACEPOINT_PROBE_DYNAMIC_LINKAGE is not defined, we emit an + * unresolved symbol that depends on having the provider linked in, + * otherwise the linker complains. This deals with use of static + * libraries, ensuring that the linker does not remove the provider + * object from the executable. + */ +#ifdef TRACEPOINT_PROBE_DYNAMIC_LINKAGE +#define _TRACEPOINT_UNDEFINED_REF(provider) +#else /* TRACEPOINT_PROBE_DYNAMIC_LINKAGE */ +#define _TRACEPOINT_UNDEFINED_REF(provider) \ + &__tracepoint_provider_##provider, +#endif /* TRACEPOINT_PROBE_DYNAMIC_LINKAGE */ + /* * Note: to allow PIC code, we need to allow the linker to update the pointers * in the __tracepoints_ptrs section. * Therefore, this section is _not_ const (read-only). */ #define _DEFINE_TRACEPOINT(provider, name) \ + extern int __tracepoint_provider_##provider; \ static const char __tp_strtab_##provider##___##name[] \ __attribute__((section("__tracepoints_strings"))) = \ #provider ":" #name; \ struct tracepoint __tracepoint_##provider##___##name \ __attribute__((section("__tracepoints"))) = \ - { __tp_strtab_##provider##___##name, 0, NULL }; \ + { __tp_strtab_##provider##___##name, 0, NULL, _TRACEPOINT_UNDEFINED_REF(provider) }; \ static struct tracepoint * __tracepoint_ptr_##provider##___##name \ __attribute__((used, section("__tracepoints_ptrs"))) = \ &__tracepoint_##provider##___##name; @@ -378,31 +395,31 @@ static void __attribute__((destructor)) __tracepoints__destroy(void) * informational message * * TRACE_SYSTEM 7 - * information has system-level scope + * information has system-level scope (set of programs) * - * TRACE_PROCESS 8 - * information has process-level scope + * TRACE_PROGRAM 8 + * information has program-level scope (set of processes) * - * TRACE_MODULE 9 - * information has module (executable/library) scope + * TRACE_PROCESS 9 + * information has process-level scope (set of modules) * - * TRACE_UNIT 10 - * information has compilation unit scope + * TRACE_MODULE 10 + * information has module (executable/library) scope (set of units) * - * TRACE_CLASS 11 - * information has class-level scope + * TRACE_UNIT 11 + * information has compilation unit scope (set of functions) * - * TRACE_OBJECT 12 - * information has object-level scope - * - * TRACE_FUNCTION 13 + * TRACE_FUNCTION 12 * information has function-level scope * - * TRACE_PRINTF 14 - * tracepoint_printf message + * TRACE_DEFAULT 13 + * default trace loglevel (TRACEPOINT_EVENT default) + * + * TRACE_VERBOSE 14 + * verbose information * * TRACE_DEBUG 15 - * debug-level message + * debug-level message (trace_printf default) * * Declare tracepoint loglevels for tracepoints. A TRACEPOINT_EVENT * should be declared prior to the the TRACEPOINT_LOGLEVEL for a given @@ -425,13 +442,13 @@ enum { TRACE_NOTICE = 5, TRACE_INFO = 6, TRACE_SYSTEM = 7, - TRACE_PROCESS = 8, - TRACE_MODULE = 9, - TRACE_UNIT = 10, - TRACE_CLASS = 11, - TRACE_OBJECT = 12, - TRACE_FUNCTION = 13, - TRACE_PRINTF = 14, + TRACE_PROGRAM = 8, + TRACE_PROCESS = 9, + TRACE_MODULE = 10, + TRACE_UNIT = 11, + TRACE_FUNCTION = 12, + TRACE_DEFAULT = 13, + TRACE_VERBOSE = 14, TRACE_DEBUG = 15, };