X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=include%2Fust%2Ftracepoint.h;fp=include%2Fust%2Ftracepoint.h;h=05e5c11dd902c0c01ae2713b3d1d44952fd9dcc5;hb=f218ff2821b494cf7b0fc3978e944070ad418772;hp=1d286a0ff995432bb16e047fb78fc09d6ab5a05b;hpb=980eae09eeb6df4964886b27315ac5a130cf86e4;p=ust.git diff --git a/include/ust/tracepoint.h b/include/ust/tracepoint.h index 1d286a0..05e5c11 100644 --- a/include/ust/tracepoint.h +++ b/include/ust/tracepoint.h @@ -42,12 +42,7 @@ struct tracepoint { const char *name; /* Tracepoint name */ DEFINE_IMV(char, state); /* State. */ struct probe *probes; -} __attribute__((aligned(32))); /* - * Aligned on 32 bytes because it is - * globally visible and gcc happily - * align these on the structure size. - * Keep in sync with vmlinux.lds.h. - */ +}; #define PARAMS(args...) args @@ -128,18 +123,21 @@ struct tracepoint { data); \ } -#define DEFINE_TRACE_FN(name, reg, unreg) \ +#define DEFINE_TRACE_FN(name, reg, unreg) \ static const char __tpstrtab_##name[] \ __attribute__((section("__tracepoints_strings"))) = #name; \ struct tracepoint __tracepoint_##name \ - __attribute__((section("__tracepoints"), aligned(32))) = \ - { __tpstrtab_##name, 0, NULL } + __attribute__((section("__tracepoints"))) = \ + { __tpstrtab_##name, 0, NULL }; \ + static struct tracepoint * const __tracepoint_ptr_##name \ + __attribute__((used, section("__tracepoints_ptrs"))) = \ + &__tracepoint_##name; #define DEFINE_TRACE(name) \ - DEFINE_TRACE_FN(name, NULL, NULL); + DEFINE_TRACE_FN(name, NULL, NULL) -extern void tracepoint_update_probe_range(struct tracepoint *begin, - struct tracepoint *end); +extern void tracepoint_update_probe_range(struct tracepoint * const *begin, + struct tracepoint * const *end); #else /* !CONFIG_TRACEPOINTS */ #define __DECLARE_TRACE(name, proto, args) \ @@ -147,11 +145,11 @@ extern void tracepoint_update_probe_range(struct tracepoint *begin, { } \ static inline void _trace_##name(proto) \ { } \ - static inline int register_trace_##name(void (*probe)(proto)) \ + static inline int register_trace_##name(void (*probe)(proto), void *data) \ { \ return -ENOSYS; \ } \ - static inline int unregister_trace_##name(void (*probe)(proto)) \ + static inline int unregister_trace_##name(void (*probe)(proto), void *data) \ { \ return -ENOSYS; \ } @@ -191,15 +189,15 @@ extern void tracepoint_probe_update_all(void); struct tracepoint_iter { //ust// struct module *module; struct tracepoint_lib *lib; - struct tracepoint *tracepoint; + struct tracepoint * const *tracepoint; }; extern void tracepoint_iter_start(struct tracepoint_iter *iter); extern void tracepoint_iter_next(struct tracepoint_iter *iter); extern void tracepoint_iter_stop(struct tracepoint_iter *iter); extern void tracepoint_iter_reset(struct tracepoint_iter *iter); -extern int tracepoint_get_iter_range(struct tracepoint **tracepoint, - struct tracepoint *begin, struct tracepoint *end); +extern int tracepoint_get_iter_range(struct tracepoint * const **tracepoint, + struct tracepoint * const *begin, struct tracepoint * const *end); /* * tracepoint_synchronize_unregister must be called between the last tracepoint @@ -212,22 +210,22 @@ static inline void tracepoint_synchronize_unregister(void) } struct tracepoint_lib { - struct tracepoint *tracepoints_start; + struct tracepoint * const *tracepoints_start; int tracepoints_count; struct cds_list_head list; }; -extern int tracepoint_register_lib(struct tracepoint *tracepoints_start, +extern int tracepoint_register_lib(struct tracepoint * const *tracepoints_start, int tracepoints_count); -extern int tracepoint_unregister_lib(struct tracepoint *tracepoints_start); +extern int tracepoint_unregister_lib(struct tracepoint * const *tracepoints_start); #define TRACEPOINT_LIB \ - extern struct tracepoint __start___tracepoints[] __attribute__((weak, visibility("hidden"))); \ - extern struct tracepoint __stop___tracepoints[] __attribute__((weak, visibility("hidden"))); \ + extern struct tracepoint * const __start___tracepoints[] __attribute__((weak, visibility("hidden"))); \ + extern struct tracepoint * const __stop___tracepoints[] __attribute__((weak, visibility("hidden"))); \ static void __attribute__((constructor)) __tracepoints__init(void) \ { \ tracepoint_register_lib(__start___tracepoints, \ - (((long)__stop___tracepoints)-((long)__start___tracepoints))/sizeof(struct tracepoint)); \ + (((long)__stop___tracepoints)-((long)__start___tracepoints)) / sizeof(*__start___tracepoints)); \ } \ \ static void __attribute__((destructor)) __tracepoints__destroy(void) \