[ltt-dev] [UST PATCH] Tracepoints: add wrapper tracepoint() macro
Nils Carlson
nils.carlson at ericsson.com
Mon Apr 11 08:04:47 EDT 2011
Hi,
Again, looks good, but maybe we should prefix with ust_ ?
I like the macro approach.
/Nils
On Mon, 11 Apr 2011, Mathieu Desnoyers wrote:
> ** Instrumentation API change **
>
> Moving tracepoints from
>
> trace_name(args)
> register_trace_name(...)
> unregister_trace_name(...)
>
> to
>
> tracepoint(name, args)
> register_tracepoint(name, ...)
> unregister_tracepoint(name, ...)
>
> This will allow doing macro tricks at the "tracepoint()" macro expansion
> site. This will be useful for integration with SystemTAP probes, which
> needs to expand an inline assembly with constraints on the arguments.
>
> Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> CC: Nils Carlson <nils.carlson at ericsson.com>
> CC: Steven Rostedt <srostedt at redhat.com>
> CC: Josh Stone <jistone at redhat.com>
> ---
> include/ust/tracepoint.h | 22 +++++++++++++++++-----
> include/ust/ust_trace.h | 6 +++---
> tests/hello/hello.c | 2 +-
> tests/hello/tp.c | 2 +-
> tests/register_test/register_test.c | 6 +++---
> tests/trace_event/trace_event_test.c | 2 +-
> tests/tracepoint/benchmark/tracepoint_benchmark.c | 4 ++--
> tests/tracepoint/tracepoint_test.c | 12 ++++++------
> 8 files changed, 34 insertions(+), 22 deletions(-)
>
> Index: ust/include/ust/tracepoint.h
> ===================================================================
> --- ust.orig/include/ust/tracepoint.h
> +++ ust/include/ust/tracepoint.h
> @@ -49,6 +49,18 @@ struct tracepoint {
> #define TP_PROTO(args...) args
> #define TP_ARGS(args...) args
>
> +/*
> + * Tracepoints should be added to the instrumented code using the
> + * "tracepoint()" macro.
> + */
> +#define tracepoint(name, args...) __trace_##name(args)
> +
> +#define register_tracepoint(name, probe, data) \
> + __register_trace_##name(probe, data)
> +
> +#define unregister_tracepoint(name, probe, data) \
> + __unregister_trace_##name(probe, data)
> +
> #define CONFIG_TRACEPOINTS
> #ifdef CONFIG_TRACEPOINTS
>
> @@ -99,7 +111,7 @@ struct tracepoint {
> */
> #define __DECLARE_TRACE(name, proto, args, data_proto, data_args) \
> extern struct tracepoint __tracepoint_##name; \
> - static inline void trace_##name(proto) \
> + static inline void __trace_##name(proto) \
> { \
> __CHECK_TRACE(name, 0, TP_PROTO(data_proto), \
> TP_ARGS(data_args)); \
> @@ -110,14 +122,14 @@ struct tracepoint {
> TP_ARGS(data_args)); \
> } \
> static inline int \
> - register_trace_##name(void (*probe)(data_proto), void *data) \
> + __register_trace_##name(void (*probe)(data_proto), void *data) \
> { \
> return tracepoint_probe_register(#name, (void *)probe, \
> data); \
> \
> } \
> static inline int \
> - unregister_trace_##name(void (*probe)(data_proto), void *data) \
> + __unregister_trace_##name(void (*probe)(data_proto), void *data)\
> { \
> return tracepoint_probe_unregister(#name, (void *)probe, \
> data); \
> @@ -145,11 +157,11 @@ extern void tracepoint_update_probe_rang
> { } \
> static inline void _trace_##name(proto) \
> { } \
> - static inline int register_trace_##name(void (*probe)(proto), void *data) \
> + static inline int __register_trace_##name(void (*probe)(proto), void *data) \
> { \
> return -ENOSYS; \
> } \
> - static inline int unregister_trace_##name(void (*probe)(proto), void *data) \
> + static inline int __unregister_trace_##name(void (*probe)(proto), void *data) \
> { \
> return -ENOSYS; \
> }
> Index: ust/include/ust/ust_trace.h
> ===================================================================
> --- ust.orig/include/ust/ust_trace.h
> +++ ust/include/ust/ust_trace.h
> @@ -70,11 +70,11 @@
> } \
> static inline int register_event_##name(void *data) \
> { \
> - return register_trace_##name(trace_printf_##name, data); \
> + return register_tracepoint(name, trace_printf_##name, data); \
> } \
> static inline int unregister_event_##name(void *data) \
> { \
> - return unregister_trace_##name(trace_printf_##name, data); \
> + return unregister_tracepoint(name, trace_printf_##name, data); \
> } \
> struct trace_event __event_##name = { \
> __tpstrtab_##name, \
> @@ -88,7 +88,7 @@
> static void __attribute__((constructor)) init_##name() \
> { \
> void *dummy = NULL; \
> - register_trace_##name(trace_printf_##name, dummy); \
> + register_tracepoint(name, trace_printf_##name, dummy); \
> }
>
>
> Index: ust/tests/hello/hello.c
> ===================================================================
> --- ust.orig/tests/hello/hello.c
> +++ ust/tests/hello/hello.c
> @@ -73,7 +73,7 @@ int main()
> for(i=0; i<50; i++) {
> trace_mark(bar, "str %s", "FOOBAZ");
> trace_mark(bar2, "number1 %d number2 %d", 53, 9800);
> - trace_hello_tptest(i);
> + tracepoint(hello_tptest, i);
> usleep(100000);
> }
>
> Index: ust/tests/hello/tp.c
> ===================================================================
> --- ust.orig/tests/hello/tp.c
> +++ ust/tests/hello/tp.c
> @@ -40,5 +40,5 @@ void tptest_probe(void *data, int anint)
> static void __attribute__((constructor)) init()
> {
> DBG("connecting tracepoint...\n");
> - register_trace_hello_tptest(tptest_probe, &hello_struct);
> + register_tracepoint(hello_tptest, tptest_probe, &hello_struct);
> }
> Index: ust/tests/register_test/register_test.c
> ===================================================================
> --- ust.orig/tests/register_test/register_test.c
> +++ ust/tests/register_test/register_test.c
> @@ -65,13 +65,13 @@ static void * register_thread_main(void
> }
>
> for (i=0; i<1000; i++) {
> - while (!register_trace_hello_tptest(tptest_probe,
> + while (!register_tracepoint(hello_tptest, tptest_probe,
> &hello[j%HELLO_LENGTH])) {
> usleep(10);
> j++;
> }
> printf("Registered all\n");
> - while (!unregister_trace_hello_tptest(tptest_probe,
> + while (!unregister_tracepoint(hello_tptest, tptest_probe,
> &hello[j%HELLO_LENGTH])) {
> usleep(10);
> j++;
> @@ -89,7 +89,7 @@ int main(int argc, char **argv)
>
> pthread_create(®ister_thread, NULL, register_thread_main, NULL);
> for(i=0; i<1000000; i++) {
> - trace_hello_tptest(i);
> + tracepoint(hello_tptest, i);
> }
>
> return 0;
> Index: ust/tests/trace_event/trace_event_test.c
> ===================================================================
> --- ust.orig/tests/trace_event/trace_event_test.c
> +++ ust/tests/trace_event/trace_event_test.c
> @@ -25,7 +25,7 @@ int main(int argc, char * argv[])
> static unsigned long time, i;
> for (i=0; i<10; i++) {
> time=trace_clock_read64();
> - trace_test(time, i);
> + tracepoint(test, time, i);
> }
> return 0;
> }
> Index: ust/tests/tracepoint/benchmark/tracepoint_benchmark.c
> ===================================================================
> --- ust.orig/tests/tracepoint/benchmark/tracepoint_benchmark.c
> +++ ust/tests/tracepoint/benchmark/tracepoint_benchmark.c
> @@ -49,12 +49,12 @@ void tp_probe(void *data, unsigned int p
>
> static void __attribute__((constructor)) init()
> {
> - register_trace_ust_event(tp_probe, NULL);
> + register_tracepoint(ust_event, tp_probe, NULL);
> }
>
> void single_trace(unsigned int v)
> {
> - trace_ust_event(v);
> + tracepoint(ust_event, v);
> }
>
> void do_trace(void)
> Index: ust/tests/tracepoint/tracepoint_test.c
> ===================================================================
> --- ust.orig/tests/tracepoint/tracepoint_test.c
> +++ ust/tests/tracepoint/tracepoint_test.c
> @@ -90,18 +90,18 @@ void tp_probe(void *data, unsigned int p
>
> static void __attribute__((constructor)) init()
> {
> - register_trace_ust_event(tp_probe, NULL);
> - register_trace_ust_event(tp_probe2, NULL);
> - register_trace_ust_event(tp_probe3, &msg_probe3);
> - register_trace_ust_event2(tp_probe4, NULL);
> + register_tracepoint(ust_event, tp_probe, NULL);
> + register_tracepoint(ust_event, tp_probe2, NULL);
> + register_tracepoint(ust_event, tp_probe3, &msg_probe3);
> + register_tracepoint(ust_event2, tp_probe4, NULL);
> }
>
> int main(int argc, char **argv) {
> unsigned int v = 42;
> /* Tracepoint 1 : ust_event */
> - trace_ust_event(v);
> + tracepoint(ust_event, v);
> /* Tracepoint 2 : ust_event2 */
> - trace_ust_event2(v);
> + tracepoint(ust_event2, v);
>
> return 0;
> }
>
> --
> Mathieu Desnoyers
> Operating System Efficiency R&D Consultant
> EfficiOS Inc.
> http://www.efficios.com
>
More information about the lttng-dev
mailing list