From: Jan Blunck Date: Sun, 25 Oct 2009 12:57:45 +0000 (+0100) Subject: Move immediate.h, marker.h and tracepoint.h to include/ust/ X-Git-Tag: v0.1~71^2~1 X-Git-Url: http://git.lttng.org/?p=ust.git;a=commitdiff_plain;h=93d0f2eaff675059588e958e3de74a1bb7dd4028 Move immediate.h, marker.h and tracepoint.h to include/ust/ Move the primary header files to a common location and install them with ust/ prefix in /usr/include. Signed-off-by: Jan Blunck --- diff --git a/Makefile.am b/Makefile.am index 46dc86c..1ab5948 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,5 @@ ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = libust tests libmallocwrap ustd ustctl libinterfork +SUBDIRS = libust tests libmallocwrap ustd ustctl libinterfork include EXTRA_DIST = doc share/kernelcompat.h share/share.h share/usterr.h dist_bin_SCRIPTS = usttrace diff --git a/configure.ac b/configure.ac index 441caaa..1070e26 100644 --- a/configure.ac +++ b/configure.ac @@ -65,6 +65,7 @@ AC_CHECK_HEADERS([kcompat.h], [], [AC_MSG_ERROR([Cannot find kcompat headers (kc AC_CONFIG_FILES([ Makefile + include/Makefile libust/Makefile tests/Makefile tests/hello/Makefile diff --git a/include/Makefile.am b/include/Makefile.am new file mode 100644 index 0000000..0a4f87d --- /dev/null +++ b/include/Makefile.am @@ -0,0 +1 @@ +nobase_include_HEADERS = ust/immediate.h ust/marker.h ust/tracepoint.h diff --git a/include/ust/immediate.h b/include/ust/immediate.h new file mode 100644 index 0000000..1b117cf --- /dev/null +++ b/include/ust/immediate.h @@ -0,0 +1,97 @@ +#ifndef _LINUX_IMMEDIATE_H +#define _LINUX_IMMEDIATE_H + +/* + * Immediate values, can be updated at runtime and save cache lines. + * + * (C) Copyright 2007 Mathieu Desnoyers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifdef USE_IMMEDIATE + +#include + +/** + * imv_set - set immediate variable (with locking) + * @name: immediate value name + * @i: required value + * + * Sets the value of @name, taking the module_mutex if required by + * the architecture. + */ +#define imv_set(name, i) \ + do { \ + name##__imv = (i); \ + core_imv_update(); \ + module_imv_update(); \ + } while (0) + +/* + * Internal update functions. + */ +extern void core_imv_update(void); +extern void imv_update_range(const struct __imv *begin, + const struct __imv *end); +extern void imv_unref_core_init(void); +extern void imv_unref(struct __imv *begin, struct __imv *end, void *start, + unsigned long size); + +#else + +/* + * Generic immediate values: a simple, standard, memory load. + */ + +/** + * imv_read - read immediate variable + * @name: immediate value name + * + * Reads the value of @name. + */ +#define imv_read(name) _imv_read(name) + +/** + * imv_set - set immediate variable (with locking) + * @name: immediate value name + * @i: required value + * + * Sets the value of @name, taking the module_mutex if required by + * the architecture. + */ +#define imv_set(name, i) (name##__imv = (i)) + +static inline void core_imv_update(void) { } +static inline void imv_unref_core_init(void) { } + +#endif + +#define DECLARE_IMV(type, name) extern __typeof__(type) name##__imv +#define DEFINE_IMV(type, name) __typeof__(type) name##__imv + +#define EXPORT_IMV_SYMBOL(name) EXPORT_SYMBOL(name##__imv) +#define EXPORT_IMV_SYMBOL_GPL(name) EXPORT_SYMBOL_GPL(name##__imv) + +/** + * _imv_read - Read immediate value with standard memory load. + * @name: immediate value name + * + * Force a data read of the immediate value instead of the immediate value + * based mechanism. Useful for __init and __exit section data read. + */ +#define _imv_read(name) (name##__imv) + +#endif diff --git a/include/ust/marker.h b/include/ust/marker.h new file mode 100644 index 0000000..cb2c46d --- /dev/null +++ b/include/ust/marker.h @@ -0,0 +1,313 @@ +/* + * Code markup for dynamic and static tracing. + * + * See Documentation/marker.txt. + * + * (C) Copyright 2006 Mathieu Desnoyers + * (C) Copyright 2009 Pierre-Marc Fournier + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _LINUX_MARKER_H +#define _LINUX_MARKER_H + +#include +//ust// #include +#include +//ust// #include +#include "kernelcompat.h" +#include +#include "usterr.h" + +//ust// struct module; +//ust// struct task_struct; +struct marker; + +/** + * marker_probe_func - Type of a marker probe function + * @mdata: marker data + * @probe_private: probe private data + * @call_private: call site private data + * @fmt: format string + * @args: variable argument list pointer. Use a pointer to overcome C's + * inability to pass this around as a pointer in a portable manner in + * the callee otherwise. + * + * Type of marker probe functions. They receive the mdata and need to parse the + * format string to recover the variable argument list. + */ +typedef void marker_probe_func(const struct marker *mdata, + void *probe_private, void *call_private, + const char *fmt, va_list *args); + +struct marker_probe_closure { + marker_probe_func *func; /* Callback */ + void *probe_private; /* Private probe data */ +}; + +struct marker { + const char *channel; /* Name of channel where to send data */ + const char *name; /* Marker name */ + const char *format; /* Marker format string, describing the + * variable argument list. + */ + DEFINE_IMV(char, state);/* Immediate value state. */ + char ptype; /* probe type : 0 : single, 1 : multi */ + /* Probe wrapper */ + u16 channel_id; /* Numeric channel identifier, dynamic */ + u16 event_id; /* Numeric event identifier, dynamic */ + void (*call)(const struct marker *mdata, void *call_private, ...); + struct marker_probe_closure single; + struct marker_probe_closure *multi; + const char *tp_name; /* Optional tracepoint name */ + void *tp_cb; /* Optional tracepoint callback */ +} __attribute__((aligned(8))); + +#define CONFIG_MARKERS +#ifdef CONFIG_MARKERS + +#define _DEFINE_MARKER(channel, name, tp_name_str, tp_cb, format) \ + static const char __mstrtab_##channel##_##name[] \ + __attribute__((section("__markers_strings"))) \ + = #channel "\0" #name "\0" format; \ + static struct marker __mark_##channel##_##name \ + __attribute__((section("__markers"), aligned(8))) = \ + { __mstrtab_##channel##_##name, \ + &__mstrtab_##channel##_##name[sizeof(#channel)], \ + &__mstrtab_##channel##_##name[sizeof(#channel) + \ + sizeof(#name)], \ + 0, 0, 0, 0, marker_probe_cb, \ + { __mark_empty_function, NULL}, \ + NULL, tp_name_str, tp_cb } + +#define DEFINE_MARKER(channel, name, format) \ + _DEFINE_MARKER(channel, name, NULL, NULL, format) + +#define DEFINE_MARKER_TP(channel, name, tp_name, tp_cb, format) \ + _DEFINE_MARKER(channel, name, #tp_name, tp_cb, format) + +/* + * Make sure the alignment of the structure in the __markers section will + * not add unwanted padding between the beginning of the section and the + * structure. Force alignment to the same alignment as the section start. + * + * The "generic" argument controls which marker enabling mechanism must be used. + * If generic is true, a variable read is used. + * If generic is false, immediate values are used. + */ +#define __trace_mark(generic, channel, name, call_private, format, args...) \ + do { \ + DEFINE_MARKER(channel, name, format); \ + __mark_check_format(format, ## args); \ + if (!generic) { \ + if (unlikely(imv_read( \ + __mark_##channel##_##name.state))) \ + (*__mark_##channel##_##name.call) \ + (&__mark_##channel##_##name, \ + call_private, ## args); \ + } else { \ + if (unlikely(_imv_read( \ + __mark_##channel##_##name.state))) \ + (*__mark_##channel##_##name.call) \ + (&__mark_##channel##_##name, \ + call_private, ## args); \ + } \ + } while (0) + +#define __trace_mark_tp(channel, name, call_private, tp_name, tp_cb, \ + format, args...) \ + do { \ + void __check_tp_type(void) \ + { \ + register_trace_##tp_name(tp_cb); \ + } \ + DEFINE_MARKER_TP(channel, name, tp_name, tp_cb, format);\ + __mark_check_format(format, ## args); \ + (*__mark_##channel##_##name.call)(&__mark_##channel##_##name, \ + call_private, ## args); \ + } while (0) + +extern void marker_update_probe_range(struct marker *begin, + struct marker *end); + +#define GET_MARKER(channel, name) (__mark_##channel##_##name) + +#else /* !CONFIG_MARKERS */ +#define DEFINE_MARKER(channel, name, tp_name, tp_cb, format) +#define __trace_mark(generic, channel, name, call_private, format, args...) \ + __mark_check_format(format, ## args) +#define __trace_mark_tp(channel, name, call_private, tp_name, tp_cb, \ + format, args...) \ + do { \ + void __check_tp_type(void) \ + { \ + register_trace_##tp_name(tp_cb); \ + } \ + __mark_check_format(format, ## args); \ + } while (0) +static inline void marker_update_probe_range(struct marker *begin, + struct marker *end) +{ } +#define GET_MARKER(channel, name) +#endif /* CONFIG_MARKERS */ + +/** + * trace_mark - Marker using code patching + * @channel: marker channel (where to send the data), not quoted. + * @name: marker name, not quoted. + * @format: format string + * @args...: variable argument list + * + * Places a marker using optimized code patching technique (imv_read()) + * to be enabled when immediate values are present. + */ +#define trace_mark(channel, name, format, args...) \ + __trace_mark(0, channel, name, NULL, format, ## args) + +/** + * _trace_mark - Marker using variable read + * @channel: marker channel (where to send the data), not quoted. + * @name: marker name, not quoted. + * @format: format string + * @args...: variable argument list + * + * Places a marker using a standard memory read (_imv_read()) to be + * enabled. Should be used for markers in code paths where instruction + * modification based enabling is not welcome. (__init and __exit functions, + * lockdep, some traps, printk). + */ +#define _trace_mark(channel, name, format, args...) \ + __trace_mark(1, channel, name, NULL, format, ## args) + +/** + * trace_mark_tp - Marker in a tracepoint callback + * @channel: marker channel (where to send the data), not quoted. + * @name: marker name, not quoted. + * @tp_name: tracepoint name, not quoted. + * @tp_cb: tracepoint callback. Should have an associated global symbol so it + * is not optimized away by the compiler (should not be static). + * @format: format string + * @args...: variable argument list + * + * Places a marker in a tracepoint callback. + */ +#define trace_mark_tp(channel, name, tp_name, tp_cb, format, args...) \ + __trace_mark_tp(channel, name, NULL, tp_name, tp_cb, format, ## args) + +/** + * MARK_NOARGS - Format string for a marker with no argument. + */ +#define MARK_NOARGS " " + +extern void lock_markers(void); +extern void unlock_markers(void); + +extern void markers_compact_event_ids(void); + +/* To be used for string format validity checking with gcc */ +static inline void __printf(1, 2) ___mark_check_format(const char *fmt, ...) +{ +} + +#define __mark_check_format(format, args...) \ + do { \ + if (0) \ + ___mark_check_format(format, ## args); \ + } while (0) + +extern marker_probe_func __mark_empty_function; + +extern void marker_probe_cb(const struct marker *mdata, + void *call_private, ...); + +/* + * Connect a probe to a marker. + * private data pointer must be a valid allocated memory address, or NULL. + */ +extern int marker_probe_register(const char *channel, const char *name, + const char *format, marker_probe_func *probe, void *probe_private); + +/* + * Returns the private data given to marker_probe_register. + */ +extern int marker_probe_unregister(const char *channel, const char *name, + marker_probe_func *probe, void *probe_private); +/* + * Unregister a marker by providing the registered private data. + */ +extern int marker_probe_unregister_private_data(marker_probe_func *probe, + void *probe_private); + +extern void *marker_get_private_data(const char *channel, const char *name, + marker_probe_func *probe, int num); + +/* + * marker_synchronize_unregister must be called between the last marker probe + * unregistration and the first one of + * - the end of module exit function + * - the free of any resource used by the probes + * to ensure the code and data are valid for any possibly running probes. + */ +#define marker_synchronize_unregister() synchronize_sched() + +struct marker_iter { +//ust// struct module *module; + struct lib *lib; + struct marker *marker; +}; + +extern void marker_iter_start(struct marker_iter *iter); +extern void marker_iter_next(struct marker_iter *iter); +extern void marker_iter_stop(struct marker_iter *iter); +extern void marker_iter_reset(struct marker_iter *iter); +extern int marker_get_iter_range(struct marker **marker, struct marker *begin, + struct marker *end); + +extern void marker_update_process(void); +extern int is_marker_enabled(const char *channel, const char *name); + +//ust// #ifdef CONFIG_MARKERS_USERSPACE +//ust// extern void exit_user_markers(struct task_struct *p); +//ust// #else +//ust// static inline void exit_user_markers(struct task_struct *p) +//ust// { +//ust// } +//ust// #endif + + +struct lib { + struct marker *markers_start; + int markers_count; + struct list_head list; +}; + +extern int marker_register_lib(struct marker *markers_start, + int markers_count); + +#define MARKER_LIB \ +extern struct marker __start___markers[] __attribute__((visibility("hidden"))); \ +extern struct marker __stop___markers[] __attribute__((visibility("hidden"))); \ + \ +static void __attribute__((constructor)) __markers__init(void) \ +{ \ + DBG("next registration in "__FILE__"\n");\ + marker_register_lib(__start___markers, (((long)__stop___markers)-((long)__start___markers))/sizeof(struct marker));\ +} + +extern void marker_set_new_marker_cb(void (*cb)(struct marker *)); +extern void init_markers(void); + +#endif diff --git a/include/ust/tracepoint.h b/include/ust/tracepoint.h new file mode 100644 index 0000000..7cfdbb0 --- /dev/null +++ b/include/ust/tracepoint.h @@ -0,0 +1,213 @@ +#ifndef _LINUX_TRACEPOINT_H +#define _LINUX_TRACEPOINT_H + +/* + * Copyright (C) 2008 Mathieu Desnoyers + * Copyright (C) 2009 Pierre-Marc Fournier + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; 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. + * + * Ported to userspace by Pierre-Marc Fournier. + */ + +//#include +//#include +//#include + +#define _LGPL_SOURCE +#include + +#include +#include "kernelcompat.h" + +struct module; +struct tracepoint; + +struct tracepoint { + const char *name; /* Tracepoint name */ + DEFINE_IMV(char, state); /* State. */ + void **funcs; +} __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 TPPROTO(args...) args +#define TPARGS(args...) args + +#define CONFIG_TRACEPOINTS +#ifdef CONFIG_TRACEPOINTS + +/* + * it_func[0] is never NULL because there is at least one element in the array + * when the array itself is non NULL. + */ +#define __DO_TRACE(tp, proto, args) \ + do { \ + void **it_func; \ + \ + rcu_read_lock(); /*ust rcu_read_lock_sched_notrace(); */ \ + it_func = rcu_dereference((tp)->funcs); \ + if (it_func) { \ + do { \ + ((void(*)(proto))(*it_func))(args); \ + } while (*(++it_func)); \ + } \ + rcu_read_unlock(); /*ust rcu_read_unlock_sched_notrace(); */ \ + } while (0) + +#define __CHECK_TRACE(name, generic, proto, args) \ + do { \ + if (!generic) { \ + if (unlikely(imv_read(__tracepoint_##name.state))) \ + __DO_TRACE(&__tracepoint_##name, \ + TPPROTO(proto), TPARGS(args)); \ + } else { \ + if (unlikely(_imv_read(__tracepoint_##name.state))) \ + __DO_TRACE(&__tracepoint_##name, \ + TPPROTO(proto), TPARGS(args)); \ + } \ + } while (0) + +/* + * Make sure the alignment of the structure in the __tracepoints section will + * not add unwanted padding between the beginning of the section and the + * structure. Force alignment to the same alignment as the section start. + * + * The "generic" argument, passed to the declared __trace_##name inline + * function controls which tracepoint enabling mechanism must be used. + * If generic is true, a variable read is used. + * If generic is false, immediate values are used. + */ +#define DECLARE_TRACE(name, proto, args) \ + extern struct tracepoint __tracepoint_##name; \ + static inline void trace_##name(proto) \ + { \ + __CHECK_TRACE(name, 0, TPPROTO(proto), TPARGS(args)); \ + } \ + static inline void _trace_##name(proto) \ + { \ + __CHECK_TRACE(name, 1, TPPROTO(proto), TPARGS(args)); \ + } \ + static inline int register_trace_##name(void (*probe)(proto)) \ + { \ + return tracepoint_probe_register(#name, (void *)probe); \ + } \ + static inline int unregister_trace_##name(void (*probe)(proto)) \ + { \ + return tracepoint_probe_unregister(#name, (void *)probe);\ + } + +#define DEFINE_TRACE(name) \ + static const char __tpstrtab_##name[] \ + __attribute__((section("__tracepoints_strings"))) = #name; \ + struct tracepoint __tracepoint_##name \ + __attribute__((section("__tracepoints"), aligned(32))) = \ + { __tpstrtab_##name, 0, NULL } + +#define EXPORT_TRACEPOINT_SYMBOL_GPL(name) \ + EXPORT_SYMBOL_GPL(__tracepoint_##name) +#define EXPORT_TRACEPOINT_SYMBOL(name) \ + EXPORT_SYMBOL(__tracepoint_##name) + +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 */ + +/* + * Connect a probe to a tracepoint. + * Internal API, should not be used directly. + */ +extern int tracepoint_probe_register(const char *name, void *probe); + +/* + * Disconnect a probe from a tracepoint. + * Internal API, should not be used directly. + */ +extern int tracepoint_probe_unregister(const char *name, void *probe); + +extern int tracepoint_probe_register_noupdate(const char *name, void *probe); +extern int tracepoint_probe_unregister_noupdate(const char *name, void *probe); +extern void tracepoint_probe_update_all(void); + +struct tracepoint_iter { +//ust// struct module *module; + struct tracepoint_lib *lib; + struct tracepoint *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); + +/* + * tracepoint_synchronize_unregister must be called between the last tracepoint + * probe unregistration and the end of module exit to make sure there is no + * caller executing a probe when it is freed. + */ +static inline void tracepoint_synchronize_unregister(void) +{ +//ust// synchronize_sched(); +} + +struct tracepoint_lib { + struct tracepoint *tracepoints_start; + int tracepoints_count; + struct list_head list; +}; + +extern int tracepoint_register_lib(struct tracepoint *tracepoints_start, + int tracepoints_count); + +#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 diff --git a/libmallocwrap/Makefile.am b/libmallocwrap/Makefile.am index 1f7dad3..fa09307 100644 --- a/libmallocwrap/Makefile.am +++ b/libmallocwrap/Makefile.am @@ -1,4 +1,4 @@ -INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/libust +INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/include lib_LTLIBRARIES = libmallocwrap.la libmallocwrap_la_SOURCES = mallocwrap.c diff --git a/libmallocwrap/mallocwrap.c b/libmallocwrap/mallocwrap.c index d505b67..be1f39e 100644 --- a/libmallocwrap/mallocwrap.c +++ b/libmallocwrap/mallocwrap.c @@ -20,7 +20,7 @@ #include #include -#include "marker.h" +#include #if 0 INTERCEPT_PROTOTYPE(void, malloc, size_t size) diff --git a/libust/Makefile.am b/libust/Makefile.am index 6cd0916..a8986f2 100644 --- a/libust/Makefile.am +++ b/libust/Makefile.am @@ -1,9 +1,7 @@ -INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/libustcomm +AM_CPPFLAGS = -I$(top_builddir)/share -I$(top_builddir)/libustcomm -I$(top_builddir)/include lib_LTLIBRARIES = libust.la -libust_la_SOURCES = buffer.h marker.c marker.h tracepoint.c tracepoint.h immediate.h channels.c channels.h marker-control.c marker-control.h relay.c relay.h tracer.c tracer.h tracercore.c tracercore.h serialize.c tracectl.c $(top_builddir)/libustcomm/ustcomm.c $(top_builddir)/share/usterr.h +libust_la_SOURCES = buffer.h marker.c tracepoint.c channels.c channels.h marker-control.c marker-control.h relay.c relay.h tracer.c tracer.h tracercore.c tracercore.h serialize.c tracectl.c $(top_builddir)/libustcomm/ustcomm.c $(top_builddir)/share/usterr.h libust_la_LDFLAGS = -no-undefined -version-info 0:0:0 libust_la_LIBADD = -lpthread libust_la_CFLAGS = -DUST_COMPONENT="libust" - -include_HEADERS = marker.h tracepoint.h immediate.h diff --git a/libust/channels.c b/libust/channels.c index 10ab587..a4f4af1 100644 --- a/libust/channels.c +++ b/libust/channels.c @@ -31,7 +31,7 @@ #include "kernelcompat.h" #include "channels.h" #include "usterr.h" -#include "marker.h" +#include /* * ltt_channel_mutex may be nested inside the LTT trace mutex. diff --git a/libust/immediate.h b/libust/immediate.h deleted file mode 100644 index 1b117cf..0000000 --- a/libust/immediate.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef _LINUX_IMMEDIATE_H -#define _LINUX_IMMEDIATE_H - -/* - * Immediate values, can be updated at runtime and save cache lines. - * - * (C) Copyright 2007 Mathieu Desnoyers - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef USE_IMMEDIATE - -#include - -/** - * imv_set - set immediate variable (with locking) - * @name: immediate value name - * @i: required value - * - * Sets the value of @name, taking the module_mutex if required by - * the architecture. - */ -#define imv_set(name, i) \ - do { \ - name##__imv = (i); \ - core_imv_update(); \ - module_imv_update(); \ - } while (0) - -/* - * Internal update functions. - */ -extern void core_imv_update(void); -extern void imv_update_range(const struct __imv *begin, - const struct __imv *end); -extern void imv_unref_core_init(void); -extern void imv_unref(struct __imv *begin, struct __imv *end, void *start, - unsigned long size); - -#else - -/* - * Generic immediate values: a simple, standard, memory load. - */ - -/** - * imv_read - read immediate variable - * @name: immediate value name - * - * Reads the value of @name. - */ -#define imv_read(name) _imv_read(name) - -/** - * imv_set - set immediate variable (with locking) - * @name: immediate value name - * @i: required value - * - * Sets the value of @name, taking the module_mutex if required by - * the architecture. - */ -#define imv_set(name, i) (name##__imv = (i)) - -static inline void core_imv_update(void) { } -static inline void imv_unref_core_init(void) { } - -#endif - -#define DECLARE_IMV(type, name) extern __typeof__(type) name##__imv -#define DEFINE_IMV(type, name) __typeof__(type) name##__imv - -#define EXPORT_IMV_SYMBOL(name) EXPORT_SYMBOL(name##__imv) -#define EXPORT_IMV_SYMBOL_GPL(name) EXPORT_SYMBOL_GPL(name##__imv) - -/** - * _imv_read - Read immediate value with standard memory load. - * @name: immediate value name - * - * Force a data read of the immediate value instead of the immediate value - * based mechanism. Useful for __init and __exit section data read. - */ -#define _imv_read(name) (name##__imv) - -#endif diff --git a/libust/marker.c b/libust/marker.c index ff01f42..cebf07d 100644 --- a/libust/marker.c +++ b/libust/marker.c @@ -35,7 +35,7 @@ #include "kernelcompat.h" -#include "marker.h" +#include #include "usterr.h" #include "channels.h" #include "tracercore.h" diff --git a/libust/marker.h b/libust/marker.h deleted file mode 100644 index ad813bc..0000000 --- a/libust/marker.h +++ /dev/null @@ -1,313 +0,0 @@ -/* - * Code markup for dynamic and static tracing. - * - * See Documentation/marker.txt. - * - * (C) Copyright 2006 Mathieu Desnoyers - * (C) Copyright 2009 Pierre-Marc Fournier - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef _LINUX_MARKER_H -#define _LINUX_MARKER_H - -#include -//ust// #include -#include "immediate.h" -//ust// #include -#include "kernelcompat.h" -#include -#include "usterr.h" - -//ust// struct module; -//ust// struct task_struct; -struct marker; - -/** - * marker_probe_func - Type of a marker probe function - * @mdata: marker data - * @probe_private: probe private data - * @call_private: call site private data - * @fmt: format string - * @args: variable argument list pointer. Use a pointer to overcome C's - * inability to pass this around as a pointer in a portable manner in - * the callee otherwise. - * - * Type of marker probe functions. They receive the mdata and need to parse the - * format string to recover the variable argument list. - */ -typedef void marker_probe_func(const struct marker *mdata, - void *probe_private, void *call_private, - const char *fmt, va_list *args); - -struct marker_probe_closure { - marker_probe_func *func; /* Callback */ - void *probe_private; /* Private probe data */ -}; - -struct marker { - const char *channel; /* Name of channel where to send data */ - const char *name; /* Marker name */ - const char *format; /* Marker format string, describing the - * variable argument list. - */ - DEFINE_IMV(char, state);/* Immediate value state. */ - char ptype; /* probe type : 0 : single, 1 : multi */ - /* Probe wrapper */ - u16 channel_id; /* Numeric channel identifier, dynamic */ - u16 event_id; /* Numeric event identifier, dynamic */ - void (*call)(const struct marker *mdata, void *call_private, ...); - struct marker_probe_closure single; - struct marker_probe_closure *multi; - const char *tp_name; /* Optional tracepoint name */ - void *tp_cb; /* Optional tracepoint callback */ -} __attribute__((aligned(8))); - -#define CONFIG_MARKERS -#ifdef CONFIG_MARKERS - -#define _DEFINE_MARKER(channel, name, tp_name_str, tp_cb, format) \ - static const char __mstrtab_##channel##_##name[] \ - __attribute__((section("__markers_strings"))) \ - = #channel "\0" #name "\0" format; \ - static struct marker __mark_##channel##_##name \ - __attribute__((section("__markers"), aligned(8))) = \ - { __mstrtab_##channel##_##name, \ - &__mstrtab_##channel##_##name[sizeof(#channel)], \ - &__mstrtab_##channel##_##name[sizeof(#channel) + \ - sizeof(#name)], \ - 0, 0, 0, 0, marker_probe_cb, \ - { __mark_empty_function, NULL}, \ - NULL, tp_name_str, tp_cb } - -#define DEFINE_MARKER(channel, name, format) \ - _DEFINE_MARKER(channel, name, NULL, NULL, format) - -#define DEFINE_MARKER_TP(channel, name, tp_name, tp_cb, format) \ - _DEFINE_MARKER(channel, name, #tp_name, tp_cb, format) - -/* - * Make sure the alignment of the structure in the __markers section will - * not add unwanted padding between the beginning of the section and the - * structure. Force alignment to the same alignment as the section start. - * - * The "generic" argument controls which marker enabling mechanism must be used. - * If generic is true, a variable read is used. - * If generic is false, immediate values are used. - */ -#define __trace_mark(generic, channel, name, call_private, format, args...) \ - do { \ - DEFINE_MARKER(channel, name, format); \ - __mark_check_format(format, ## args); \ - if (!generic) { \ - if (unlikely(imv_read( \ - __mark_##channel##_##name.state))) \ - (*__mark_##channel##_##name.call) \ - (&__mark_##channel##_##name, \ - call_private, ## args); \ - } else { \ - if (unlikely(_imv_read( \ - __mark_##channel##_##name.state))) \ - (*__mark_##channel##_##name.call) \ - (&__mark_##channel##_##name, \ - call_private, ## args); \ - } \ - } while (0) - -#define __trace_mark_tp(channel, name, call_private, tp_name, tp_cb, \ - format, args...) \ - do { \ - void __check_tp_type(void) \ - { \ - register_trace_##tp_name(tp_cb); \ - } \ - DEFINE_MARKER_TP(channel, name, tp_name, tp_cb, format);\ - __mark_check_format(format, ## args); \ - (*__mark_##channel##_##name.call)(&__mark_##channel##_##name, \ - call_private, ## args); \ - } while (0) - -extern void marker_update_probe_range(struct marker *begin, - struct marker *end); - -#define GET_MARKER(channel, name) (__mark_##channel##_##name) - -#else /* !CONFIG_MARKERS */ -#define DEFINE_MARKER(channel, name, tp_name, tp_cb, format) -#define __trace_mark(generic, channel, name, call_private, format, args...) \ - __mark_check_format(format, ## args) -#define __trace_mark_tp(channel, name, call_private, tp_name, tp_cb, \ - format, args...) \ - do { \ - void __check_tp_type(void) \ - { \ - register_trace_##tp_name(tp_cb); \ - } \ - __mark_check_format(format, ## args); \ - } while (0) -static inline void marker_update_probe_range(struct marker *begin, - struct marker *end) -{ } -#define GET_MARKER(channel, name) -#endif /* CONFIG_MARKERS */ - -/** - * trace_mark - Marker using code patching - * @channel: marker channel (where to send the data), not quoted. - * @name: marker name, not quoted. - * @format: format string - * @args...: variable argument list - * - * Places a marker using optimized code patching technique (imv_read()) - * to be enabled when immediate values are present. - */ -#define trace_mark(channel, name, format, args...) \ - __trace_mark(0, channel, name, NULL, format, ## args) - -/** - * _trace_mark - Marker using variable read - * @channel: marker channel (where to send the data), not quoted. - * @name: marker name, not quoted. - * @format: format string - * @args...: variable argument list - * - * Places a marker using a standard memory read (_imv_read()) to be - * enabled. Should be used for markers in code paths where instruction - * modification based enabling is not welcome. (__init and __exit functions, - * lockdep, some traps, printk). - */ -#define _trace_mark(channel, name, format, args...) \ - __trace_mark(1, channel, name, NULL, format, ## args) - -/** - * trace_mark_tp - Marker in a tracepoint callback - * @channel: marker channel (where to send the data), not quoted. - * @name: marker name, not quoted. - * @tp_name: tracepoint name, not quoted. - * @tp_cb: tracepoint callback. Should have an associated global symbol so it - * is not optimized away by the compiler (should not be static). - * @format: format string - * @args...: variable argument list - * - * Places a marker in a tracepoint callback. - */ -#define trace_mark_tp(channel, name, tp_name, tp_cb, format, args...) \ - __trace_mark_tp(channel, name, NULL, tp_name, tp_cb, format, ## args) - -/** - * MARK_NOARGS - Format string for a marker with no argument. - */ -#define MARK_NOARGS " " - -extern void lock_markers(void); -extern void unlock_markers(void); - -extern void markers_compact_event_ids(void); - -/* To be used for string format validity checking with gcc */ -static inline void __printf(1, 2) ___mark_check_format(const char *fmt, ...) -{ -} - -#define __mark_check_format(format, args...) \ - do { \ - if (0) \ - ___mark_check_format(format, ## args); \ - } while (0) - -extern marker_probe_func __mark_empty_function; - -extern void marker_probe_cb(const struct marker *mdata, - void *call_private, ...); - -/* - * Connect a probe to a marker. - * private data pointer must be a valid allocated memory address, or NULL. - */ -extern int marker_probe_register(const char *channel, const char *name, - const char *format, marker_probe_func *probe, void *probe_private); - -/* - * Returns the private data given to marker_probe_register. - */ -extern int marker_probe_unregister(const char *channel, const char *name, - marker_probe_func *probe, void *probe_private); -/* - * Unregister a marker by providing the registered private data. - */ -extern int marker_probe_unregister_private_data(marker_probe_func *probe, - void *probe_private); - -extern void *marker_get_private_data(const char *channel, const char *name, - marker_probe_func *probe, int num); - -/* - * marker_synchronize_unregister must be called between the last marker probe - * unregistration and the first one of - * - the end of module exit function - * - the free of any resource used by the probes - * to ensure the code and data are valid for any possibly running probes. - */ -#define marker_synchronize_unregister() synchronize_sched() - -struct marker_iter { -//ust// struct module *module; - struct lib *lib; - struct marker *marker; -}; - -extern void marker_iter_start(struct marker_iter *iter); -extern void marker_iter_next(struct marker_iter *iter); -extern void marker_iter_stop(struct marker_iter *iter); -extern void marker_iter_reset(struct marker_iter *iter); -extern int marker_get_iter_range(struct marker **marker, struct marker *begin, - struct marker *end); - -extern void marker_update_process(void); -extern int is_marker_enabled(const char *channel, const char *name); - -//ust// #ifdef CONFIG_MARKERS_USERSPACE -//ust// extern void exit_user_markers(struct task_struct *p); -//ust// #else -//ust// static inline void exit_user_markers(struct task_struct *p) -//ust// { -//ust// } -//ust// #endif - - -struct lib { - struct marker *markers_start; - int markers_count; - struct list_head list; -}; - -extern int marker_register_lib(struct marker *markers_start, - int markers_count); - -#define MARKER_LIB \ -extern struct marker __start___markers[] __attribute__((visibility("hidden"))); \ -extern struct marker __stop___markers[] __attribute__((visibility("hidden"))); \ - \ -static void __attribute__((constructor)) __markers__init(void) \ -{ \ - DBG("next registration in "__FILE__"\n");\ - marker_register_lib(__start___markers, (((long)__stop___markers)-((long)__start___markers))/sizeof(struct marker));\ -} - -extern void marker_set_new_marker_cb(void (*cb)(struct marker *)); -extern void init_markers(void); - -#endif diff --git a/libust/tracectl.c b/libust/tracectl.c index 8cb44f8..3d3bd48 100644 --- a/libust/tracectl.c +++ b/libust/tracectl.c @@ -29,7 +29,7 @@ #include -#include "marker.h" +#include #include "tracer.h" #include "usterr.h" #include "ustcomm.h" diff --git a/libust/tracepoint.c b/libust/tracepoint.c index df94b2c..9de21c8 100644 --- a/libust/tracepoint.c +++ b/libust/tracepoint.c @@ -33,7 +33,7 @@ #include #include "kernelcompat.h" -#include "tracepoint.h" +#include #include "usterr.h" //#include "list.h" diff --git a/libust/tracepoint.h b/libust/tracepoint.h deleted file mode 100644 index b1ee16d..0000000 --- a/libust/tracepoint.h +++ /dev/null @@ -1,213 +0,0 @@ -#ifndef _LINUX_TRACEPOINT_H -#define _LINUX_TRACEPOINT_H - -/* - * Copyright (C) 2008 Mathieu Desnoyers - * Copyright (C) 2009 Pierre-Marc Fournier - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; 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. - * - * Ported to userspace by Pierre-Marc Fournier. - */ - -//#include -//#include -//#include - -#define _LGPL_SOURCE -#include - -#include "immediate.h" -#include "kernelcompat.h" - -struct module; -struct tracepoint; - -struct tracepoint { - const char *name; /* Tracepoint name */ - DEFINE_IMV(char, state); /* State. */ - void **funcs; -} __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 TPPROTO(args...) args -#define TPARGS(args...) args - -#define CONFIG_TRACEPOINTS -#ifdef CONFIG_TRACEPOINTS - -/* - * it_func[0] is never NULL because there is at least one element in the array - * when the array itself is non NULL. - */ -#define __DO_TRACE(tp, proto, args) \ - do { \ - void **it_func; \ - \ - rcu_read_lock(); /*ust rcu_read_lock_sched_notrace(); */ \ - it_func = rcu_dereference((tp)->funcs); \ - if (it_func) { \ - do { \ - ((void(*)(proto))(*it_func))(args); \ - } while (*(++it_func)); \ - } \ - rcu_read_unlock(); /*ust rcu_read_unlock_sched_notrace(); */ \ - } while (0) - -#define __CHECK_TRACE(name, generic, proto, args) \ - do { \ - if (!generic) { \ - if (unlikely(imv_read(__tracepoint_##name.state))) \ - __DO_TRACE(&__tracepoint_##name, \ - TPPROTO(proto), TPARGS(args)); \ - } else { \ - if (unlikely(_imv_read(__tracepoint_##name.state))) \ - __DO_TRACE(&__tracepoint_##name, \ - TPPROTO(proto), TPARGS(args)); \ - } \ - } while (0) - -/* - * Make sure the alignment of the structure in the __tracepoints section will - * not add unwanted padding between the beginning of the section and the - * structure. Force alignment to the same alignment as the section start. - * - * The "generic" argument, passed to the declared __trace_##name inline - * function controls which tracepoint enabling mechanism must be used. - * If generic is true, a variable read is used. - * If generic is false, immediate values are used. - */ -#define DECLARE_TRACE(name, proto, args) \ - extern struct tracepoint __tracepoint_##name; \ - static inline void trace_##name(proto) \ - { \ - __CHECK_TRACE(name, 0, TPPROTO(proto), TPARGS(args)); \ - } \ - static inline void _trace_##name(proto) \ - { \ - __CHECK_TRACE(name, 1, TPPROTO(proto), TPARGS(args)); \ - } \ - static inline int register_trace_##name(void (*probe)(proto)) \ - { \ - return tracepoint_probe_register(#name, (void *)probe); \ - } \ - static inline int unregister_trace_##name(void (*probe)(proto)) \ - { \ - return tracepoint_probe_unregister(#name, (void *)probe);\ - } - -#define DEFINE_TRACE(name) \ - static const char __tpstrtab_##name[] \ - __attribute__((section("__tracepoints_strings"))) = #name; \ - struct tracepoint __tracepoint_##name \ - __attribute__((section("__tracepoints"), aligned(32))) = \ - { __tpstrtab_##name, 0, NULL } - -#define EXPORT_TRACEPOINT_SYMBOL_GPL(name) \ - EXPORT_SYMBOL_GPL(__tracepoint_##name) -#define EXPORT_TRACEPOINT_SYMBOL(name) \ - EXPORT_SYMBOL(__tracepoint_##name) - -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 */ - -/* - * Connect a probe to a tracepoint. - * Internal API, should not be used directly. - */ -extern int tracepoint_probe_register(const char *name, void *probe); - -/* - * Disconnect a probe from a tracepoint. - * Internal API, should not be used directly. - */ -extern int tracepoint_probe_unregister(const char *name, void *probe); - -extern int tracepoint_probe_register_noupdate(const char *name, void *probe); -extern int tracepoint_probe_unregister_noupdate(const char *name, void *probe); -extern void tracepoint_probe_update_all(void); - -struct tracepoint_iter { -//ust// struct module *module; - struct tracepoint_lib *lib; - struct tracepoint *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); - -/* - * tracepoint_synchronize_unregister must be called between the last tracepoint - * probe unregistration and the end of module exit to make sure there is no - * caller executing a probe when it is freed. - */ -static inline void tracepoint_synchronize_unregister(void) -{ -//ust// synchronize_sched(); -} - -struct tracepoint_lib { - struct tracepoint *tracepoints_start; - int tracepoints_count; - struct list_head list; -}; - -extern int tracepoint_register_lib(struct tracepoint *tracepoints_start, - int tracepoints_count); - -#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 diff --git a/libust/tracer.h b/libust/tracer.h index 601d19a..9275fd0 100644 --- a/libust/tracer.h +++ b/libust/tracer.h @@ -32,7 +32,7 @@ #include "relay.h" #include "channels.h" #include "tracercore.h" -#include "marker.h" +#include /* Number of bytes to log with a read/write event */ #define LTT_LOG_RW_SIZE 32L diff --git a/tests/basic/Makefile.am b/tests/basic/Makefile.am index 669cb82..bfb77fc 100644 --- a/tests/basic/Makefile.am +++ b/tests/basic/Makefile.am @@ -1,4 +1,4 @@ -INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/libust +INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/include noinst_PROGRAMS = basic basic_SOURCES = basic.c diff --git a/tests/basic/basic.c b/tests/basic/basic.c index a5ceff3..c1fa806 100644 --- a/tests/basic/basic.c +++ b/tests/basic/basic.c @@ -1,8 +1,7 @@ #include #include -#include "marker.h" - +#include int main() { diff --git a/tests/basic_long/Makefile.am b/tests/basic_long/Makefile.am index a6e0f7c..867ac83 100644 --- a/tests/basic_long/Makefile.am +++ b/tests/basic_long/Makefile.am @@ -1,4 +1,4 @@ -INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/libust +INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/include noinst_PROGRAMS = basic_long basic_long_SOURCES = basic_long.c diff --git a/tests/basic_long/basic_long.c b/tests/basic_long/basic_long.c index 29f26ef..803d7ea 100644 --- a/tests/basic_long/basic_long.c +++ b/tests/basic_long/basic_long.c @@ -1,8 +1,7 @@ #include #include -#include "marker.h" - +#include int main() { diff --git a/tests/fork/Makefile.am b/tests/fork/Makefile.am index 86a1a79..4e2baf8 100644 --- a/tests/fork/Makefile.am +++ b/tests/fork/Makefile.am @@ -1,4 +1,4 @@ -INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/libust +INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/include noinst_PROGRAMS = fork fork2 fork_SOURCES = fork.c diff --git a/tests/fork/fork.c b/tests/fork/fork.c index 677261b..241ef81 100644 --- a/tests/fork/fork.c +++ b/tests/fork/fork.c @@ -2,8 +2,7 @@ #include #include -#include "marker.h" - +#include int main(int argc, char **argv, char *env[]) { diff --git a/tests/fork/fork2.c b/tests/fork/fork2.c index 7d0dda7..63659c4 100644 --- a/tests/fork/fork2.c +++ b/tests/fork/fork2.c @@ -1,7 +1,7 @@ #include #include -#include "marker.h" +#include int main() { diff --git a/tests/hello/Makefile.am b/tests/hello/Makefile.am index bef643d..e6b3385 100644 --- a/tests/hello/Makefile.am +++ b/tests/hello/Makefile.am @@ -1,4 +1,4 @@ -INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/libust +INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/include noinst_PROGRAMS = hello hello_SOURCES = hello.c tp.c tp.h diff --git a/tests/hello/hello.c b/tests/hello/hello.c index 0417f1e..dc220c4 100644 --- a/tests/hello/hello.c +++ b/tests/hello/hello.c @@ -7,11 +7,7 @@ #include #include -#include "marker.h" -#include "usterr.h" -#include "tracer.h" -#include "marker-control.h" -#include "relay.h" +#include #include "tp.h" diff --git a/tests/hello/tp.c b/tests/hello/tp.c index 2ee7392..e3d6761 100644 --- a/tests/hello/tp.c +++ b/tests/hello/tp.c @@ -1,5 +1,5 @@ #include "tp.h" -#include "marker.h" +#include #include "usterr.h" DEFINE_TRACE(hello_tptest); diff --git a/tests/hello/tp.h b/tests/hello/tp.h index 6064283..ea401e1 100644 --- a/tests/hello/tp.h +++ b/tests/hello/tp.h @@ -1,4 +1,4 @@ -#include "tracepoint.h" +#include DECLARE_TRACE(hello_tptest, TPPROTO(int anint), diff --git a/tests/hello2/Makefile.am b/tests/hello2/Makefile.am index 8c3aad1..85cfd2b 100644 --- a/tests/hello2/Makefile.am +++ b/tests/hello2/Makefile.am @@ -1,4 +1,4 @@ -INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/libust +INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/include noinst_PROGRAMS = hello2 hello2_SOURCES = hello2.c diff --git a/tests/hello2/hello2.c b/tests/hello2/hello2.c index bd3856c..17e478c 100644 --- a/tests/hello2/hello2.c +++ b/tests/hello2/hello2.c @@ -2,7 +2,8 @@ #include #include -#include "marker.h" +#include + int main() { int i; diff --git a/ustd/Makefile.am b/ustd/Makefile.am index df49a82..e8fa272 100644 --- a/ustd/Makefile.am +++ b/ustd/Makefile.am @@ -1,5 +1,5 @@ -INCLUDES = -I$(top_builddir)/share -I$(top_builddir)/libust \ - -I$(top_builddir)/libustcomm +AM_CPPFLAGS = -I$(top_builddir)/share -I$(top_builddir)/libust \ + -I$(top_builddir)/libustcomm -I$(top_builddir)/include bin_PROGRAMS = ustd ustd_SOURCES = lowlevel.c ustd.c ustd.h $(top_builddir)/libustcomm/ustcomm.c $(top_builddir)/libustcomm/ustcomm.h $(top_builddir)/share/usterr.h