X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=include%2Flttng%2Ftracepoint.h;h=dafede03465a2a78b546389c1ec1f982a0668bdd;hb=476037d9a24fdd5e339e3565743aadb9cb8a0a96;hp=9f36d39a65cd676143a773e54edabb43204cf0f3;hpb=75c5ad79cbdc0b7d0579ccd1c97902ded5bdc08a;p=lttng-ust.git diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h index 9f36d39a..dafede03 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; @@ -349,60 +366,57 @@ static void __attribute__((destructor)) __tracepoints__destroy(void) * * Typical use of these loglevels: * - * The loglevels go from 0 to 15. Higher numbers imply the most + * The loglevels go from 0 to 14. Higher numbers imply the most * verbosity (higher event throughput expected. * - * Loglevels 0 through 6, and loglevel 15, match syslog(3) loglevels - * semantic. Loglevels 7 through 14 offer more fine-grained selection of - * traced information. + * Loglevels 0 through 6, and loglevel 14, match syslog(3) loglevels + * semantic. Loglevels 7 through 13 offer more fine-grained selection of + * debug information. * - * TRACE_EMERG 0 + * TRACE_EMERG 0 * system is unusable * - * TRACE_ALERT 1 + * TRACE_ALERT 1 * action must be taken immediately * - * TRACE_CRIT 2 + * TRACE_CRIT 2 * critical conditions * - * TRACE_ERR 3 + * TRACE_ERR 3 * error conditions * - * TRACE_WARNING 4 + * TRACE_WARNING 4 * warning conditions * - * TRACE_NOTICE 5 + * TRACE_NOTICE 5 * normal, but significant, condition * - * TRACE_INFO 6 + * TRACE_INFO 6 * informational message * - * TRACE_DEBUG_SYSTEM 7 - * information has system-level scope + * TRACE_DEBUG_SYSTEM 7 + * debug information with system-level scope (set of programs) * - * TRACE_PROCESS 8 - * information has process-level scope + * TRACE_DEBUG_PROGRAM 8 + * debug information with program-level scope (set of processes) * - * TRACE_MODULE 9 - * information has module (executable/library) scope + * TRACE_DEBUG_PROCESS 9 + * debug information with process-level scope (set of modules) * - * TRACE_UNIT 10 - * information has compilation unit scope + * TRACE_DEBUG_MODULE 10 + * debug information with module (executable/library) scope (set of units) * - * TRACE_CLASS 11 - * information has class-level scope + * TRACE_DEBUG_UNIT 11 + * debug information with compilation unit scope (set of functions) * - * TRACE_OBJECT 12 - * information has object-level scope + * TRACE_DEBUG_FUNCTION 12 + * debug information with function-level scope * - * TRACE_FUNCTION 13 - * information has function-level scope + * TRACE_DEBUG_LINE 13 + * debug information with line-level scope (TRACEPOINT_EVENT default) * - * TRACE_PRINTF 14 - * tracepoint_printf message - * - * TRACE_DEBUG 15 - * debug-level message + * TRACE_DEBUG 14 + * 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 @@ -416,7 +430,24 @@ static void __attribute__((destructor)) __tracepoints__destroy(void) * TRACEPOINT_LOGLEVEL. */ -#define TRACEPOINT_LOGLEVEL_ENUM(...) +enum { + TRACE_EMERG = 0, + TRACE_ALERT = 1, + TRACE_CRIT = 2, + TRACE_ERR = 3, + TRACE_WARNING = 4, + TRACE_NOTICE = 5, + TRACE_INFO = 6, + TRACE_DEBUG_SYSTEM = 7, + TRACE_DEBUG_PROGRAM = 8, + TRACE_DEBUG_PROCESS = 9, + TRACE_DEBUG_MODULE = 10, + TRACE_DEBUG_UNIT = 11, + TRACE_DEBUG_FUNCTION = 12, + TRACE_DEBUG_LINE = 13, + TRACE_DEBUG = 14, +}; + #define TRACEPOINT_LOGLEVEL(provider, name, loglevel) #endif /* #ifndef TRACEPOINT_LOGLEVEL */