data); \
}
+/*
+ * __tracepoints_ptrs section is not const (read-only) to let the linker update
+ * the pointer, allowing PIC code.
+ */
#define DEFINE_TRACEPOINT_FN(name, reg, unreg) \
static const char __tpstrtab_##name[] \
__attribute__((section("__tracepoints_strings"))) = #name; \
struct tracepoint __tracepoint_##name \
__attribute__((section("__tracepoints"))) = \
{ __tpstrtab_##name, 0, NULL }; \
- static struct tracepoint * const __tracepoint_ptr_##name \
+ static struct tracepoint * __tracepoint_ptr_##name \
__attribute__((used, section("__tracepoints_ptrs"))) = \
&__tracepoint_##name;
#define TRACEPOINT_LIB \
extern struct tracepoint * const __start___tracepoints_ptrs[] __attribute__((weak, visibility("hidden"))); \
extern struct tracepoint * const __stop___tracepoints_ptrs[] __attribute__((weak, visibility("hidden"))); \
- static struct tracepoint * const __tracepoint_ptr_dummy \
- __attribute__((used, section("__tracepoints_ptrs"))) = NULL; \
+ static struct tracepoint * __tracepoint_ptr_dummy \
+ __attribute__((used, section("__tracepoints_ptrs"))); \
static void __attribute__((constructor)) __tracepoints__init(void) \
{ \
tracepoint_register_lib(__start___tracepoints_ptrs, \
__attribute__((weak, visibility("hidden"))); \
extern struct trace_event * const __stop___trace_events_ptrs[] \
__attribute__((weak, visibility("hidden"))); \
- static struct trace_event * const __event_ptrs_dummy \
- __attribute__((used, section("__trace_events_ptrs"))) = NULL; \
+ static struct trace_event * __event_ptrs_dummy \
+ __attribute__((used, section("__trace_events_ptrs"))); \
static void __attribute__((constructor)) \
__trace_events__init(void) \
{ \