X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=libmarkers%2Ftracepoint.h;h=6f14ea08a696f43428e615fccfb00eda12a90759;hb=e70acc91ae21023149204a245638c1d2dffa7265;hp=860b674978ba47a85df3a820de5478de0d378093;hpb=f99be40702e206d2cef5aa056623d7b07f21f942;p=ust.git diff --git a/libmarkers/tracepoint.h b/libmarkers/tracepoint.h index 860b674..6f14ea0 100644 --- a/libmarkers/tracepoint.h +++ b/libmarkers/tracepoint.h @@ -2,21 +2,34 @@ #define _LINUX_TRACEPOINT_H /* - * Kernel Tracepoint API. + * Copyright (C) 2008 Mathieu Desnoyers + * Copyright (C) 2009 Pierre-Marc Fournier * - * See Documentation/tracepoint.txt. + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. * - * (C) Copyright 2008 Mathieu Desnoyers + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * Heavily inspired from the Linux Kernel Markers. * - * This file is released under the GPLv2. - * See the file COPYING for more details. + * Ported to userspace by Pierre-Marc Fournier. */ -#include -#include -#include +//#include +//#include +//#include + +#include "immediate.h" +#include "kernelcompat.h" struct module; struct tracepoint; @@ -35,7 +48,7 @@ struct tracepoint { #define TPPROTO(args...) args #define TPARGS(args...) args -#ifdef CONFIG_TRACEPOINTS +//ust// #ifdef CONFIG_TRACEPOINTS /* * it_func[0] is never NULL because there is at least one element in the array @@ -112,29 +125,29 @@ struct tracepoint { extern void tracepoint_update_probe_range(struct tracepoint *begin, struct tracepoint *end); -#else /* !CONFIG_TRACEPOINTS */ -#define DECLARE_TRACE(name, proto, args) \ - static inline void trace_##name(proto) \ - { } \ - static inline void _trace_##name(proto) \ - { } \ - static inline int register_trace_##name(void (*probe)(proto)) \ - { \ - return -ENOSYS; \ - } \ - static inline int unregister_trace_##name(void (*probe)(proto)) \ - { \ - return -ENOSYS; \ - } - -#define DEFINE_TRACE(name) -#define EXPORT_TRACEPOINT_SYMBOL_GPL(name) -#define EXPORT_TRACEPOINT_SYMBOL(name) - -static inline void tracepoint_update_probe_range(struct tracepoint *begin, - struct tracepoint *end) -{ } -#endif /* CONFIG_TRACEPOINTS */ +//ust// #else /* !CONFIG_TRACEPOINTS */ +//ust// #define DECLARE_TRACE(name, proto, args) \ +//ust// static inline void trace_##name(proto) \ +//ust// { } \ +//ust// static inline void _trace_##name(proto) \ +//ust// { } \ +//ust// static inline int register_trace_##name(void (*probe)(proto)) \ +//ust// { \ +//ust// return -ENOSYS; \ +//ust// } \ +//ust// static inline int unregister_trace_##name(void (*probe)(proto)) \ +//ust// { \ +//ust// return -ENOSYS; \ +//ust// } +//ust// +//ust// #define DEFINE_TRACE(name) +//ust// #define EXPORT_TRACEPOINT_SYMBOL_GPL(name) +//ust// #define EXPORT_TRACEPOINT_SYMBOL(name) +//ust// +//ust// static inline void tracepoint_update_probe_range(struct tracepoint *begin, +//ust// struct tracepoint *end) +//ust// { } +//ust// #endif /* CONFIG_TRACEPOINTS */ /* * Connect a probe to a tracepoint. @@ -153,7 +166,8 @@ extern int tracepoint_probe_unregister_noupdate(const char *name, void *probe); extern void tracepoint_probe_update_all(void); struct tracepoint_iter { - struct module *module; +//ust// struct module *module; + struct tracepoint_lib *lib; struct tracepoint *tracepoint; }; @@ -174,4 +188,18 @@ static inline void tracepoint_synchronize_unregister(void) synchronize_sched(); } +struct tracepoint_lib { + struct tracepoint *tracepoints_start; + int tracepoints_count; + struct list_head list; +}; + +#define TRACEPOINT_LIB \ +extern struct tracepoint __start___tracepoints[] __attribute__((visibility("hidden"))); \ +extern struct tracepoint __stop___tracepoints[] __attribute__((visibility("hidden"))); \ + \ +static void __attribute__((constructor)) __tracepoints__init(void) \ +{ \ + tracepoint_register_lib(__start___tracepoints, (((long)__stop___tracepoints)-((long)__start___tracepoints))/sizeof(struct tracepoint));\ +} #endif