From: Mathieu Desnoyers Date: Wed, 13 Apr 2011 17:59:16 +0000 (-0400) Subject: Tracepoints: add wrapper tracepoint() macro X-Git-Tag: v1.9.1~401 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=cc7b66ba103c213a84159c2128cd4096507bdd2b;p=lttng-ust.git Tracepoints: add wrapper tracepoint() macro ** 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 CC: Nils Carlson CC: Steven Rostedt CC: Josh Stone --- diff --git a/include/ust/tracepoint.h b/include/ust/tracepoint.h index 49a9b6e6..b2e03cd4 100644 --- a/include/ust/tracepoint.h +++ b/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_range(struct tracepoint * const *begin, { } \ 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; \ } diff --git a/include/ust/ust_trace.h b/include/ust/ust_trace.h index 66f1e878..21c941a6 100644 --- a/include/ust/ust_trace.h +++ b/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); \ } diff --git a/tests/hello/hello.c b/tests/hello/hello.c index 09a35b98..a786fbf8 100644 --- a/tests/hello/hello.c +++ b/tests/hello/hello.c @@ -73,7 +73,7 @@ int main() for(i=0; i<50; i++) { ust_marker(bar, "str %s", "FOOBAZ"); ust_marker(bar2, "number1 %d number2 %d", 53, 9800); - trace_hello_tptest(i); + tracepoint(hello_tptest, i); usleep(100000); } diff --git a/tests/hello/tp.c b/tests/hello/tp.c index 3a4c6fca..ec3e7ac7 100644 --- a/tests/hello/tp.c +++ b/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); } diff --git a/tests/register_test/register_test.c b/tests/register_test/register_test.c index 4d1f0fe7..02225deb 100644 --- a/tests/register_test/register_test.c +++ b/tests/register_test/register_test.c @@ -65,13 +65,13 @@ static void * register_thread_main(void *data) } 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; diff --git a/tests/trace_event/trace_event_test.c b/tests/trace_event/trace_event_test.c index f4fa90a8..b38e7ad2 100644 --- a/tests/trace_event/trace_event_test.c +++ b/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; } diff --git a/tests/tracepoint/benchmark/tracepoint_benchmark.c b/tests/tracepoint/benchmark/tracepoint_benchmark.c index 4d354bb1..43ec21fc 100644 --- a/tests/tracepoint/benchmark/tracepoint_benchmark.c +++ b/tests/tracepoint/benchmark/tracepoint_benchmark.c @@ -49,12 +49,12 @@ void tp_probe(void *data, unsigned int p1) 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) diff --git a/tests/tracepoint/tracepoint_test.c b/tests/tracepoint/tracepoint_test.c index 88fa10b0..78171b8f 100644 --- a/tests/tracepoint/tracepoint_test.c +++ b/tests/tracepoint/tracepoint_test.c @@ -90,18 +90,18 @@ void tp_probe(void *data, unsigned int p1) 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; }