X-Git-Url: https://git.liburcu.org/?p=ust.git;a=blobdiff_plain;f=include%2Fust%2Ftracepoint.h;h=b11d69d7c039ee7454c0151e39b31f4ac5faa61c;hp=b9557d5703e91ff4082e241e567edc0d8e521d05;hb=332b3a18ea9e3be7ec5d65a4d75c5cf2b6a59525;hpb=1c330d13895139a60bb47a0efba1f50af080cf59 diff --git a/include/ust/tracepoint.h b/include/ust/tracepoint.h index b9557d5..b11d69d 100644 --- a/include/ust/tracepoint.h +++ b/include/ust/tracepoint.h @@ -116,13 +116,17 @@ struct tracepoint { 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; @@ -231,8 +235,8 @@ extern int tracepoint_unregister_lib(struct tracepoint * const *tracepoints_star #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, \ @@ -388,8 +392,8 @@ extern int trace_event_unregister_lib(struct trace_event * const *start_trace_ev __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) \ { \