diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/tracetool/backend/ust.py | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/scripts/tracetool/backend/ust.py b/scripts/tracetool/backend/ust.py new file mode 100644 index 0000000000..31a2ff0404 --- /dev/null +++ b/scripts/tracetool/backend/ust.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +LTTng User Space Tracing backend. +""" + +__author__ = "Lluís Vilanova <vilanova@ac.upc.edu>" +__copyright__ = "Copyright 2012, Lluís Vilanova <vilanova@ac.upc.edu>" +__license__ = "GPL version 2 or (at your option) any later version" + +__maintainer__ = "Stefan Hajnoczi" +__email__ = "stefanha@linux.vnet.ibm.com" + + +from tracetool import out + + +def c(events): + out('#include <ust/marker.h>', + '#undef mutex_lock', + '#undef mutex_unlock', + '#undef inline', + '#undef wmb', + '#include "trace.h"') + + for e in events: + argnames = ", ".join(e.args.names()) + if len(e.args) > 0: + argnames = ', ' + argnames + + out('DEFINE_TRACE(ust_%(name)s);', + '', + 'static void ust_%(name)s_probe(%(args)s)', + '{', + ' trace_mark(ust, %(name)s, %(fmt)s%(argnames)s);', + '}', + name = e.name, + args = e.args, + fmt = e.fmt, + argnames = argnames, + ) + + else: + out('DEFINE_TRACE(ust_%(name)s);', + '', + 'static void ust_%(name)s_probe(%(args)s)', + '{', + ' trace_mark(ust, %(name)s, UST_MARKER_NOARGS);', + '}', + name = e.name, + args = e.args, + ) + + # register probes + out('', + 'static void __attribute__((constructor)) trace_init(void)', + '{') + + for e in events: + out(' register_trace_ust_%(name)s(ust_%(name)s_probe);', + name = e.name, + ) + + out('}') + + +def h(events): + out('#include <ust/tracepoint.h>', + '#undef mutex_lock', + '#undef mutex_unlock', + '#undef inline', + '#undef wmb') + + for e in events: + if len(e.args) > 0: + out('DECLARE_TRACE(ust_%(name)s, TP_PROTO(%(args)s), TP_ARGS(%(argnames)s));', + '#define trace_%(name)s trace_ust_%(name)s', + name = e.name, + args = e.args, + argnames = ", ".join(e.args.names()), + ) + + else: + out('_DECLARE_TRACEPOINT_NOARGS(ust_%(name)s);', + '#define trace_%(name)s trace_ust_%(name)s', + name = e.name, + ) + + out() |