xref: /openbmc/qemu/scripts/tracetool/backend/ust.py (revision fbc54b94)
1*fbc54b94SLluís Vilanova#!/usr/bin/env python
2*fbc54b94SLluís Vilanova# -*- coding: utf-8 -*-
3*fbc54b94SLluís Vilanova
4*fbc54b94SLluís Vilanova"""
5*fbc54b94SLluís VilanovaLTTng User Space Tracing backend.
6*fbc54b94SLluís Vilanova"""
7*fbc54b94SLluís Vilanova
8*fbc54b94SLluís Vilanova__author__     = "Lluís Vilanova <vilanova@ac.upc.edu>"
9*fbc54b94SLluís Vilanova__copyright__  = "Copyright 2012, Lluís Vilanova <vilanova@ac.upc.edu>"
10*fbc54b94SLluís Vilanova__license__    = "GPL version 2 or (at your option) any later version"
11*fbc54b94SLluís Vilanova
12*fbc54b94SLluís Vilanova__maintainer__ = "Stefan Hajnoczi"
13*fbc54b94SLluís Vilanova__email__      = "stefanha@linux.vnet.ibm.com"
14*fbc54b94SLluís Vilanova
15*fbc54b94SLluís Vilanova
16*fbc54b94SLluís Vilanovafrom tracetool import out
17*fbc54b94SLluís Vilanova
18*fbc54b94SLluís Vilanova
19*fbc54b94SLluís Vilanovadef c(events):
20*fbc54b94SLluís Vilanova    out('#include <ust/marker.h>',
21*fbc54b94SLluís Vilanova        '#undef mutex_lock',
22*fbc54b94SLluís Vilanova        '#undef mutex_unlock',
23*fbc54b94SLluís Vilanova        '#undef inline',
24*fbc54b94SLluís Vilanova        '#undef wmb',
25*fbc54b94SLluís Vilanova        '#include "trace.h"')
26*fbc54b94SLluís Vilanova
27*fbc54b94SLluís Vilanova    for e in events:
28*fbc54b94SLluís Vilanova        argnames = ", ".join(e.args.names())
29*fbc54b94SLluís Vilanova        if len(e.args) > 0:
30*fbc54b94SLluís Vilanova            argnames = ', ' + argnames
31*fbc54b94SLluís Vilanova
32*fbc54b94SLluís Vilanova            out('DEFINE_TRACE(ust_%(name)s);',
33*fbc54b94SLluís Vilanova                '',
34*fbc54b94SLluís Vilanova                'static void ust_%(name)s_probe(%(args)s)',
35*fbc54b94SLluís Vilanova                '{',
36*fbc54b94SLluís Vilanova                '    trace_mark(ust, %(name)s, %(fmt)s%(argnames)s);',
37*fbc54b94SLluís Vilanova                '}',
38*fbc54b94SLluís Vilanova                name = e.name,
39*fbc54b94SLluís Vilanova                args = e.args,
40*fbc54b94SLluís Vilanova                fmt = e.fmt,
41*fbc54b94SLluís Vilanova                argnames = argnames,
42*fbc54b94SLluís Vilanova                )
43*fbc54b94SLluís Vilanova
44*fbc54b94SLluís Vilanova        else:
45*fbc54b94SLluís Vilanova            out('DEFINE_TRACE(ust_%(name)s);',
46*fbc54b94SLluís Vilanova                '',
47*fbc54b94SLluís Vilanova                'static void ust_%(name)s_probe(%(args)s)',
48*fbc54b94SLluís Vilanova                '{',
49*fbc54b94SLluís Vilanova                '    trace_mark(ust, %(name)s, UST_MARKER_NOARGS);',
50*fbc54b94SLluís Vilanova                '}',
51*fbc54b94SLluís Vilanova                name = e.name,
52*fbc54b94SLluís Vilanova                args = e.args,
53*fbc54b94SLluís Vilanova                )
54*fbc54b94SLluís Vilanova
55*fbc54b94SLluís Vilanova    # register probes
56*fbc54b94SLluís Vilanova    out('',
57*fbc54b94SLluís Vilanova        'static void __attribute__((constructor)) trace_init(void)',
58*fbc54b94SLluís Vilanova        '{')
59*fbc54b94SLluís Vilanova
60*fbc54b94SLluís Vilanova    for e in events:
61*fbc54b94SLluís Vilanova        out('    register_trace_ust_%(name)s(ust_%(name)s_probe);',
62*fbc54b94SLluís Vilanova            name = e.name,
63*fbc54b94SLluís Vilanova            )
64*fbc54b94SLluís Vilanova
65*fbc54b94SLluís Vilanova    out('}')
66*fbc54b94SLluís Vilanova
67*fbc54b94SLluís Vilanova
68*fbc54b94SLluís Vilanovadef h(events):
69*fbc54b94SLluís Vilanova    out('#include <ust/tracepoint.h>',
70*fbc54b94SLluís Vilanova        '#undef mutex_lock',
71*fbc54b94SLluís Vilanova        '#undef mutex_unlock',
72*fbc54b94SLluís Vilanova        '#undef inline',
73*fbc54b94SLluís Vilanova        '#undef wmb')
74*fbc54b94SLluís Vilanova
75*fbc54b94SLluís Vilanova    for e in events:
76*fbc54b94SLluís Vilanova        if len(e.args) > 0:
77*fbc54b94SLluís Vilanova            out('DECLARE_TRACE(ust_%(name)s, TP_PROTO(%(args)s), TP_ARGS(%(argnames)s));',
78*fbc54b94SLluís Vilanova                '#define trace_%(name)s trace_ust_%(name)s',
79*fbc54b94SLluís Vilanova                name = e.name,
80*fbc54b94SLluís Vilanova                args = e.args,
81*fbc54b94SLluís Vilanova                argnames = ", ".join(e.args.names()),
82*fbc54b94SLluís Vilanova                )
83*fbc54b94SLluís Vilanova
84*fbc54b94SLluís Vilanova        else:
85*fbc54b94SLluís Vilanova            out('_DECLARE_TRACEPOINT_NOARGS(ust_%(name)s);',
86*fbc54b94SLluís Vilanova                '#define trace_%(name)s trace_ust_%(name)s',
87*fbc54b94SLluís Vilanova                name = e.name,
88*fbc54b94SLluís Vilanova                )
89*fbc54b94SLluís Vilanova
90*fbc54b94SLluís Vilanova    out()
91