#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;
*
* 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_SYSTEM 7
- * information has system-level scope (set of programs)
- *
- * TRACE_PROGRAM 8
- * information has program-level scope (set of processes)
+ * TRACE_DEBUG_SYSTEM 7
+ * debug information with system-level scope (set of programs)
*
- * TRACE_PROCESS 9
- * information has process-level scope (set of modules)
+ * TRACE_DEBUG_PROGRAM 8
+ * debug information with program-level scope (set of processes)
*
- * TRACE_MODULE 10
- * information has module (executable/library) scope (set of units)
+ * TRACE_DEBUG_PROCESS 9
+ * debug information with process-level scope (set of modules)
*
- * TRACE_UNIT 11
- * information has compilation unit scope (set of functions)
+ * TRACE_DEBUG_MODULE 10
+ * debug information with module (executable/library) scope (set of units)
*
- * TRACE_FUNCTION 12
- * information has function-level scope
+ * TRACE_DEBUG_UNIT 11
+ * debug information with compilation unit scope (set of functions)
*
- * TRACE_DEFAULT 13
- * default trace loglevel (TRACEPOINT_EVENT default)
+ * TRACE_DEBUG_FUNCTION 12
+ * debug information with function-level scope
*
- * TRACE_VERBOSE 14
- * verbose information
+ * TRACE_DEBUG_LINE 13
+ * debug information with line-level scope (TRACEPOINT_EVENT default)
*
- * TRACE_DEBUG 15
+ * TRACE_DEBUG 14
* debug-level message (trace_printf default)
*
* Declare tracepoint loglevels for tracepoints. A TRACEPOINT_EVENT
*/
enum {
- TRACE_EMERG = 0,
- TRACE_ALERT = 1,
- TRACE_CRIT = 2,
- TRACE_ERR = 3,
- TRACE_WARNING = 4,
- TRACE_NOTICE = 5,
- TRACE_INFO = 6,
- TRACE_SYSTEM = 7,
- TRACE_PROGRAM = 8,
- TRACE_PROCESS = 9,
- TRACE_MODULE = 10,
- TRACE_UNIT = 11,
- TRACE_FUNCTION = 12,
- TRACE_DEFAULT = 13,
- TRACE_VERBOSE = 14,
- TRACE_DEBUG = 15,
+ 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)