#!/usr/bin/env python # -*- coding: utf-8 -*- """ LTTng User Space Tracing backend. """ __author__ = "Lluís Vilanova " __copyright__ = "Copyright 2012, Lluís Vilanova " __license__ = "GPL version 2 or (at your option) any later version" __maintainer__ = "Stefan Hajnoczi" __email__ = "stefanha@linux.vnet.ibm.com" from tracetool import out PUBLIC = True def c(events): out('#include ', '#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 ', '#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()