#!/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()
